關於Package :: 可以跨Package控制元件或變數嗎? |
|
s8954126
一般會員 發表:2 回覆:3 積分:1 註冊:2002-08-08 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
可以,關於PACKAGE的使用可以參考我發表的文章 http://delphi.ktop.com.tw/loadfile.php?TOPICID=6149211&CC=137529
@@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
s8954126
一般會員 發表:2 回覆:3 積分:1 註冊:2002-08-08 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: andersonhsieh,謝謝您的回答. 另外還有一個問題是, 假設我在package2的require中加入package1, 並且在unit2中uses unit1,這樣compile沒問題, 但是當我直接指定元件時, 例如:Form2.Edit1.Text := Form1.Edit1.Text; 就會出現runtime error了, 請問,這樣的用法是不允許的嗎??使用 Delphi Package 有一點要注意, 就是要寫成大概這樣: Form2.Edit1.Text := TForm1(Form1).Edit1.Text; 因為是用 Package 所以 Form1 應該還沒有產生實體, 您要先 Create 才能使用. 發表人 - danny 於 2002/08/12 10:51:12
------
將問題盡快結案也是一種禮貌! |
s8954126
一般會員 發表:2 回覆:3 積分:1 註冊:2002-08-08 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 嗯...不行耶!! 我是由Form1去建立Form2的, 所以Form1和Form2都已經建立了! 不過如您所說, Form2.Edit1.Text := TForm1(Form1).Edit1.Text; 還是會產生RunTime Error耶!!如果您現在是在 Form2, 要這樣寫: Self.Edit1.Text := TForm1(Form1).Edit1.Text; 或 Edit1.Text := TForm1(Form1).Edit1.Text; 如果您現在是在 Form1, 要這樣寫: TForm2(Form2).Edit1.Text := Self.Edit1.Text; 或 TForm2(Form2).Edit1.Text := Edit1.Text; 當然您要這樣寫也可以: TForm2(Form2).Edit1.Text := TForm1(Form1).Edit1.Text;
------
將問題盡快結案也是一種禮貌! |
s8954126
一般會員 發表:2 回覆:3 積分:1 註冊:2002-08-08 發送簡訊給我 |
因為Package有些設定,不曉得怎麼詳述,所以,先就程式碼做討論好了...
//----------------------------------------------
procedure TFB10Form.Button5Click(Sender: TObject);
begin
LoadAddinPackage('Package2','Package2.bpl');
ShowModalFormByClassName('TFB10PForm');
end;
//----------------------------------------------
這是一段在Package1中的FB10Form裡,觸發載入Package2的程式,
到這之前應該都沒有問題,我想...
在開啟FB10PForm之後,會有一段如下面的程式...
//----------------------------------------------
procedure TFB10PForm.Button1Click(Sender: TObject);
//var MyComponent : TComponent;
begin
// MyComponent := FB10ID.FindComponent('Edit2');
// if MyComponent is TEdit then
// Edit2.Text := TEdit(MyComponent).Text;
Edit2.Text := TFB10Form(FB10Form).Edit2.Text;
end;
//----------------------------------------------
這一段程式碼的目的是到FB10Form去抓Edit2的值,
要注意的是,FB10Form與FB10PForm是分別在兩各不同的Package!
另外,如果是使用註解起來的程式碼,雖然抓的到值,
但是呢...想想看,這是針對一個Package做FindComponent的動作,
當一個Package裡包含十幾二十個Form時,裡面的元件可能有上百個了吧,
這樣的效率...呃...我不敢想下去了...
FB10Form與FB10PForm確實有被建立起來呀,為什麼
RunTime到Edit2.Text := TFB10Form(FB10Form).Edit2.Text;就會出錯呢?
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
阿子
站務副站長 發表:120 回覆:230 積分:201 註冊:2002-03-18 發送簡訊給我 |
這是最原始的資料,而s8954126兄可能有所修改
function CreateFormByClassName(const ClassName: string): TCustomForm; var AClass: TPersistentClass; begin { Note that TApplication "owns" this form and thus it must be freed prior to unloading the package } AClass := GetClass(ClassName); if AClass <> nil then Result := TComponentClass(AClass).Create(Application) as TCustomForm else raise Exception.CreateFmt(sErrorCreateForm, [ClassName]); end; function ShowModalFormByClassName(const ClassName: string): integer; var frm: TCustomForm; begin frm := CreateFormByClassName(ClassName); try Result := frm.ShowModal; finally frm.Release; end; end;您看看巴... 從思考取勝一切~q
------
從思考取勝一切~q |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |