12月初在上海發表Delphi 2006時David I.展示了一個使用Delphi 2006開發Windows Mobile的範例,當時就有參加的朋友向我索取這個範例,但是經我向David要這個範例,David並沒有給我。恰巧前幾日我翻譯了David Clegg先生有關使用Delphi 2005開發.NET Compact Framework應用程式的文章,由於那篇文章中是討論如何使用Delphi 2005開發,而Delphi 2206開發.NET Compact Framework應用程式簡單多了,因此我心中想乾脆寫一篇如何使用Delphi 2006的文章好了,以便讓有興趣的朋友能夠開始使用Delphi 2006來嘗試.NET Compact Framework應用程式的開發。
Delphi 2006的編譯器已經包含了Delphi .NET Compact的預覽版編譯器,因此Delphi 2006的開發人員可以直接使用即可編譯。使用Delphi 2006編譯器開發.NET Compact架框應用程式的流程是:
1. 在Delphi 2006中建立一個Windows forms應用程式專案
2. 到命令列視窗中使用編譯器指令把Windows forms應用程式專案編譯成.NET Compact架框應用程式
3. 由於Windows forms應用程式中有一些類別,特性和方法沒有實作在.NET Compact架框中,因此第2個步驟會產生編譯錯誤,開發人員可以回到Delphi IDE中使用注釋的方式移除.NET Compact架框不支援的類別,特性和方法
4. 再次使用Delphi 2006編譯修改過的專案即可成功產生.NET Compact架框的應用程式
5. 啟動Window CE模擬器執行步驟4產生的應用程式,如果有問題再回頭修改程式碼
6. 部署到真正的Win CE/Pocket PC或是SmartPhone執行您的.NET Compact架框的應用程式
在下面的內容中我們詳細的說明。
步驟 1 設定開發環境
在開始開發.NET Compact架框應用程式之前,您可能需要先設定好基本的開發環境,下載並且安裝開發.NET Compact架框需要的模擬器以及您的移動設備需要的.NET Compact架框執行環境。
首先您可以在下面的URL下載到WinCE 5.0的模擬器,您最好下載中文化的版本並且安裝到您的電腦之中。
http://www.microsoft.com/downloads/details.aspx?FamilyID=EEC33AE3-C129-4C25-ABAA-18E8E842178F&displaylang=en&Hash=LKRJXV6
接著您可以在下面的URL下載到您使用的Windows Mobile設備需要的.NET Compact Framework 1.0 SP3 Redistributable安裝程式:
http://www.microsoft.com/downloads/details.aspx?familyid=a5a02311-194b-4c00-b445-f92bec03032f&displaylang=en
下載並且執行上面的.NET Compact Framework 1.0 SP3 Redistributable安裝程式,它就可以藉由ActiveSync把.NET Compact架框安裝到您的WinCE/Pocket PC/SmartPhone上,如此一來就可以執行.NET Compact架框的應用程式了。
步驟 2 建立Delphi.NET Windows Forms應用程式專案
由於目前Delphi 2006還沒有提供視覺化設計.NET Compact架框應用程式的功能,因此我們目前只能使用Windows Forms專案提供的視覺化設計能力,之後再使用Delphi編譯器轉換為.NET Compact架框應用程式。
因此請在Delphi 2006 IDE中先建立一個Windows Forms應用程式專案:
接著使用視覺化表單設計家設計.NET Compact架框應用程式的圖形使用者介面,例如在這個範例中我在表單中使用了一個TextEdit,一個Button以及一個Label控制項:
接著我在Button控制項的Click事件處理函式中撰寫如下的程式碼:
procedure wfmMain.btnClickMe_Click(sender: System.Object; e: System.EventArgs);
begin
Self.tbMsg.Text := '這是由Delphi 2006開發的!';
end;
並且在表單的Activate事件處理函式中撰寫如下的程式碼:
procedure wfmMain.TWinForm13_Activated(sender: System.Object; e: System.EventArgs);
begin
Self.lblVersion.Text := Environment.Version.ToString;
end;
TWinForm13_Activated事件處理函式會在Label控制項中顯示使用的.NET架框的版本資訊。
好了,這只是是很簡單的.NET應用程式,接下來要討論的是如何把這個Windows Forms應用程式編譯成.NET Compact架框的應用程式。Delphi 2006的編譯器加入了一個新的編譯器指令:CF,這個編譯器指令可以把Delphi的專案編譯成.NET Compact架框的專案。
要編譯成.NET Compact架框的應用程式,我們需要使用Delphi 2006提供給.NET Compact架框的開發assemblies以及.NET Compact架框本身的assemblies。Delphi 2006在它的lib/cf目錄下提供了Borland給.NET Compact架框的assemblies,而.NET Compact架框本身的assemblies則可以在VS.NET 2003的Windows CE目錄下找到,當然您也可以去MS網站下載.NET Compact架框的開發人員版本,例如下圖是筆者機器中VS.NET 2003的Windows CE目錄,它位於筆者的D:/Program Files/Microsoft Visual Studio .NET 2003/CompactFrameworkSDK/v1.0.5000/Windows CE之中。
有了上面的知識之後,我們就可以撰寫一個編譯的批次檔案如下:
dccil -DCF PDCFDemo1.dpr -U"D:/Program Files/Borland/BDS/4.0/lib/cf" -lu"D:/Program Files/Microsoft Visual Studio .NET 2003/CompactFrameworkSDK/v1.0.5000/Windows CE/System.dll";"D:/Program Files/Microsoft Visual Studio .NET 2003/CompactFrameworkSDK/v1.0.5000/Windows CE/System.Windows.Forms.dll"
讓我們把這個批次檔案儲存在範例專案的目錄中並且命名它為DCF.BAT。
現在讓我們開啟一個命令列視窗,並且切換到我們前面的範例專案目錄之下,準備使用DCF.BAT來編譯範例專案。
步驟 3 使用Delphi 2006的編譯器編譯Windows Forms應用程式為.NET Compact架框應用程式
如下所示,在範例專案目錄中執行DCF.BAT編譯我們的範例專案PDCFDemo1.dpr:
從上圖可以看到編譯器出現了許多的錯誤並且指出了在範例應用程式中那些行數產生了錯誤,我們可以看到這些錯誤大都是Name/TabIndex特性值的錯誤,這是因為.NET Compact架框沒有實作這兩個特性。至於SuspendLayout,AutoScaleBaseSize以及ResumeLayout方法則是沒有實作在.NET Compact架框中。因此我們只需要回到範例專案的主表單程式碼中把這些行的程式碼改成注釋即可。
首先讓我們開啟範例專案的主程式,把其中的
[STAThread]
這一行改成注釋,如下圖所示:
接著再回到範例主表單把命令列編譯器注明錯誤的行數程式碼改成注釋之後,再回到命令列視窗,再次執行DCF.BAT,我們就可以看到如下圖所示現在已經編譯成功了:
步驟 4 使用WinCE 5.0模擬器測試範例應用程式
如果您安裝好了WinCE 5.0的模擬器,那麼現在請它,如下圖所示:
現在我們需要把剛才範例專案的目錄模擬成儲存卡以便讓WinCE 5.0的模擬器可以找到我們的範例應用程式並且執行它。要如此做,請點選WinCE 5.0模擬器的Emulator|Folder Sharing…功能表,如下所示:
接著在下面的對話盒中選擇範例專案的目錄,在筆者的機器是C:/DCFDemos/Demo1,如下所示:
接著執行WinCE 5.0模擬器的Windows Explorer,如下所示:
在Windows Explorer中瀏覽到儲存卡,如下所示:
開啟了儲存卡目錄之後就可以看到剛才範例專案所有的內容,包含了我們的範例.NET Compact架框的應用程式:
現在點選它就可以在WinCE 5.0模擬器中看到由Delphi 2006開發的範例.NET Compact架框的應用程式的確可以成功的執行了:
由於筆者安裝的WinCE 5.0的模擬器是英文版,因此無法看到正確的中文。
步驟 5 拷貝Delphi.NET Compact架框應用程式到PocketPC執行
但是當筆者把Delphi 2006開發的範例.NET Compact架框的應用程式拷貝到筆者在2002年購買的Compaq iPAQ中執行時,一切都正常,中文也沒有問題,當筆者第一次在筆者的Compaq iPAQ中看到這個由Delphi 2006開發的範例.NET Compact架框應用程式執行時,心中真是高興,筆者心中知道又有很多好玩的東西可以寫了。
最後由於筆者的拍攝技術很爛,不知道如何拍攝範例.NET Compact架框應用程式在Compaq iPAQ中執行的畫面,因此無法把最後執行的畫面顯示出來,在此向各位抱歉(拍攝的很不清楚)。