【動態Form】同一Procedure可否被二個外來的Form呼叫執行 |
尚未結案
|
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
各位前輩,很不好意思~又來麻煩大家了…< >
希望前輩們能不吝賜教,非常感恩~< > 是這樣的…我的問題跟下面這篇我之前詢問過的問題大同小異,
就是動態視窗,其處理程序由一個單一的unit來執行:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=38781 這一次,是又追加了一個Form3…
也就是我的元件有:Form1、Form2、Form3、unit1、unit2、unit3、unit4
而這個Form3的配置與Form2相同,有一個button,
其button內寫下這段:
procedure TForm3.Button1Click(Sender: TObject); begin x:=1; --->已在public宣告過 testForm.send(self); --->錯誤停在此「Incompatible types:TForm2,TForm3」 end;而在unit4中(也就是處理showmessage的副程式)寫: unit Unit4; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, unit2, unit3; type Tunit04 = class(TObject) private { Private declarations } public procedure send(Form2:TForm2; Form3:TForm3); { Public declarations } end; var testForm: Tunit04; implementation //uses unit2, unit3; procedure Tunit04.send(Form2:TForm2; Form3:TForm3) ; begin if Form2.x =1 then begin showmessage('test1'); Form2.x:=0; end; if Form3.x =1 then begin showmessage('test2'); Form3.x:=0; end; end; end.是否是說同一個procedure底下,無法接受二種不同的TForm型態? 還是說我的Self需修改為什麼參數呢? 這是我上傳我有問題的程式↓ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40042 不好意思…又得麻煩各位前輩了…><||||| |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
procedure send(Form2:TForm2; Form3:TForm3); // 第一個參數的型態是 TForm2, 第二個參數的型態是 TForm3
procedure TForm3.Button1Click(Sender: TObject); begin // ... testForm.send(self); // 這裏只傳入了一個參數, 且型態為 TForm3, 正確是要傳入兩個參數, 且第一個參數型態為 TForm2, 第二個參數型態為 TForm3 end;錯誤部份的 self 參數指的是 Form3, 其型態為 TForm3 而 send procedure 所要傳入的第一個參數型態為 TForm2 所以會有 TForm2 與 TForm3 型態不會的錯誤了. --- Everything I say is a lie. 發表人 - hagar 於 2003/11/04 22:13:24 |
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
引言: procedure send(Form2:TForm2; Form3:TForm3); // 第一個參數的型態是 TForm2, 第二個參數的型態是 TForm3感謝hagar前輩的指引,原來是忽略了這個問題… 又學到一次經驗了~非常感激~^_^ 我將程式修正為: 【 class="code"> x:=1; testForm.send(self,nil); 【unitl3底下】procedure TForm3.Button1Click(Sender: TObject); begin // ... testForm.send(self); // 這裏只傳入了一個參數, 且型態為 TForm3, 正確是要傳入兩個參數, 且第一個參數型態為 TForm2, 第二個參數型態為 TForm3 end;-- Everything I say is a lie. 發表人 - hagar 於 2003/11/04 22:13:24 x:=1; testForm.send(nil,Self) ;已可順利的傳值至unit4做showmessage的處理, 但,仍發生一個問題… 其bug畫面如下: 當我進入menu->Form3,按下button時, 便會跑出這麼一個訊息… 是否是表示因為我的Form2尚未create出來, 所以,程式無法判別出Form2這個物件? 如果是在Form2底下按下button,它會成功跑出「test1」來, 但,也會跟著跳出那個錯誤訊息… 可否再請教前輩,這該如何解決或許修正呢? 不好意思~又麻煩前輩了~m(_ _)m |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
引言: testForm.send(self,nil); 此時您第一個參數傳入 nil, 所以在 if Form2.x = 1 這一行 就會發生 Access Violation 了 您可以先檢查 Form2 是否為 nil, 如:實在是太感謝hagar前輩的指導了… :::^0^::: 我的問題總算是解決了~非常謝謝您這麼有效率的回答~ 動態Form傳值終於大致上瞭解其原理了, 會再繼續深入的鑽研的~十分感激 【修正unit4】if Form2 <> nil then if Form2.x = 1 then ...--- Everything I say is a lie. procedure Tunit04.send(Form2:TForm2 ;Form3:TForm3) ; begin if Form2 <> nil then begin if Form2.x =1 then begin showmessage('test1'); Form2.x:=0; exit; end; end; if Form3 <> nil then begin if Form3.x =1 then begin showmessage('test2'); Form3.x:=0; end; end; end;【unitl2的button底下】 x:=1; testForm.send(self,nil);【unitl3的button底下】 x:=1; testForm.send(nil,Self) ;已可完全正常的相互處理其程序, 供有相同疑問的人做參考。 再次謝謝hagar前輩~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |