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

为什么要RegisterClass?

 
like
一般會員


發表:30
回覆:35
積分:18
註冊:2005-03-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-27 08:31:33 IP:61.242.xxx.xxx 未訂閱

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var s:Tmemorystream;
rr:Twriter;
ff:TFrame2;
begin
ff:=TFrame2.Create (self);
ff.Parent :=Panel1;
s:=Tmemorystream.Create ;
s.WriteComponent(ff);
s.SaveToFile('a');
s.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s:Tmemorystream;
ff:TFrame2;
begin
classes.RegisterClass(TButton);
s:=Tmemorystream.Create ;
s.LoadFromFile('a');
ff := TFrame2(TFrame.Create(Self));
ff.Parent :=self;
s.ReadComponent(ff) ;
s.Free;
end;

为什么要RegisterClass(TFrame2)?我在interface引用了Unit2呀,上述代码执行后,
报错,提示'Class TLabel not found',这是为何?也要RegisterClass(TLabel)吗?为什么呢?
为什么也还要RegisterClass(TButton)呢?在TForm的Publisher部分有TLabel呀
不明白,还请各位大大指点,谢谢!

danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-27 16:25:46 IP:211.76.xxx.xxx 未訂閱

請在 TForm2 的最後面加上以下程式碼.

initialization
RegisterClass(TForm2);

finalization
UnregisterClass(TForm2);

刪除那二行 classes.RegisterClass 應該就可以了(你要試看看, 我沒測試過).

procedure TForm1.Button2Click(Sender: TObject);
var
s:Tmemorystream;
ff:TFrame2;
begin
s:=Tmemorystream.Create ;
s.LoadFromFile('a');
ff := TFrame2(TFrame.Create(Self));
ff.Parent :=self;
s.ReadComponent(ff) ;
s.Free;
end;


===================引 用 文 章===================

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var s:Tmemorystream;
rr:Twriter;
ff:TFrame2;
begin
ff:=TFrame2.Create (self);
ff.Parent :=Panel1;
s:=Tmemorystream.Create ;
s.WriteComponent(ff);
s.SaveToFile('a');
s.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s:Tmemorystream;
ff:TFrame2;
begin
classes.RegisterClass(TButton);
s:=Tmemorystream.Create ;
s.LoadFromFile('a');
ff := TFrame2(TFrame.Create(Self));
ff.Parent :=self;
s.ReadComponent(ff) ;
s.Free;
end;

为什么要RegisterClass(TFrame2)?我在interface引用了Unit2呀,上述代码执行后,
报错,提示'Class TLabel not found',这是为何?也要RegisterClass(TLabel)吗?为什么呢?
为什么也还要RegisterClass(TButton)呢?在TForm的Publisher部分有TLabel呀
不明白,还请各位大大指点,谢谢!

------
將問題盡快結案也是一種禮貌!
like
一般會員


發表:30
回覆:35
積分:18
註冊:2005-03-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-28 08:41:56 IP:61.242.xxx.xxx 未訂閱

大大,十分感谢您的回答。

如果代码按您的写法或我的写法,但我不明白为什么要RegisterClass(TFrame2)或RegisterClass(TButton),为什么要对其进行注册呢?而其他的如下:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;

这里引用了stdctrls单元,就可以直接定义button1了,而不要RegisterClass(TButton)?

不知您和各位大大们是否能抽空再指点一下,谢谢!


===================引 用 文 章===================

請在 TForm2 的最後面加上以下程式碼.

initialization
RegisterClass(TForm2);

finalization
UnregisterClass(TForm2);

刪除那二行 classes.RegisterClass 應該就可以了(你要試看看, 我沒測試過).

procedure TForm1.Button2Click(Sender: TObject);
var
s:Tmemorystream;
ff:TFrame2;
begin
s:=Tmemorystream.Create ;
s.LoadFromFile('a');
ff := TFrame2(TFrame.Create(Self));
ff.Parent :=self;
s.ReadComponent(ff) ;
s.Free;
end;

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