打印本文 打印本文 关闭窗口 关闭窗口
使用IntraWeb进行Web编程(二)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2346  更新时间:2009/4/23 18:35:17  文章录入:mintao  责任编辑:mintao

《Delphi从入门到精通》第21章  第二部分

创建IntraWeb应用程序

创建IntraWeb应用程序,有很多组件可用。不妨看一下Delphi组件板中的IW Standard页,会给您留下深刻的印象,从简单的按钮、复选框、单选框、编辑框、列表框到迷人的树形控件、菜单、计时器、表格和链接应有尽有。我不想举例描述每个组件的用法,只想通过几个例子,阐述IntraWeb的体系结构,当然顺便也会介绍用到的组件。

我创建了一个例程(叫IWTree),演示了IntraWeb的菜单和树形控件的用法,同时也说明了如何动态创建组件。IntraWeb菜单通过引入常规Delphi菜单内容来工作的,这很容易,只需简单地把AttachedMenu设置成Tmenu组件即可:

object MainMenu1: TMainMenu
  object Tree1: TMenuItem
    object ExpandAll1: TMenuItem
    object CollapseAll1: TMenuItem
    object N1: TMenuItem
    object EnlargeFont1: TMenuItem
    object ReduceFont1: TMenuItem
  end
  object About1: TMenuItem
    object Application1: TMenuItem
    object TreeContents1: TMenuItem
  end
end
object IWMenu1: TIWMenu
  AttachedMenu = MainMenu1
  Orientation = iwOHorizontal
end

菜单项运行时处理OnClick事件,是以链接形式实现的。看一下图21.3,这是展示菜单的例程的运行效果。例程中的另外一个组件是树形控件,在例子中预置了很多节点。该组件通过很多JavaScript代码来实现在浏览器中(不需要调用服务器代码)直接控制树形控件节点的展开和收叠。同时,菜单中还有控制树形控件节点展开和收叠以及控制字体大小的菜单项。下面列出其中两个事件代码:

procedure TformTree.ExpandAll1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to IWTreeView1.Items.Count - 1 do
    IWTreeView1.Items [i].Expanded := True;
end;
   
procedure TformTree.EnlargeFont1Click(Sender: TObject);
begin
  IWTreeView1.Font.Size := IWTreeView1.Font.Size + 2;
end;

图21.3 演示菜单、树形控件和动态创建组件的例程

感谢IntraWeb提供了如同标准Delphi VCL组件的特性,使代码易读,也容易理解。

 

例程中的菜单有两个子菜单稍微复杂一点。第一个是显示应用程序ID,也就是程序执行时的会话期ID。该标志可以通过全局对象WebApplication的AppID属性获得。第二个子菜单是Tree Contents,它可以把树形控件的一级节点标题和子节点数目清单列出。值得注意的是,这些信息显示在一个运行时才创建的组件memo里(见图21.3),这一点与在一个VCL应用程序里面做同样的事情非常相似。

procedure TformTree.TreeContents1Click(Sender: TObject);
var
  i: Integer;
begin
  with TIWMemo.Create(Self) do
  begin
    Parent := Self;
    Align := alBottom;
    for i := 0 to IWTreeView1.Items.Count - 1 do
      Lines.Add (IWTreeView1.Items [i].Caption + '''' ('''' +
        IntToStr (IWTreeView1.Items [i].SubItems.Count) + '''')'''');
  end;
end;
 
提示:请注意IntraWeb的alignment属性和VCL组件的alignment非常相似。比如程序菜单的alignment属性是alTop,而tree组件则是alClient,此外动态创建的memo的alignment属性被设为alBottom。作为替代方法,可以使用anchors(同样VCL中也有):可以创建一个bottom-right按钮,或者在页面中间的组件,只需把组件的四个anchors全设为true。请看下面关于该技术的例程。

Writing Multipage Applications

开发多页面应用程序

目前所讲的例程都只有一个页面,下面我们来创建IntraWeb程序的第二个页面。其实,就是这种情况,IntraWeb开发工具也与标准Delphi(或Kylix)十分相似,而与其他互联网开发工具十分不同。下面的例子可以通过IntraWeb向导自动产生源代码,接着研究我们关心的这些代码。

我们从头看,例程IWTwoForms的主窗体演示了IntraWeb表格特性。这是一个强大的组件,她产生的HTML表格既可放入文本又可放入其他组件。在本例中,程序开始运行时,填充表格的内容(在主窗体的OnCreate事件中处理):

procedure TformMain.IWAppFormCreate(Sender: TObject);
var
  i: Integer;
  link: TIWURL;
begin
  // set grid titles
  IWGrid1.Cell[0, 0].Text := ''''Row'''';
  IWGrid1.Cell[0, 1].Text := ''''Owner'''';
  IWGrid1.Cell[0, 2].Text := ''''Web Site'''';
  // set grid contents
  for i := 1 to IWGrid1.RowCount - 1 do
  begin
    IWGrid1.Cell [i,0].Text := ''''Row '''' + IntToStr (i+1);
    IWGrid1.Cell [i,1].Text := ''''IWTwoForms by Marco Cantù'''';
    link := TIWURL.Create(Self);
    link.Text := ''''Click here'''';
    link.URL := ''''http://www.marcocantu.com'''';
    IWGrid1.Cell [i,2].Control := link;
  end;
end;

上面这段代码的运行结果见图21.4,除了输出外,还有几件事值得注意。首先,表格使用了Delphi的anchors属性(全设为false)来使表格始终处在页面中间,即使用户改变了浏览器窗口大小。其次,我在第三列中加入了一个IWURL组件,当然也可以放其他组件(包括按钮和编辑框)。

图21.4 例程IWTwoForms使用的表格组件嵌入文本和IWURL组件

[1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口