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

判斷視窗是否開啟的問題:

尚未結案
nieo
一般會員


發表:32
回覆:56
積分:17
註冊:2003-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-29 20:29:25 IP:211.74.xxx.xxx 未訂閱
請問各位大大: 我現在想用ActionList來管理我的事件,請問一下,我該如何更改下列的程式碼?   程式碼: bool OpenForm(TForm *WForm) {    int i;    bool FormExist;    if (WForm==NULL) return false;    FormExist=false;    for(i=0;iFormCount;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; }
apang
一般會員


發表:11
回覆:20
積分:6
註冊:2003-06-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-30 14:17:44 IP:211.23.xxx.xxx 未訂閱
nieo你好... 可以先請問你的目的是??
nieo
一般會員


發表:32
回覆:56
積分:17
註冊:2003-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-30 22:14:38 IP:211.74.xxx.xxx 未訂閱
大大你好: 我是用C Builder開發我的畢業專題,然後我是用這個function來判斷視窗是否有重複開啟,然後這個function接收的參數是繼承TForm的,因為我想改用ActionList來管理我的程式,但是不知道如何利用TAction裡面的方法來改寫這個function,請問大大要如何改寫呢?
apang
一般會員


發表:11
回覆:20
積分:6
註冊:2003-06-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-11 11:26:17 IP:211.23.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-11 18:56:34 IP:210.68.xxx.xxx 未訂閱
請問大大: void __fastcall TForm1::Action1Execute(TObject *Sender) 裡的參數是什麼東西ㄚ?還有(TForm*)Sender是什麼意思?
apang
一般會員


發表:11
回覆:20
積分:6
註冊:2003-06-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-12 12:44:32 IP:211.23.xxx.xxx 未訂閱
引言: 請問大大: 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-12 12:59:19 IP:211.23.xxx.xxx 未訂閱
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來管理程式的目的 ^^
系統時間:2024-05-04 7:29:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!