全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2489
推到 Plurk!
推到 Facebook!

initialization底下動態產生form的事件?

答題得分者是:Coffee
kin031021
一般會員


發表:5
回覆:4
積分:1
註冊:2007-09-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-22 20:29:15 IP:125.230.xxx.xxx 訂閱

[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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-25 10:02:52 IP:122.254.xxx.xxx 訂閱
應該是如下新增的程式寫法, 但我沒測試 ...
不過我記得原廠手冊中有寫到 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-26 12:24:43 IP:140.128.xxx.xxx 訂閱
這個方法我之前有試過  出現以下錯誤訊息
Incompatible types: 'method pointer and regular procedure'

===================引 用 danny 文 章===================
應該是如下新增的程式寫法, 但我沒測試 ...
不過我記得原廠手冊中有寫到 initialization 的部份必須與視覺元件無關才可以, 因為不知道你的 RForm 的用法, 你要自己測試.


Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-26 13:11:09 IP:59.124.xxx.xxx 訂閱
請看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
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-26 14:36:15 IP:122.120.xxx.xxx 訂閱
我也來插個花~~

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
系統時間:2017-12-12 2:44:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!