نمایش نتایج 1 تا 5 از 5

نام تاپیک: دلفی و ASP.NET !

  1. #1

    دلفی و ASP.NET !

    بنام خدا

    پس از مطالعه این مقاله خواهید آموخت چگونه از دلفی برای تولید صفحات دینامیک وب مبتنی بر تکنولوژی ASP.NET مایکروسافت استفاده کنید .

    مرحله اول : قبل از هرکار باید سیستم ASP.NET را از وجود دلفی به عنوان یکی از زبانهای اسکریپت نگاری تحت NET. مطلع سازید .

    ASP.NET برای اجرای برنامه ها به دنبال فایلی با نام web.config خواهد گشت که جزئیات زبانهای مورد استفاده سیستم در آن ثبت شده است . این فایل XML-Based باید برای معرفی دلفی به سیستم تغییر کند .

    کد زیر نمونه خامی از این نوع فایل را نمایش میدهد :




    <configuration>
    <configSections>
    <section name="appSettings"
    type="System.Configuration.NameValueFileSectionHan dler,
    System, Version=1.0.3300.0,
    Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <section name="sessionState"
    type="System.Web.SessionState.SessionStateSectionH andler,
    System.Web, Version=1.0.3300.0, Culture=neutral,
    PublicKeyToken=b03f5f7f11d50a3a"
    allowDefinition="MachineToApplication" />
    </configSections>

    <appSettings>
    <add key="dsn" value="localhost;uid=MyUserName;pwd=;" />
    <add key="msmqserver" value="server\myqueue" />
    </appSettings>

    <sessionState cookieless="true" timeout="10" />
    </configuration>



    فایل مورد نظر برای سازگاری با دلفی باید به این شکل باشد :

    <configuration>
    <system.web>
    <compilation debug="true">
    <assemblies>
    <add assembly="DelphiProvider" />
    </assemblies>
    <compilers>
    <compiler language="Delphi" extension=".pas"
    type="Borland.Delphi.DelphiCodeProvider,DelphiProv ider" />
    </compilers>
    </compilation>
    </system.web>
    </configuration>




    فایل مورد نظر باید در دایرکتوری مجازی معرفی شده برای وب سرور که محل قرار گرفتن برنامه های ASP.NET ساخته شده با دلفی است قرار بگیرد . برای این مقصود به وب سرور خود دایرکتوری مجازی دیگری معرفی کرده و فایل فوق الذکر را آنجا قرار دهید .

    مرحله دوم : در محیط ویژوال استودیو ( .. والبته اگر تمایل دارید Notepad !!!!! ) پروژه وب جدیدی باز کنید و یک تکست باکس - یک کلید - یک لیبل روی فرم خود قرار داده و تابع click را به رویداد OnClick کلید فشاری نسبت دهید . نام تکست باکس را ادیت وان و نام لیبل را مسج بگذارید . فایل حاصل را بصورت زیر ویرایش کنید :

    <html>
    <script language="Delphi" runat="server">
    procedure Click(Sender: System.Object; E: EventArgs);
    begin
    Message.Text := Edit1.Text;
    end;
    </script>
    <body>
    <form runat="server">
    <asp:textbox id="Edit1" runat="server"/>
    <asp:button text="Click Me!" OnClick="Click" runat="server"/>
    </form>
    <p><b><asp:label id="Message" runat="server"/></b></p>
    </body>
    </html>







    فایل را با نام Test.AspX ذخیره کرده و اجرا کنید . ( برای اجرا کرده برنامه های ASP.NET باید IIS و NET. Run Times را قبلا نصب و تنظیم کرده باشید !
    ... Http://localhost/ur-virtual-delphi-dir/test.aspX)

    مجموعه کامپایلر دلفی و ASP.NET کد زیر را تولید و کامپایل (!) میکنند :



    unit ASP;

    interface

    uses System.Collections, System.Collections.Specialized, System.Configuration,
    System.Text, System.Text.RegularExpressions, System.Web, System.Web.Caching,
    System.Web.SessionState, System.Web.Security, System.Web.UI, System.Web.UI.WebControls,
    System.Web.UI.HtmlControls, System.Globalization;

    var
    editdemo_aspx___autoHandlers: Integer;
    editdemo_aspx___intialized: Boolean = False;
    editdemo_aspx___fileDependencies: System.Collections.ArrayList;
    type
    editdemo_aspx = class(System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState)
    protected
    Edit1: System.Web.UI.WebControls.TextBox;
    __control3: System.Web.UI.WebControls.Button;
    __control2: System.Web.UI.HtmlControls.HtmlForm;
    Message: System.Web.UI.WebControls.Label;
    procedure ButtonClick(Sender: System.Object; E: EventArgs);
    public
    constructor Create;
    function get_AutoHandlers: Integer; override;
    function get_ApplicationInstance: System.Web.HttpApplication; virtual;
    function get_TemplateSourceDirectory: System.String; override;
    procedure set_AutoHandlers(Value: Integer); override;
    protected
    property AutoHandlers: Integer read get_AutoHandlers write set_AutoHandlers;
    property ApplicationInstance: System.Web.HttpApplication read get_ApplicationInstance;
    public
    property TemplateSourceDirectory: System.String read get_TemplateSourceDirectory;
    private
    function __BuildControlEdit1: System.Web.UI.Control;
    function __BuildControl__control3: System.Web.UI.Control;
    function __BuildControl__control2: System.Web.UI.Control;
    function __BuildControlMessage: System.Web.UI.Control;
    procedure __BuildControlTree(__ctrl: System.Web.UI.Control);
    protected
    procedure FrameworkInitialize; override;
    public
    function GetTypeHashCode: Integer; override;
    end;

    implementation


    procedure editdemo_aspx.ButtonClick(Sender: System.Object; E: EventArgs);
    begin
    Message.Text := Edit1.Text;
    end;
    constructor editdemo_aspx.Create;
    var
    dependencies: System.Collections.ArrayList;
    begin
    inherited Create;

    if (ASP.editdemo_aspx___intialized = False) then
    begin
    dependencies := System.Collections.ArrayList.Create;
    dependencies.Add('d:\vslive\editdemo.aspx' );
    ASP.editdemo_aspx___fileDependencies := dependencies;
    ASP.editdemo_aspx___intialized := True;
    end;
    Self.Server.ScriptTimeout := 30000000;
    end;

    function editdemo_aspx.get_AutoHandlers: Integer;
    begin
    Result := ASP.editdemo_aspx___autoHandlers;
    end;

    function editdemo_aspx.get_ApplicationInstance: System.Web.HttpApplication;
    begin
    Result := Self.Context.ApplicationInstance as System.Web.HttpApplication;
    end;

    function editdemo_aspx.get_TemplateSourceDirectory: System.String;
    begin
    Result := '/vslive';
    end;

    procedure editdemo_aspx.set_AutoHandlers(Value: Integer);
    begin
    ASP.editdemo_aspx___autoHandlers := Value;
    end;

    function editdemo_aspx.__BuildControlEdit1: System.Web.UI.Control;
    var
    __ctrl: System.Web.UI.WebControls.TextBox;
    begin

    __ctrl := System.Web.UI.WebControls.TextBox.Create;
    Self.Edit1 := __ctrl;
    __ctrl.ID := 'Edit1';
    __ctrl.Width := System.Web.UI.WebControls.Unit.Parse('300px', System.Globalization.CultureInfo.InvariantCulture& #41;;
    Result := __ctrl;
    end;

    function editdemo_aspx.__BuildControl__control3: System.Web.UI.Control;
    var
    __ctrl: System.Web.UI.WebControls.Button;
    begin

    __ctrl := System.Web.UI.WebControls.Button.Create;
    Self.__control3 := __ctrl;
    __ctrl.Text := 'Click Me!';
    __ctrl.add_Click(Self.ButtonClick);
    Result := __ctrl;
    end;

    function editdemo_aspx.__BuildControl__control2: System.Web.UI.Control;
    var
    __parser: System.Web.UI.IParserAccessor;
    __ctrl: System.Web.UI.HtmlControls.HtmlForm;
    begin

    __ctrl := System.Web.UI.HtmlControls.HtmlForm.Create;
    Self.__control2 := __ctrl;
    __parser := __ctrl as System.Web.UI.IParserAccessor;
    __parser.AddParsedSubObject(System.Web.UI.Lite ralControl.Create(''#13#10' '));
    Self.__BuildControlEdit1;
    __parser.AddParsedSubObject(Self.Edit1);
    __parser.AddParsedSubObject(System.Web.UI.Lite ralControl.Create(''#13#10' '));
    Self.__BuildControl__control3;
    __parser.AddParsedSubObject(Self.__control3&#4 1;;
    __parser.AddParsedSubObject(System.Web.UI.Lite ralControl.Create(''#13#10' '));
    Result := __ctrl;
    end;

    function editdemo_aspx.__BuildControlMessage: System.Web.UI.Control;
    var
    __ctrl: System.Web.UI.WebControls.Label;
    begin

    __ctrl := System.Web.UI.WebControls.Label.Create;
    Self.Message := __ctrl;
    __ctrl.ID := 'Message';
    Result := __ctrl;
    end;

    procedure editdemo_aspx.__BuildControlTree(__ctrl: System.Web.UI.Control);
    var
    __parser: System.Web.UI.IParserAccessor;
    begin
    __parser := __ctrl as System.Web.UI.IParserAccessor;
    __parser.AddParsedSubObject(System.Web.UI.Lite ralControl.Create('<html>'#13#10' '));
    __parser.AddParsedSubObject(System.Web.UI.Lite ralControl.Create(''#13#10' <body>'#13#10' '));
    Self.__BuildControl__control2;
    __parser.AddParsedSubObject(Self.__control2&#4 1;;
    __parser.AddParsedSubObject(System.Web.UI.Lite ralControl.Create(''#13#10' <p><b>'));
    Self.__BuildControlMessage;
    __parser.AddParsedSubObject(Self.Message);
    __parser.AddParsedSubObject(System.Web.UI.Lite ralControl.Create('</b></p>'#13#10' </body>'#13#10'</html>'#13#10));
    end;

    procedure editdemo_aspx.FrameworkInitialize;
    begin
    Self.__BuildControlTree(Self);
    Self.FileDependencies := ASP.editdemo_aspx___fileDependencies;
    Self.EnableViewStateMac := True;
    end;

    function editdemo_aspx.GetTypeHashCode: Integer;
    begin
    Result := -764444463;
    end;

    end.





    کد فوق صرفا زمانی قابل رویت است که خطای دستوری در برنامه دلفی خود داشته باشید و وب سرور ضمن ارائه Error مربوط سورس کد را نیر به شما نشان خواهد داد و در بقیه موارد راهی برای دیدن این کد وجود ندارد و برنامه شما بصورت اسکریپت AspX کامپایل شده که به زبان دلفی نوشته شده است قابل استفاده است .

    هر چند هنوز محصول جامع و قابل اطمینان بورلند برای سازگاری محصولاتش با دات نت معرفی نشده است و احتمالا جزئیات موجود در .Net Preview نیز تغییر خواهند کرد اما امید است توضیحات فوق تصویر نسبتا روشنی از آنچه در آینده ای نزدیک از ترکیب تکنولوژی مایکروسافت و کامپایلر بورلند نصیبتان خواهد شد ایجاد کرده باشد .

    به دو مثال زیر نیز توجه کنید :

    الف)

    یکی از اشیا مفید همراه ویژوال استودیو برای توسعه وب Calendar میباشد . یک نمونه از آن را روی فرم وب خود گذاشته و پس از نسبت دادن مقادیر مناسب به خواص پایه ای آن کد مناسب دلفی را برای تولید خروجی با عنوان تاریخ انتخاب شده توسط کاربر و حرکت به سمت تاریخ مورد نظر کاربر را به شکل زیر بنویسید :

    <script language="Delphi" runat="server">
    procedure Calendar1Selected(Sender: System.Object; E: EventArgs);
    begin
    Label1.Text := 'Delphi for .NET says you picked ' + Calendar1.SelectedDate.ToString('D');
    end;

    procedure Button1Click(Sender: System.Object; E:EventArgs);
    begin
    Calendar1.VisibleDate := System.Convert.ToDateTime(Edit1.Text);
    Label1.Text := 'Delphi for .NET says you set ' + Calendar1.VisibleDate.ToString('D');
    end;
    </script>

    <body style="font:18pt Verdana">
    <form runat="server">
    <center>
    <h1>Delphi for .NET running in ASP.NET</h1>
    <p>Please pick a date</p>
    <asp:Calendar id="Calendar1" runat="server" ForeColor="#0000FF" BackColor="#FFFFCC"
    OnSelectionChanged="Calendar1Selected">
    <TodayDayStyle Font-Bold="True"/>
    <NextPrevStyle ForeColor="#FFFFCC"/>
    <DayHeaderStyle BackColor="#FFCC66"/>
    <SelectedDayStyle ForeColor="Black" BackColor="#CCCCFF"/>
    <TitleStyle Font-Size="14pt" Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"/>
    <OtherMonthDayStyle ForeColor="#CC9966"/>
    </asp:Calendar>
    <p><asp:TextBox id="Edit1" width=200 runat="server"/>
    <asp:Button text="Set date" id="Button1" OnClick="Button1Click" runat="server" />
    </p>
    <p><asp:Label id="Label1" runat="server"/></p>
    </center>
    </form>
    </body>





    خروجی برنامه ASP.NET ای خواهد بود که در محیط ویژوال استودیو تولید شده و از کامپوننت تقویم طراحی شده با #C استفاده میکند و پیاده سازی آن توسط دلفی انجام شده است .


    ب)


    اگر آشنائی مقدماتی با محیط ویژوال استودیو داشته باشید میدانید که این محیط برای تولید سریع محتوای وب مبتنی بر بانکهای اطلاعاتی کامپوننتهای خاصی جهت نمایش و ویرایش داده ها دارد .

    یک نمونه از کامپوننت DataGrid را و یک نمونه TextBox را به فرم مثال قبلی ( تقویم ) اضافه کنید . کد دلفی نوشته شده با بانک اطلاعاتی معروف Northwind موجود در سیستم ارتباط برقرار میکند . ( باید اسکوئل سرور 2000 نصب شده باشد ! ) .

    حالا تقویم شما با بانک اطلاعاتی اتصال برقرار کرده و اطلاعات لازم استخراج میگردد .


    <%@Import Namespace="System.Data"%>
    <%@Import Namespace="System.Data.SqlClient"%>

    <script language="Delphi" runat="server">
    const
    ProdName = 'Delphi for .NET';
    DispFields = 'OrderID, CustomerID, ShipName, ShipCity, ShipCountry';

    procedure DateSelected(Sender: System.Object; E: EventArgs);
    begin
    Label1.Text := ProdName + ' says you picked ' + Calendar1.SelectedDate.ToString('D');
    DataGrid1.DataSource := GetOrders(Calendar1.SelectedDate);
    DataGrid1.DataBind;
    end;

    procedure Button1Click(Sender: System.Object; E:EventArgs);
    begin
    Calendar1.VisibleDate := System.Convert.ToDateTime(Edit1.Text);
    Label1.Text := ProdName + ' says you set ' + Calendar1.VisibleDate.ToString('D');
    end;

    procedure Button2Click(Sender: System.Object; E:EventArgs);
    begin
    DisplayFields.Text := DispFields;
    end;

    function GetOrders(Date : DateTime) : DataSet;
    var
    Adapter : SqlDataAdapter;
    begin
    Adapter := SqlDataAdapter.Create(
    'select ' + DisplayFields.Text + ' from Orders '+
    'where OrderDate = ''' + date.ToString('d')+'''',
    'Server=(local);Database=Northwind;Trusted _Connection=yes');
    Result := DataSet.Create;
    Adapter.Fill(Result);
    end;

    </script>

    <body style="font:18pt Verdana">
    <form runat="server">
    <h1><%=ProdName %> with a Calendar, DataGrid, & SqlClient in ASP.NET</h1>
    <table>
    <tr valign="top"><td>
    <p><b>Pick a date</b></p>
    <asp:Calendar id="Calendar1" runat="server" ForeColor="#0000FF" BackColor="#FFFFCC"
    OnSelectionChanged="DateSelected">
    <TodayDayStyle Font-Bold="True"/>
    <NextPrevStyle ForeColor="#FFFFCC"/>
    <DayHeaderStyle BackColor="#FFCC66"/>
    <SelectedDayStyle ForeColor="Black" BackColor="#CCCCFF"/>
    <TitleStyle Font-Size="14pt" Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"/>
    <OtherMonthDayStyle ForeColor="#CC9966"/>
    </asp:Calendar>
    <p><asp:TextBox id="Edit1" width=150 runat="server"/>
    <asp:Button text="Set date" id="Button1" OnClick="Button1Click" runat="server" />
    </p>
    </td><td valign="top">
    <p><b>Display fields:</b> <asp:TextBox id="DisplayFields"
    text="OrderID, CustomerID, ShipName, ShipCity, ShipCountry" width=500 runat="server"/>
    <asp:Button text="Reset fields" id="Button2" OnClick="Button2Click" runat="server" /></p>
    <asp:DataGrid id="DataGrid1" runat="server" BorderColor="#FFCC66" ForeColor="#0000FF">
    <HeaderStyle ForeColor="#FFFFCC" BackColor="#990000"/>
    </asp:DataGrid>
    </td></tr></table>
    <p><asp:Label id="Label1" runat="server"/></p>
    </form>
    </body>





    بخاطر داشته باشید که خطوط :


    <%@Import Namespace="System.Data"%>
    <%@Import Namespace="System.Data.SqlClient"%>



    درست مانند SqlConnection و ClientDataset محیط دلفی عمل کرده و ارتباط با بانک داده ها و ظرفی برای استخراج داده ها فراهم می آورند .

    امید است توضیحات هر چند سطحی فوق ذهنیت مناسبی برای برنامه نویسانی که قصد دارند پای به عرصه وب بگذارند ایجاد کرده باشد . موفق و موید و سلامت باشید .

    سال خوبی را برایتان آرزومندم . InpriZ

  2. #2
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342
    خسته نباشید استاد! در ضمن چقدر هم ملایم و لطیف شدی ؟!! :wink: :lol: 8)
    بالاخره روح مایکروسافت در اینپرایز :wink: دمیده شد!
    البته دات نت فریم ورک آنقدر دست و دلباز است که دلفی که هیچی :wink: زبانهایی مثل کوبول و غیره را هم می تواند در خودش جای دهد . :twisted:

  3. #3
    وحید جان !

    من آخرش تو رو به راه راست هدایت میکنم !!! :twisted: چون دوستت دارم ... :roll:

    ... و البته راه راست چیزی نیست جز اینپرایز !!!! :twisted:

    اینپرایز صراط المستقیم !

    :mrgreen: :mrgreen:

  4. #4
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342
    بعد از سی شارپ اگر عمری باقی موند! می رم سی بیلدر یاد می گیرم :wink: :twisted:

  5. #5
    جالب و آموزنده بود و مثل همیشه بدرد بخور.دستت درد نکنه.
    تا شاید آنانکه زیبایی را میشناسند به معرفت هستی دلفی برسند.

تاپیک های مشابه

  1. برنامه نویسی به زبان جاوا و دلفی در ASP.net
    نوشته شده توسط cjNet در بخش ASP.NET Web Forms
    پاسخ: 5
    آخرین پست: چهارشنبه 13 بهمن 1389, 01:04 صبح
  2. دلفی و asp.net
    نوشته شده توسط aserfg در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: یک شنبه 09 خرداد 1389, 15:10 عصر
  3. دلفی و asp.net
    نوشته شده توسط aserfg در بخش Classic ASP
    پاسخ: 0
    آخرین پست: پنج شنبه 22 مرداد 1388, 16:32 عصر
  4. ارتباط دلفی با ASP.NET از طریق sql
    نوشته شده توسط samyjoon در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 3
    آخرین پست: شنبه 15 فروردین 1388, 09:08 صبح
  5. سوال: استفاده از Dll نوشته شده در دلفی در ASP.Net
    نوشته شده توسط amin_alexi در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: دوشنبه 20 خرداد 1387, 17:31 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •