[译.原创]Delphi.net 初级开发指南(4)

l第四章

伟大而激动的一步:构建你的"Hello World"

 

导读:让我们看看怎么用Delphi.Net来构建一个简单的web应用程序。


翻译:黄浩,HelsWang@126.com , 转摘请保留完整信息。
原文:http://delphi.about.com/library/weekly/aa042704a.htm

访问本教程所有文章:http://www.cnblogs.com/hels

今天,我们将迈出最重要的一步!为了搞清楚BDSWebExample的工作流程,你首先要学着怎么用Delphi.net构建一个最简单的.net程序。

首先一个小小“理论” - 当你在你的浏览器中请求一个“xxx.aspx”时将会发生什么?

ASP.NET 体系结构

Delphi.Net(或者其他的.Net兼容语言)构建的Asp.net程序是放在IIS的内部运行的,IIS接受来自客户端浏览器的请求(就是你的浏览器上请求的“xxx.aspx”文件)再把请求转发到web应用程序。Asp.Net运行期引擎会适当的把这些请求委派给相应的事件处理类(就是说IIS会分别处理各种请求)。大多数情况下,当web浏览器发出一个.aspx页面的请求时,IIS会重定向(redirects)这些请求给aspnet_wp.dll ISAPI程序,aspnet_wp.dll又把这些请求转交给aspnet_wp.exe处理器(以下简称处理器),处理器首先会检查该请求是否有缓存信息,如果没有,则处理器会实时编译代码页面(含有任何内置代码的文件)。然后接下来发生的事情可以这样称呼“ASP.NET的页面生命周期”("The ASP.NET Page Life Cycle") - 这个我们以后会运用到的。

现在我们将要构建一个最简单的.net程序了,顺着这些步骤我们还会探究Web form这部分内容。

你的第一个.Net web应用程序

要用Delphi 8构建一个.Net应用程序,首先启动delphi,然后点击菜单“File-New”,然后选择"Asp.Net Web Application"


(图 4_1)

"New ASP.Net Application"对话框出现了,它允许你指定你的程序的名字,默认的,Delphi把asp.net 应用程序的名字设为"WebApplicationX"。当你点击OK,为了能让你的asp.net 应用程序正常运行,一个新的web(虚拟)目录在IIS下面自动被创建了。我建议你总是给你的程序赋予有意义的名字,比如:DelphiASPNETTest。


(图 4_2)

当你点击OK,一个新的包含数个“标准”的文件的asp.net 应用程序就被创建了。这些文件有:"web.config"、"global.asax"和"WebForm1.aspx";所有这些文件都有同样的代码骨架【译注:作者应该是说,新生成的项目都有同样的文件,各个文件分别有同样的代码】。WebForm1.aspx就是你的Web Form的名字。目前,你要把注意力放到"WebForm1"上去。

WebForms 是构建Asp.Net web应用程序的支撑基石,就好像Tform对象是你的Delphi Win32应用程序里是心脏和灵魂一样!WebForms就是用来在你的web应用程序里摆放用户界面元素的东西。类似于Tform对象提供属性、事件一样,web控件的属性、方法和事件也是放置到WebForms上的。

当你创建一个新的web form时,Delphi 8 IDE会创建两个文件:可视化的部分(就是aspx文件)和内置代码的pas文件。Aspx文件描述了窗体在你的浏览器中会呈现出什么样子的界面,内置代码的pas文件通常用来处理web form和web控件的事件和属性(也就是界面逻辑)。用两个文件编译一个页面这种方法允许你完全分离逻辑和界面。

?

要快速开始了
现在你在Delphi 8 IDE中所能看到的,是名为“WebForm1”的Web Form的设计视图,在IDE的底部,你可以看到三个页面:"WebForm1.aspx",、"WebForm1.pas" 和 "Design",Design页面应该是激活的。


(图 4_3)

现在我们就放几个web控件到WebForm1上。定位到"Tool Palette",然后找到"Web Controls"组,拖下来一个TextBox(想象一下win32的"TEdit"),一个Button("TButton")和一个Label ("TLabel")放到form上。增加一个控件到form最简单的方法就是双击它。目前不要受web控件名字的困惑,以后的章节里我们还会继续讨论web控件的。


(图 4_4)

现在双击Button控件,也许你期望马上就要写处理Button OnClick事件的处理代码了。没错,双击它吧!

首先你注意到"Design"页面不在激活了,取而代之的是"WebForm1.pas" - 因此看起来我们是在编辑一个普通的Delphi单元…确实,我们就是!

