程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第十章-動態鏈接庫編程(二)(2)

第十章-動態鏈接庫編程(二)(2)

編輯:Delphi

10.4.1 利用DLLs實現窗體重用的一般步驟 

利用DLLs實現窗體重用的步驟是:

1.在集成開發環境(IDE)中,按自己的需要設計一個窗體;

2.編寫一個用於輸出的函數或過程。在該函數或過程中,設計的窗體被實例化;

3.重復步驟1、2,直到完成所有重用窗體的設計;

4.打開工程文件,進行修改,以適應生成 .dll文件的需要:

(1).把保留字program設為library;

(2).從uses子句中去掉Forms單元;

(3).移去begin,end之間的所有代碼;

(4).在uses子句下,begin…end塊之前,添加保留字exprots。exports 後是輸出函數名或過程名。

5.編譯生成DLLs文件;

6.在其它應用程序中調用重用窗體。

重用窗體的調用同一般DLLs函數或過程的調用完全一致,不再贅述。讀者可參看下面的例子。 

10.4.2 窗體重用實例 

下面我們通過一個具體的實例來說明窗體重用的設計過程。我們在一個名為passform.dll 的文件中儲存了一個口令設置窗口和一個口令檢查窗口。而後在一個Delphi 編寫的程序和一個VB編寫的程序中進行調用。事實證明這種方法是完全可行的。

10.4.2.1 窗體重用DLLs的設計 

窗體重用DLLs的設計依照(10.4.1)中介紹的步驟進行。DLLs中的兩個窗體 SetPassWordForm和GetPassWordForm分別用於設置和檢查口令。它們的設計界面如圖所示。

窗體類TSetPassWordForm定義了兩個數據成員Verified和PassWord,用於記錄口令確認狀態和設置的口令。TSetPassWordForm的定義如下:

type

TSetPassWordForm = class(TForm)

Label1: TLabel;

Edit1: TEdit;

OKBtn: TBitBtn;

CancelBtn: TBitBtn;

procedure FormCreate(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

Verified: Boolean;

public

{ Public declarations }

PassWord: PChar;

end;

窗口生成時,對數據成員和部件狀態進行初始化: 

procedure TSetPassWordForm.FormCreate(Sender: TObject);

begin

Verified := False;

PassWord := StrAlloc(40);

OKBtn.Enabled := False;

Label1.Caption := 'Please Input PassWord:';

end;

按鈕OKBtn在程序啟動時Enabled屬性設置為False,直到口令被正確設置後Enabled屬性才恢復為True。這樣就保證了只有口令被正確設置後,口令設置窗口才能正常關閉。否則只能按Cancel按鈕取消。

在口令設置代碼單元中定義了一個輸出函數SetPassWord,用於生成口令設置窗口並返回設置的口令: 

function SetPassWord(PWord: PChar): Boolean;

var

SetPassWordForm: TSetPassWordForm;

begin

Result := False;

SetPassWordForm := TSetPassWordForm.Create(Application);

try

with SetPasswordForm do

if ShowModal = mrOK then

begin

StrCopy(PWord,StrUpper(Password));

Result := True;

end;

finally

SetPasswordForm.Free;

end;

end;

口令成功設置,把PassWord的值拷貝給PWord輸出,並返回True。應該注意的是由於 PWord本身就是指針類型,指向一個字符串的地址,因而雖然PWord用於輸出,但在參數表中仍為傳值參數,而不是傳址參數。另外調用函數StrCopy,要求PWord在傳入前已分配內存,否則會導致一個一般保護錯。try...finally用於保護窗口所占用內存資源在任何情況下都能正常釋放,讀者可參看第十二章。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved