新建 StandAlone Application 工程后, 再通過 File > New > Other.. > IntraWeb > New Form 添加兩個窗體.
然后 TIWForm1 上放兩個 TIWButton, 在 TIWForm2 和 TIWForm3 上各放一個 TIWButton. 測試代碼用到三個窗體的 OnCreate 和每個按鈕的 OnClick 事件.
Unit1 中的代碼:
uses ServerController, Unit2, Unit3; procedure TIWForm1.IWAppFormCreate(Sender: TObject); begin IWServerController.HistoryEnabled := True; //使瀏覽器后退、前進按鈕有效 IWButton1.Caption := 'IWForm2'; IWButton2.Caption := 'IWForm3'; end; procedure TIWForm1.IWButton1Click(Sender: TObject); begin TIWForm2.Create(WebApplication).Show; //建立並顯示 TIWForm2; 執行后 WebApplication.ActiveForm 就從 TIWForm1 變為 TIWForm2 end; procedure TIWForm1.IWButton2Click(Sender: TObject); begin TIWForm3.Create(WebApplication).Show; // end; initialization TIWForm1.SetAsMainForm; //這是 TIWAppForm 的 Class 方法; 其作用是建立並設置當前窗口為主窗口(其實在 IW 中只有 ActiveForm, 無所謂 MainForm ) //當然也同樣設置其他窗體是首先被激活的窗體
Unit2 中的代碼:
procedure TIWForm2.IWAppFormCreate(Sender: TObject); begin IWButton1.Caption := Name; //只是用不同的標題區別一下 end; procedure TIWForm2.IWButton1Click(Sender: TObject); begin Release; //釋放后, TIWForm1 就出來了, 達到了返回的目的 //為什么 IW 提倡使用 Release 而不是通常的 Free 呢? //我經過測試發現, Release 和 Free 是有區別的; 官方資料中介紹: IWApp;ication 內部還維護着一個 FReleasedForms 列表. end;
Unit3 中的代碼:
procedure TIWForm3.IWAppFormCreate(Sender: TObject); begin IWButton1.Caption := Name; end; procedure TIWForm3.IWButton1Click(Sender: TObject); begin Release; end;
還有一個問題, 在這里我們並沒有引用 IWInit, 代碼中的 WebApplication 是哪來的呢? 原來 TIWBaseForm(TIWAppForm < TIWForm < TIWBaseHTMLForm < TIWBaseForm)也提供了 WebApplication.
經測試, 兩個 WebApplication 都指向了同一個 TIWApplication 對象, 挺方便的.
感覺 IW 比傳統的 VCL 更巧妙些.