判斷視窗是否開啟的問題: |
尚未結案
|
nieo
一般會員 發表:32 回覆:56 積分:17 註冊:2003-07-25 發送簡訊給我 |
請問各位大大:
我現在想用ActionList來管理我的事件,請問一下,我該如何更改下列的程式碼?
程式碼:
bool OpenForm(TForm *WForm)
{
int i;
bool FormExist;
if (WForm==NULL) return false;
FormExist=false;
for(i=0;i
|
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
|
nieo
一般會員 發表:32 回覆:56 積分:17 註冊:2003-07-25 發送簡訊給我 |
|
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
nieo你好... 我揣摩您的用意如下
使用OpenForm, 其parameter是TForm*, 藉此判斷該指標所指之Form是否開啟等狀態... 要用TActionList, 請你先新增一TAction,
在該TAction中的 OnExecute中如下寫
void __fastcall TForm1::Action1Execute(TObject *Sender)
{
TForm *pWForm = (TForm*)Sender;
OpenForm(pWForm );
} 然後將原需呼叫OpenForm的涵式轉向至Action1->OnExecute ...不曉得有沒有幫助, 請參考看看^^
|
nieo
一般會員 發表:32 回覆:56 積分:17 註冊:2003-07-25 發送簡訊給我 |
|
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
引言: 請問大大: void __fastcall TForm1::Action1Execute(TObject *Sender) 裡的參數是什麼東西ㄚ?還有(TForm*)Sender是什麼意思?nieo你好 會使用OnExecute是因為你"要用TActionList來管理", 所以我是將 你的OpenForm放在OnExecute裡來執行 又因為bool OpenForm(TForm *WForm)需傳一parameter TForm*型態, 而OnExecute原型的參數是TObject*, 所以用(TForm*)Sender來"轉型" 所以在我上篇回覆中, 您原本需呼叫OpenForm的地方 例如 TForm *pForm; OpenForm(pForm);//會改為呼叫Action1Execute //如Action1Execute(pForm); 這樣是ok的, 不過Action1Execute原型為Action1Execute(TObject *Sender) 所以為使經由Action1Execute 間接呼叫 OpenForm時參數傳遞正確 我才作如下動作 void __fastcall TForm1::Action1Execute(TObject *Sender) { TForm *pWForm = (TForm*)Sender; OpenForm(pWForm); } 不曉得這樣有沒有幫助^^" ...還有, 有錯誤請指正, 謝謝 |
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
nieo你好... 怕我用說的不清楚, 我用段程式碼給你看看
bool __fastcall TForm1::OpenForm(TForm *WForm) { int i; bool FormExist; if (WForm == NULL) return false; FormExist = false; for(i = 0; i < Screen->FormCount; i ) { if (Screen->Forms[i]->ClassType() == WForm->ClassType()) { FormExist = true; break; } // 記得要括號喔!不然會不能break; } if (FormExist == false) return FormExist; if (WForm->WindowState == wsMinimized) ShowWindow(WForm->Handle, SW_SHOWNORMAL); else ShowWindow(WForm->Handle, SW_SHOWNA); if (!WForm->Visible) WForm->Visible = true; WForm->BringToFront(); WForm->SetFocus(); return true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Action1Execute(TObject *Sender) { TForm *pWForm = (TForm*)Sender; OpenForm(pWForm ); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { OpenForm(this); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Action1Execute(this); } //---------------------------------------------------------------------------假設原本經由Button1來呼叫OpenForm 但現在則是用Button2呼叫ActionList的OnExecute來執行OpenForm 不曉得有沒有達成你想改用ActionList來管理程式的目的 ^^ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |