線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4306
推到 Plurk!
推到 Facebook!

form create form 再 create form 正確寫法?

尚未結案
yeedonho
一般會員


發表:3
回覆:2
積分:1
註冊:2003-12-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-06 12:06:06 IP:210.241.xxx.xxx 未訂閱
我寫了很多單獨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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-06 17:06:09 IP:219.68.xxx.xxx 未訂閱
那你為什麼不在 mainform 中 create form1,form2,form3...etc.. 或是當你確定用到那個 form 的時候你再去 Create 不用的時候就 delete 掉
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-07 18:03:13 IP:211.76.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-08 10:54:39 IP:210.241.xxx.xxx 未訂閱
對不起,我試了還是當機 我的問題是一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)
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-08 18:12:56 IP:211.76.xxx.xxx 未訂閱
引言: 對不起,我試了還是當機 我的問題是一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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-08 18:50:36 IP:61.221.xxx.xxx 未訂閱
yeedonho 你好: 如果:開啟如下 Application.CreateForm(TForm1, Form1); Form1.ShowModal; 那請看Form3的onclose有何物件無free
------
======================
昏睡~
不昏睡~
不由昏睡~
系統時間:2024-04-27 1:50:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!