|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
也许唯一可以让世人留恋Java的理由就剩下它的王牌——跨平台。asp.net|剧本将Delphi视为剧本言语
撑持ASP.net的第一件事是让ASP.NET将Delphi视为剧本言语,让ASP.NET可以为各类ASP文件范例挪用Delphi的.NET编译器。
ASP.NET要在IIS虚路径的根目次下寻觅Web.config文件。上面是ASP.NET中利用Delphi作剧本言语的web.config配制文件内容:
<configuration>
<system.web>
<compilationdebug="true">
<assemblies>
<addassembly="DelphiProvider"/>
</assemblies>
<compilers>
<compilerlanguage="Delphi"extension=".pas"
type="Borland.Delphi.DelphiCodeProvider,DelphiProvider"/>
</compilers>
</compilation>
</system.web>
</configuration>
关于web配制文件的概况请参MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconformatofconfigurationfiles.asp
在我的呆板(Win2KPro)上测试Delphi对ASP.NET的撑持。要增添一个虚路径来安置Delphi剧本,我把这个路径名定为"vslive"。
在我的呆板配制文件上作了这个小修改后就能够来看ASP.NET是怎样将Delphi视为剧本言语的。
在ASP.NET中利用Delphi代码
起首编写一个复杂使用来确认我们的Delphi撑持配制是准确的。上面是editdemo.aspx文件的代码,有一个文本输出框,一个按钮。按钮事务触发显现输出框内容。
<html>
<scriptlanguage="Delphi"runat="server">
procedureButtonClick(Sender:System.Object;E:EventArgs);
begin
Message.Text:=Edit1.Text;
end;
</script>
<body>
<formrunat="server">
<asp:textboxid="Edit1"runat="server"/>
<asp:buttontext="ClickMe!"runat="server"/>
</form>
<p><b><asp:labelid="Message"runat="server"/></b></p>
</body>
</html>
能够看到,ASP按钮工具的OnClick事务触发Delphi的ButtonClick历程,而Delphi程序里却利用了ASP工具labelMessage和textboxEdit1。固然在Delphi过程当中没有界说ASP的二个变量,Delphi代码却能找到它们。这是由于剧本中含有的Delphi服务模块可以发生响应的Delphi代码。
如今能够用当地扫瞄器来扫瞄这个网页了。由于我把剧本放在"vslive"虚路径,以是翻开:
http://localhost/vslive/editdemo.aspx.
以下是编译以后构成的Delphi代码,代码发生WebForm:
//------------------------------------------------------------------------------
//<autogenerated>
//本代码由一个工具天生
//运转版本:1.0.3705.209
//
//修正本文件将招致非常举动并丧失天生的代码。
//</autogenerated>
//------------------------------------------------------------------------------
unitASP;
interface
usesSystem.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;
procedureButtonClick(Sender:System.Object;E:EventArgs);
public
constructorCreate;
functionget_AutoHandlers:Integer;override;
functionget_ApplicationInstance:System.Web.HttpApplication;virtual;
functionget_TemplateSourceDirectory:System.String;override;
procedureset_AutoHandlers(Value:Integer);override;
protected
propertyAutoHandlers:Integerreadget_AutoHandlerswriteset_AutoHandlers;
propertyApplicationInstance:System.Web.HttpApplicationreadget_ApplicationInstance;
public
propertyTemplateSourceDirectory:System.Stringreadget_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
procedureFrameworkInitialize;override;
public
functionGetTypeHashCode:Integer;override;
end;
implementation
procedureeditdemo_aspx.ButtonClick(Sender:System.Object;E:EventArgs);
begin
Message.Text:=Edit1.Text;
end;
constructoreditdemo_aspx.Create;
var
dependencies:System.Collections.ArrayList;
begin
inheritedCreate;
if(ASP.editdemo_aspx___intialized=False)then
begin
dependencies:=System.Collections.ArrayList.Create;
dependencies.Add(d:vsliveeditdemo.aspx);
ASP.editdemo_aspx___fileDependencies:=dependencies;
ASP.editdemo_aspx___intialized:=True;
end;
Self.Server.ScriptTimeout:=30000000;
end;
functioneditdemo_aspx.get_AutoHandlers:Integer;
begin
Result:=ASP.editdemo_aspx___autoHandlers;
end;
functioneditdemo_aspx.get_ApplicationInstance:System.Web.HttpApplication;
begin
Result:=Self.Context.ApplicationInstanceasSystem.Web.HttpApplication;
end;
functioneditdemo_aspx.get_TemplateSourceDirectory:System.String;
begin
Result:=/vslive;
end;
procedureeditdemo_aspx.set_AutoHandlers(Value:Integer);
begin
ASP.editdemo_aspx___autoHandlers:=Value;
end;
functioneditdemo_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);
Result:=__ctrl;
end;
functioneditdemo_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:=ClickMe!;
__ctrl.add_Click(Self.ButtonClick);
Result:=__ctrl;
end;
functioneditdemo_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:=__ctrlasSystem.Web.UI.IParserAccessor;
__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(#13#10));
Self.__BuildControlEdit1;
__parser.AddParsedSubObject(Self.Edit1);
__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(#13#10));
Self.__BuildControl__control3;
__parser.AddParsedSubObject(Self.__control3);
__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(#13#10));
Result:=__ctrl;
end;
functioneditdemo_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;
procedureeditdemo_aspx.__BuildControlTree(__ctrl:System.Web.UI.Control);
var
__parser:System.Web.UI.IParserAccessor;
begin
__parser:=__ctrlasSystem.Web.UI.IParserAccessor;
__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(<html>#13#10));
__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(#13#10<body>#13#10));
Self.__BuildControl__control2;
__parser.AddParsedSubObject(Self.__control2);
__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(#13#10<p><b>));
Self.__BuildControlMessage;
__parser.AddParsedSubObject(Self.Message);
__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(</b></p>#13#10</body>#13#10</html>#13#10));
end;
procedureeditdemo_aspx.FrameworkInitialize;
begin
Self.__BuildControlTree(Self);
Self.FileDependencies:=ASP.editdemo_aspx___fileDependencies;
Self.EnableViewStateMac:=True;
end;
functioneditdemo_aspx.GetTypeHashCode:Integer;
begin
Result:=-764444463;
end;
end.
注重:这里先容的是Delphi的.NET编译器功效的预览。正式公布的Delphi7天生的代码与下面将有明显分歧。本文仅是示例申明怎样在ASP.NET中利用Delphi及其功效。
更高手艺的网页
ASP.net的一些控件远比HTML控件要加倍智能化。个中之一就是日历(Calendar)控件。
以下代码是calendar.aspx中的一部分。代码供应二种办法让控件设置日期:
扫瞄日历然后选择日期;
依照日期格局输出日期,确认选择。这类办法由.NET的Convert类撑持。
<scriptlanguage="Delphi"runat="server">
procedureCalendar1Selected(Sender:System.Object;E:EventArgs);
begin
Label1.Text:=Delphifor.NETsaysyoupicked+Calendar1.SelectedDate.ToString(D);
end;
procedureButton1Click(Sender:System.Object;E:EventArgs);
begin
Calendar1.VisibleDate:=System.Convert.ToDateTime(Edit1.Text);
Label1.Text:=Delphifor.NETsaysyouset+Calendar1.VisibleDate.ToString(D);
end;
</script>
<bodystyle="font:18ptVerdana">
<formrunat="server">
<center>
<h1>Delphifor.NETrunninginASP.NET</h1>
<p>Pleasepickadate</p>
<asp:Calendarid="Calendar1"runat="server"ForeColor="#0000FF"BackColor="#FFFFCC"
OnSelectionChanged="Calendar1Selected">
<TodayDayStyleFont-Bold="True"/>
<NextPrevStyleForeColor="#FFFFCC"/>
<DayHeaderStyleBackColor="#FFCC66"/>
<SelectedDayStyleForeColor="Black"BackColor="#CCCCFF"/>
<TitleStyleFont-Size="14pt"Font-Bold="True"ForeColor="#FFFFCC"BackColor="#990000"/>
<OtherMonthDayStyleForeColor="#CC9966"/>
</asp:Calendar>
<p><asp:TextBoxid="Edit1"width=200runat="server"/>
<asp:Buttontext="Setdate"id="Button1"runat="server"/>
</p>
<p><asp:Labelid="Label1"runat="server"/></p>
</center>
</form>
</body>
在日历上选择日期触发OnSelectionChanged事务,挪用Delphi的Calendar1Selected()历程。
输出日期,点击"Setdata"按钮触发Button1Click事务,挪用Delphi的Button1Click()历程。
数据处置
如今经由过程日历的日期选择来选择显现数据库数据。在这个ASP.NETDelphi网页上,增添一个DataGrid和一个TextBox,前者显现数据库数据,后者输出要显现的数据库域。
<%@ImportNamespace="System.Data"%>
<%@ImportNamespace="System.Data.SqlClient"%>
<scriptlanguage="Delphi"runat="server">
const
ProdName=Delphifor.NET;
DispFields=OrderID,CustomerID,ShipName,ShipCity,ShipCountry;
procedureDateSelected(Sender:System.Object;E:EventArgs);
begin
Label1.Text:=ProdName+saysyoupicked+Calendar1.SelectedDate.ToString(D);
DataGrid1.DataSource:=GetOrders(Calendar1.SelectedDate);
DataGrid1.DataBind;
end;
procedureButton1Click(Sender:System.Object;E:EventArgs);
begin
Calendar1.VisibleDate:=System.Convert.ToDateTime(Edit1.Text);
Label1.Text:=ProdName+saysyouset+Calendar1.VisibleDate.ToString(D);
end;
procedureButton2Click(Sender:System.Object;E:EventArgs);
begin
DisplayFields.Text:=DispFields;
end;
functionGetOrders(Date:DateTime):DataSet;
var
Adapter:SqlDataAdapter;
begin
Adapter:=SqlDataAdapter.Create(
select+DisplayFields.Text+fromOrders+
whereOrderDate=+date.ToString(d)+,
Server=(local);Database=Northwind;Trusted_Connection=yes);
Result:=DataSet.Create;
Adapter.Fill(Result);
end;
</script>
<bodystyle="font:18ptVerdana">
<formrunat="server">
<h1><%=ProdName%>withaCalendar,DataGrid,&SqlClientinASP.NET</h1>
<table>
<trvalign="top"><td>
<p><b>Pickadate</b></p>
<asp:Calendarid="Calendar1"runat="server"ForeColor="#0000FF"BackColor="#FFFFCC"
OnSelectionChanged="DateSelected">
<TodayDayStyleFont-Bold="True"/>
<NextPrevStyleForeColor="#FFFFCC"/>
<DayHeaderStyleBackColor="#FFCC66"/>
<SelectedDayStyleForeColor="Black"BackColor="#CCCCFF"/>
<TitleStyleFont-Size="14pt"Font-Bold="True"ForeColor="#FFFFCC"BackColor="#990000"/>
<OtherMonthDayStyleForeColor="#CC9966"/>
</asp:Calendar>
<p><asp:TextBoxid="Edit1"width=150runat="server"/>
<asp:Buttontext="Setdate"id="Button1"runat="server"/>
</p>
</td><tdvalign="top">
<p><b>Displayfields:</b><asp:TextBoxid="DisplayFields"
text="OrderID,CustomerID,ShipName,ShipCity,ShipCountry"width=500runat="server"/>
<asp:Buttontext="Resetfields"id="Button2"runat="server"/></p>
<asp:DataGridid="DataGrid1"runat="server"BorderColor="#FFCC66"ForeColor="#0000FF">
<HeaderStyleForeColor="#FFFFCC"BackColor="#990000"/>
</asp:DataGrid>
</td></tr></table>
<p><asp:Labelid="Label1"runat="server"/></p>
</form>
</body>
每当用户点击日历选择日期时,就触发OnSelectionChanged事务,挪用DateSelected()函数。
在GetOrders函数中,数据库的毗连由定名空间界说的SqlClient完成,数据库是MSSQL2000的树模库Northwind。SqlDataAdapter将查询了局安装到DataGrid中,显现出数据表格,如附图。
改动域输出框的域名,再点击日历,就失掉分歧的了局。
这就是日历驱动的数据库查询体系,由Delphifor.NET与ASP.NET配合完成。
结语
本文试图大略申明在ASP.NET中使用Delphi是怎样便利。
请记着,本文示例是Delphi7的预览示例,正式版本的了局大概不完整云云,固然大概就是云云。
有专家说:java不是跨平台,java就是平台,这很好的定义了java的特点。有了java,你只需要等待java平台在新平台上移植。这还不错吧!只是,java不是一个平台,而是多个平台。你需要在这个java平台移植到另一个java平台。 |
|