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

動態建立MDI Child Form時出現的問題…

答題得分者是:jow
ychch0819
一般會員


發表:25
回覆:29
積分:15
註冊:2006-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-05 12:39:17 IP:59.120.xxx.xxx 訂閱
我已經有一個MDI Form了…按下MDI Form上的一個button後,要動態建立幾個MDI Child Form

可是當執行到Form1->new TForm1(Application)時,總會出現"No MDI Forms are currently active",

但明明就已經有MDI Form了…不知道要怎麼解決…謝謝

我的程式架構為兩個auto-create form, 其中一個為MDI Form(一開始visible = false)
當另一個aotu-create form按下button後,呼叫MDI Form->Show,同時設為focus...
而在MDI Form的Show Event則執行動態產生MDI Child Form的程式…
編輯記錄
ychch0819 重新編輯於 2007-11-05 12:45:59, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-05 12:48:13 IP:210.66.xxx.xxx 訂閱
Form1->new TForm1(Application)

Owner 指定為 你的 MDIMainForm
ychch0819
一般會員


發表:25
回覆:29
積分:15
註冊:2006-08-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-05 12:53:58 IP:59.120.xxx.xxx 訂閱
這個我有試過…我MDI Form的名稱為ABC_Form
我寫成Form1 = new TForm1(ABC_Form)仍然是一樣的訊息,

我剛剛試了一下…把本來的MDIForm一開始設為Visible = true,另一個auto-create form一開始設為 false
這樣就可以…但是我程式Form出現的順序剛好要相反啊…有什麼辦法可以解決嗎
===================引 用 jow 文 章===================
Form1->new TForm1(Application)

Owner 指定為 你的 MDIMainForm
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-05 13:25:03 IP:210.66.xxx.xxx 訂閱
測試動作:
(1)
開兩個Form, 一個命名 frmMain, 另一個命名 frmChild, 如此
你現在有兩個自TForm繼承下來的Form class, TfrmMain 及 TfrmChild

(2)從 Project->Options->Forms->Auto-Create Forms中 將 frmChild
移置到 Available Forms. 如此只讓程式自動以frmMain為物件變數來產生
一個TfrmMain. 而TfrmChild將動態的由程式產生.

以下為測試程式碼:

TfrmMain
[code cpp]
//---------------------------------------------------------------------------
#ifndef fMainH
#define fMainH
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp><br />//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published:
protected:
TMainMenu *mm;
void __fastcall DO_CREATE_MDIChild(TObject* Sender);
private:
public:
__fastcall TfrmMain(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif
[/code]
[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "fMain.h"
#include "fChild.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
this->FormStyle = fsMDIForm;
this->WindowState = wsMaximized;
mm = new TMainMenu(this);
TMenuItem *mi = new TMenuItem(mm);
mi->Caption = "New Child";
mi->OnClick = DO_CREATE_MDIChild;
mm->Items->Add(mi);
this->Menu = mm;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::DO_CREATE_MDIChild(TObject* Sender)
{
new TfrmChild(this);
}
//---------------------------------------------------------------------------
[/code]

TfrmChild

[code cpp]
//---------------------------------------------------------------------------
#ifndef fChildH
#define fChildH
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp><br />//---------------------------------------------------------------------------
class TfrmChild : public TForm
{
__published:
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:
public:
__fastcall TfrmChild(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmChild *frmChild;
//---------------------------------------------------------------------------
#endif
[/code]
[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "fChild.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmChild *frmChild;
//---------------------------------------------------------------------------
__fastcall TfrmChild::TfrmChild(TComponent* Owner)
: TForm(Owner)
{
this->FormStyle = fsMDIChild;
}
//---------------------------------------------------------------------------
void __fastcall TfrmChild::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
//---------------------------------------------------------------------------
[/code]


謹供參考.....^_^









ychch0819
一般會員


發表:25
回覆:29
積分:15
註冊:2006-08-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-05 13:49:17 IP:59.120.xxx.xxx 訂閱
謝謝jaw的回覆…但我想你有點誤會我的意思…
我的MDI Child本來就是available...但我是有兩個Auto-Create Form,一個是MDI Form,一個不是…
程式想要執行的順序為先出現不是MDI Form的那個auto-Create Form,然後按下某個button後出現MDI Form,然後在動態產生Child Form
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-11-05 14:26:51 IP:210.66.xxx.xxx 訂閱
Application->MainForm 不是 MDIForm???

那就將Main Form設定成 非 MDIForm的那一個,
可是這樣的話, MDIForm也許可以Show得出來,
可是在動態產生Child Form時, 會產生問題...

另外,這個 Application 還算是MDI ????

^_^??

ychch0819
一般會員


發表:25
回覆:29
積分:15
註冊:2006-08-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-11-05 14:33:45 IP:59.120.xxx.xxx 訂閱
嗯…現在的問題就是你所說的…XD
所以我也不知道這樣還算不算MDI Application…
現在已經選擇退而求其次的方法…
===================引 用 jow 文 章===================
Application->MainForm 不是 MDIForm???

那就將Main Form設定成 非 MDIForm的那一個,
可是這樣的話, MDIForm也許可以Show得出來,
可是在動態產生Child Form時, 會產生問題...

另外,這個 Application 還算是MDI ????

^_^??

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