procedure TWebForm1.Button1_Click(sender: System.Object;e: System.EventArgs
begin
 Label1.Text := 'Hello:' + TextBox1.Text;

end;

现在,增加一行代码就像上面的红色部分。如果你以前用过delphi那应该是多么熟悉的代码啊!OK,我们设定Button控件的名字为Button1,"Sender"就是它,事件是单击,额外的,在过程的头声明里有一个"e: System.EventArgs"的参数,但是有谁在意它呢。
点击"F9"让我们看看会发生什么事,嗯,我知道这是个web应用程序而不是标准的带有forms 的Delphi Win32应用程序,但我还是要点击F9看看到底会发生什么事…

Run .. F9
F9 .. 然后一个新的IE实例会被创建成下面的样子:


(图 4_5)

(现在请在编辑框中输入你的名字然后点击按钮…结果是Label1显示"Hello: Zarko"!很简单!不是吗?很不幸的它真的不是:但是,现在只是构建了一个很简单的没什么繁重任务的例子,而不是构建更加复杂的应用程序,所以不应该出现什么大问题:) 。

?

发生了什么事?
WebForm1.pas是TWebForm1的代码定义文件,是一个从System.Web.UI.Page继承下来的类,所有的web forms都是从System.Web.UI.Page继承下来的。当你点击F9,Delphi把你的TWebForm1类编译到一个DLL文件里(当然还有程序里其他的文件一起编译)。当你在浏览器请求这个页面(webform1.aspx)时,ASP.NET 就会根据编译后的DLL里面的代码从aspx页面载入排版信息(也就是用户界面)。这种[界面-逻辑]的分离可以提供很大的弹性-你可以更新HTML的外表界面而不用重新编译项目。

当你点击了Button按钮,web form会提交到后台服务,然后后台服务根据你在TextBox中输入的数据重写页面,再然后返回一个**的页面给浏览器。最后,浏览器再把这个页面解释成一个纯粹的HTML页面。

Web Form

到目前为止,我们已经见过了design视图和Web form的代码视图,第三个视图叫"WebForm1.aspx" - 激活它!

<%@ Page language="c#" 
????Debug="true" 
????Codebehind="WebForm1.pas" 
????AutoEventWireup="false" 
????Inherits="WebForm1.TWebForm1" %>
<%@ Page language="c#" 
????Debug="true" 
????Codebehind="WebForm1.pas" 
????AutoEventWireup="false" 
????Inherits="WebForm1.TWebForm1" %>
<%@ Page language="c#" 
    Debug="true" 
    Codebehind="WebForm1.pas" 
    AutoEventWireup="false" 
    Inherits="WebForm1.TWebForm1" %>
<%@ Page language="c#" 
    Debug="true" 
    Codebehind="WebForm1.pas" 
    AutoEventWireup="false" 
    Inherits="WebForm1.TWebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta name="GENERATOR" 
          content="Borland Package Library 7.1">
  </head>
  <body ms_positioning="GridLayout">
  <form runat="server">
    <asp:textbox id=TextBox1 runat="server">
    </asp:textbox>
    <asp:button id=Button1 runat="server" text="Button">
    </asp:button>
    <asp:label id=Label1 runat="server">Label</asp:label>
  </form>
</body>
</html>
 
 

一个Asp.Net 的web form页面是一个“简单”的后缀名为aspx的文本文件。一个web form页面文件看起来就像一个正规的带有“Runat='Server'”扩展标记的HTML Form。这个标记标明它是一个服务端的form - 在服务端处理。

让我们看看它是由什么来构成的:
目前来说,web form里最有趣的事情是在第一行。在@ Page指示符里,Delphi自动指定InheritsCodeBehind属性。Asp.Net提供许多@指示符- 可以给你的代码指定附加的信息,用于编译时和运行时进行特别处理。暂时,你只需要注意到"CodeBehind"属性的值是"WebForm1.pas" - web form里所有事件的处理代码的单元名称。" Inherits "属性的值是" WebForm1.TWebForm1" - 在WebForm1.pas里定义的类,继承于System.Web.UI.Page(类似于TForm1 = class(TForm),只是我们的form叫WebForm1并且继承于.Net的类System.Web.UI.Page)。

注意:不要因为看见'Language=C#'这个属性而受到困惑,目前,Delphi 8不支持在aspx页面里用Delphi语言来做指示符,只允许在页面里内置Delphi语言。
 

<form> </form>标记中可以找到我们刚才拖下来的3个web控件,例如:

<asp:button id=Button1 runat="server" text="Button"> </asp:button>

这段代码描述了Button控件,ID(也就name)属性设为"Button1",Text(也就Caption)属性设为" Button ",而且它也有了标准的“runat="server"”属性。

 

回到Design视图:

在我们完成这一章节之前,激活Design视图。定位到Object Inspector(应该是停靠在左边的编辑框),这是个“同样”的Object Inspecotr,如果你以前用过任何版本的Delphi的话。用它来设置Web Form上的任何控件的属性(还有事件句柄)包括Web Form它自己。

一般来说,永远不要把你的forms命名为TWebForm1,这个说话的依据是你在用Delphi Win32时永远不要把forms命名为TForm1。现在,利用Object Inspector来把form命名为ThelloWorld。注意:这还是不够的,你也应该把WebForm1.aspx保存为不同的名字,我建议为HelloWorld.aspx;.pas单元文件也要更改名字。

最后,在Object Inspector中选择Button1控件然后激活Events页面,注意这个控件事件的名字:所有的事件名称没有了“On”前缀,在.Net的世界里所有的事件名称叫"Click"而不是"OnClick"或者叫"TextChanged"而不是"OnTextChanged"

?

下章预告:

让我们先停顿一下。如果你来自Win32的世界,这些东西看起来可能比较复杂而又不失可爱。控件的名字被改变了,你可能又会把HTML搞混了,还有一大串的新类需要学习…但请不要惊惶失措,我们将一步一步来…正好说明用Delphi来开发Asp.Net,“你需要了解什么”!

在下一章开始前,你最好从WebControls面板上拉一些控件下来(就挑那些你在Win32里“认识”的吧,比如:CheckBox, Panel, Image等),设置一些属性和事件代码等,运行熟悉一下。

待续。

posted on 2004-06-25 00:44  浩少  阅读(831)  评论(0编辑  收藏  举报

导航