form create form 再 create form 正確寫法? |
尚未結案
|
yeedonho
一般會員 發表:3 回覆:2 積分:1 註冊:2003-12-06 發送簡訊給我 |
我寫了很多單獨project 裡面有2至3個form,unit 列如un001,un002,un003
後來寫一主程式,要把之前寫的很多獨立程式合併起來
我有add to project,也有use un001,un002
本來都正常,後來發現速度太慢,於是至options將mainfrom 啟動,其餘不啟動
問題發生在mainform create form1 ,form1裡面create form2
form2 寫form1.....當機
form2.close當機 我發現是回到form1時,不知執行到哪裡當機
|
pental
初階會員 發表:3 回覆:48 積分:30 註冊:2003-09-21 發送簡訊給我 |
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
yeedonho 您好:
希望以下的 code 對您有幫助 :
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, Unit3 in 'Unit3.pas' {Form3}, Unit4 in 'Unit4.pas' {Form4}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); // Application.CreateForm(TForm2, Form2); // Application.CreateForm(TForm3, Form3); // Application.CreateForm(TForm4, Form4); Application.Run; end. // MainForm unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Unit2; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } FForm2 : TForm2; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses Unit3,Unit4; procedure TForm1.Button1Click(Sender: TObject); var Form2 : TForm2; begin try Form2 := TForm2.Create(nil); Form2.ShowModal; finally FreeAndNil(Form2); end; end; procedure TForm1.Button2Click(Sender: TObject); var Form3 : TForm3; begin try Form3 := TForm3.Create(nil); Form3.ShowModal; finally FreeAndNil(Form3); end; end; procedure TForm1.Button3Click(Sender: TObject); var Form4 : TForm4; begin try Form4 := TForm4.Create(nil); Form4.ShowModal; finally FreeAndNil(Form4); end; end; procedure TForm1.Button4Click(Sender: TObject); begin if not Assigned (FForm2) then FForm2 := TForm2.Create(self); FForm2.Show; FForm2.SetFocus; end; procedure TForm1.FormCreate(Sender: TObject); begin FForm2 := nil; end; end. // 動態要產生的 Form , Unit3 => TForm3 , Unit4 = TForm4 // 改變數字而已,不贅貼 .. unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; // var // Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin ShowMessage(self.Caption); end; end.這個 Example 是示範動態 Create 一個 Form , 按 MainForm 上的 Button 就會 Create 對應的 Form ,利用 ShowModal 顯示 (用 Show 會一瞬間消失), 當您是要產生多個可 Focus 的視窗,可參考 Button4 的做法 ... 請您注意的紅色的部分,您要將 RAD 自動產生的 var Form2:TForm2 這種對應註解起來,並且修改 Form2.XXX (XXX => Method) 部分,以免發生不可預期的錯誤 另外,如果不喜歡用 FForm2 := TForm2.Create(self); 可以用Application.CreateForm(TForm2, Form2); 希望以上對您有幫助 |
yeedonho
一般會員 發表:3 回覆:2 積分:1 註冊:2003-12-06 發送簡訊給我 |
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
引言: 對不起,我試了還是當機 我的問題是一MAIN PROJECT(PROJECT1) 裡面一BUTTON CREATE 另一PROJECT(PROJECT2)裡面的FORM2 PROJECT2裡面的FORM2有一BUTTON CREATE 一 FORM3 FORM3.CLOSE時當機訊息 Access violation at address 40056AD9 in module 'vcl50.bpl' (我不要一開始即產生所有的form)我剛剛試了一下,我在 MainForm -> Form2 -> Form3 -> Form3.close 沒有問題啊,您要不要把您的 Code 貼上來讓大家 Debug 一下?? 另外,您自己也可以利用 Break point 停在猜測出錯的位置,再利用 step Trace,這樣也許能找到當機的那行,也可以縮小目標.. PS. 我示範的做法就是一開始沒有把 Form Load 進來,在需要用的時候 Create,不用的時候 Destory .. |
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |