詳情請看  http://delphi.ktop.com.tw/topic.asp?method=AnswerOK&topic_id=75071


// 這是產生 Form 的 code

TfmMsgEditor *fmMsgEditor = new TfmMsgEditor(Application);

fmMsgEditor->Caption = IntToStr(MDIChildCount);

fmMsgEditor->OnClose = this->ChildFrmClose;  // 為新視窗指定關閉函式

TabControl1->Tabs->AddObject(IntToStr(MDIChildCount), fmMsgEditor);

TabControl1->TabIndex = TabControl1->Tabs->Count-1;





// 關閉視窗的函式
void __fastcall TfmMain::ChildFrmClose(TObject *Sender, TCloseAction &Action)
{
for(int i = 0; i < TabControl1->Tabs->Count; ++i)
{
if (TabControl1->Tabs->Objects[i] == Sender)
{
TabControl1->Tabs->Delete(i);
TabControl1->Refresh();
}
}
Action = caFree;
}





// Tab 切換的函式
void __fastcall TfmMain::TabControl1Change(TObject *Sender)
{
AnsiString s = TabControl1->Tabs->Objects[TabControl1->TabIndex]->ClassName();
// 若有多種不同的 MDI Child Form, 就可以這樣判斷
if (s == "TfmMsgEditor")
{
TfmMsgEditor *Child = dynamic_cast(TabControl1->Tabs->Objects[TabControl1->TabIndex]);
Child->BringToFront();
}
else if (s == "TfmEnumEditor")
{
TfmEnumEditor *Child = dynamic_cast(TabControl1->Tabs->Objects[TabControl1->TabIndex]);
Child->BringToFront();
}
}





// 這是在 Child Form 的 OnActivate 事件裡的 code, 這樣點選視窗時,Tab 也能跟著切換了
for (int i = 0; i < fmMain->TabControl1->Tabs->Count; ++i)
{
if (fmMain->TabControl1->Tabs->Strings[i] == Caption)
{
fmMain->TabControl1->TabIndex = i;
}
}

 




目前還有一個小缺點,就是在切換 Tab 的時候,

會有閃一下的現象產生,不知是否有方法可以避免呢?


全站熱搜

Nelson 發表在 痞客邦 留言(2) 人氣()