物件的問題... |
尚未結案
|
arvin
一般會員 發表:12 回覆:9 積分:4 註冊:2002-09-11 發送簡訊給我 |
|
StrongLemon
高階會員 發表:10 回覆:166 積分:105 註冊:2004-04-18 發送簡訊給我 |
|
bruce
中階會員 發表:19 回覆:121 積分:83 註冊:2002-04-16 發送簡訊給我 |
|
Skyer
高階會員 發表:43 回覆:111 積分:120 註冊:2002-04-04 發送簡訊給我 |
Delphi 沒有你所謂的靜態物件
物件全都得以你所謂的 "動態" 來產生.. 在 Delphi 中,物件全都是在 Runtime 時在 Heap Create 出來的..
據說是(引自Inside VCL Page2-49) Anders 原本想預留把 Garbage Collection 加進去的想法,所以才設計 Object 都得動態產生 在 Delphi 宣告一個變數是某 class
var obja: TMyObject這個 obja, 實際上只是個 Pointer, 就像 C 的 TMyObject *obja 一樣 所以說,在 Delphi, 物件全都得動態產生, 如直接使用,則會 Access Violation. obja := TMyObject.Create這動作就是配置 obja 所需記憶體, 初始化 obja, 指定 obja 執行框架. -- Regards, Skyer
------
-- Regards, Skyer |
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
arvin 你好:
靜態物件是指在編譯時就存在code的元件
動態物件是指在程式執行時由程式產生的元件 靜態物件:EX
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Bevel1: TBevel;
....
...
..
在程式開頭的地方就宣告了.. 動態物件:EX 這樣就可以按一下SpeedButton1 就在Form1上制造一個ScrollBox
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i,j:integer;
LB1,LB2:tlabel;
TE1:tedit;
SS1:TScrollBox;
//以上是宣告物件繼承的項目及名稱
begin
//將Form1上繼承的TScrollBox物件釋放
FOR I:=0 TO Form1.ControlCount-1 DO
IF Form1.Controls[I] IS TScrollBox THEN
TScrollBox(Form1.Controls[I]).Free;
//創造一個新物件
SS1:=TScrollBox.Create(SELF);
SS1.Parent:=Form1;
SS1.Width:= 260;SS1.Height:=369;
SS1.Ctl3D:=FALSE;
SS1.Top:=112;SS1.Left:=8;
end;
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |