仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 680|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET编程:将Delphi作为ASP.NET的剧本言语

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:32:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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平台。
再见西城 该用户已被删除
沙发
 楼主| 发表于 2015-1-22 10:23:57 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
活着的死人 该用户已被删除
板凳
发表于 2015-1-31 06:09:55 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
谁可相欹 该用户已被删除
地板
发表于 2015-2-6 17:46:11 | 只看该作者
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
分手快乐 该用户已被删除
5#
发表于 2015-2-17 20:58:26 | 只看该作者
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
6#
发表于 2015-3-5 22:54:43 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
透明 该用户已被删除
7#
发表于 2015-3-12 16:35:25 | 只看该作者
碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
莫相离 该用户已被删除
8#
发表于 2015-3-12 16:35:26 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-20 00:06:42 | 只看该作者
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 18:12

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表