initialization底下動態產生form的事件? |
答題得分者是:Coffee
|
kin031021
一般會員 ![]() ![]() 發表:5 回覆:4 積分:1 註冊:2007-09-01 發送簡訊給我 |
[code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1: TForm1; RForm : TForm; implementation {$R *.dfm} initialization RForm := TForm.Create(nil); RForm.Width := 300; RForm.Height := 300; RForm.Left := Screen.Width div 2 - RForm.Width div 2; RForm.Top := Screen.Height div 2 - RForm.Height div 2; RForm.OnCreate := end. [/code] 請問各位前輩 如何使用RForm的OnCreate事件?? |
danny
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
應該是如下新增的程式寫法, 但我沒測試 ...
不過我記得原廠手冊中有寫到 initialization 的部份必須與視覺元件無關才可以, 因為不知道你的 RForm 的用法, 你要自己測試. ===================引 用 kin031021 文 章=================== [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; procedure NewFormCreate(Sender: TObject); var Form1: TForm1; RForm : TForm; implementation {$R *.dfm} procedure NewFormCreate(Sender: TObject); begin // end; initialization RForm := TForm.Create(nil); RForm.Width := 300; RForm.Height := 300; RForm.Left := Screen.Width div 2 - RForm.Width div 2; RForm.Top := Screen.Height div 2 - RForm.Height div 2; RForm.OnCreate := NewFormCreate; end. [/code] 請問各位前輩 如何使用RForm的OnCreate事件??
------
將問題盡快結案也是一種禮貌!
編輯記錄
danny 重新編輯於 2008-11-25 10:04:58, 註解 無‧
|
kin031021
一般會員 ![]() ![]() 發表:5 回覆:4 積分:1 註冊:2007-09-01 發送簡訊給我 |
|
Coffee
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
請看OnCreate的prototype,它會是一個TNotifyEvent,請參考TNotifyEvent的help。
再者,這個訊息告訴你,OnCreate可接受的參數是一個Method Pointer,而你嘗試傳入的是regular procedure。 這兩者的差異在於,method通常被用來指稱class的member method,而Delphi中將那些一般的程序稱為regular procedure,有傳回的函數稱為function。 所以如果你需要嫁接一個none class member 的procedure到class event呼叫的method,其實可以先宣告一個class method prototype,利用of object來達成, 然後將這個函式轉成class method之後就可以使用。 但是在這裡有個問題,OnCreate event會在你使用constructor Create之後就觸發,所以你這樣的嫁接是沒有意義的。 如果你真的有任何事非得在OnCreate作,我會建議為該class多新增一個constructor來達到你的目的。 而且你也可以在constructor裡面將OnCreate event指向你想要的實作(雖然我不是很贊同這樣的作法)。 ===================引 用 kin031021 文 章=================== 這個方法我之前有試過 出現以下錯誤訊息 Incompatible types: 'method pointer and regular procedure' ===================引 用 danny 文 章=================== 應該是如下新增的程式寫法, 但我沒測試 ... 不過我記得原廠手冊中有寫到 initialization 的部份必須與視覺元件無關才可以, 因為不知道你的 RForm 的用法, 你要自己測試.
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
aftcast
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
我也來插個花~~
Menthod Pointer 是內含二個位址,其一是self,另一個是procedure的位址。這與一般的function只有一個位址是不同的。 如coffee說的,使用動態的指定oncreate事件是沒啥用的,因為都已經create了。所以,應該要在class裡去再定義(override)那個事件…
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |