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

將視窗彈出到最上層 的問題

答題得分者是:RaynorPao
builder78
初階會員


發表:36
回覆:100
積分:47
註冊:2003-02-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-05 17:53:33 IP:210.85.xxx.xxx 未訂閱
我想寫一個提醒視窗~ 當事件發生時~ 彈跳出一個視窗在最上層~ (若原本最小化要秀出視窗並彈到最上層~ 沒最小化也要跳到最上層)~ 此時使用者可以選擇將這視窗最小化 或 把焦點移到別的視窗~ 我用一個Timer模擬事件的發生 void __fastcall TForm1::Timer1Timer(TObject *Sender) { ShowWindow(Handle, SW_RESTORE); //將視窗顯示出來 SetForegroundWindow(Handle); //設定焦點 } 可是我發現當視窗彈出後只能最小化一次~ 當它又彈出來時 想要第二次最小化時~ 卻發現按最小化鈕無作用??? 怎會如此 我是用Windows XP作業系統的 又換了下面的程式後~ 但若按最小化就彈不出視窗了??~~ void __fastcall TForm1::Timer1Timer(TObject *Sender) { if (IsIconic(Handle)) //檢查是否最小化 ShowWindow(Handle, SW_RESTORE); //將視窗顯示出來 else BringWindowToTop(Handle); //帶到最上層 SetForegroundWindow(Handle); //設焦點 } 各位大人~ 有辦法解決嗎?~~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-05 20:00:48 IP:61.221.xxx.xxx 未訂閱
引言: 我想寫一個提醒視窗~ 當事件發生時~ 彈跳出一個視窗在最上層~ (若原本最小化要秀出視窗並彈到最上層~ 沒最小化也要跳到最上層)~ 此時使用者可以選擇將這視窗最小化 或 把焦點移到別的視窗~ 我用一個Timer模擬事件的發生 void __fastcall TForm1::Timer1Timer(TObject *Sender) { ShowWindow(Handle, SW_RESTORE); //將視窗顯示出來 SetForegroundWindow(Handle); //設定焦點 } 可是我發現當視窗彈出後只能最小化一次~ 當它又彈出來時 想要第二次最小化時~ 卻發現按最小化鈕無作用??? 怎會如此 我是用Windows XP作業系統的 又換了下面的程式後~ 但若按最小化就彈不出視窗了??~~ void __fastcall TForm1::Timer1Timer(TObject *Sender) { if (IsIconic(Handle)) //檢查是否最小化 ShowWindow(Handle, SW_RESTORE); //將視窗顯示出來 else BringWindowToTop(Handle); //帶到最上層 SetForegroundWindow(Handle); //設焦點 } 各位大人~ 有辦法解決嗎?~~
builder78 你好: 請參考以下的做法
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
builder78
初階會員


發表:36
回覆:100
積分:47
註冊:2003-02-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-05 22:54:22 IP:210.85.xxx.xxx 未訂閱
看了文章 試了 四種方法~ 都無用耶~~ (1)保持最上層~ 但不是我要到~ 最小化後時間到也不會彈跳出來 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); (2)時間到會有焦點 但一樣 最小化後時間到也不會彈跳出來 BringWindowToTop(Handle); SetForegroundWindow(Handle); SetActiveWindow(Handle); keybd_event(VK_RETURN, (BYTE)MapVirtualKey(VK_RETURN, 0), 0, 0); //模擬按下Enter鍵 keybd_event(VK_RETURN, (BYTE)MapVirtualKey(VK_RETURN, 0), KEYEVENTF_KEYUP, 0); //模擬放開Enter鍵 (3)時間到 工作列上的視窗有被壓下的形狀 但一樣彈跳不出來 DWORD Th1 = GetCurrentThreadId(); DWORD Th2 = GetWindowThreadProcessId(GetForegroundWindow,NULL); AttachThreadInput(Th2, Th1, true); try { SetForegroundWindow(Application->Handle); } __finally { AttachThreadInput(Th2, Th1, false); } (4)時間到會有焦點~ 有時會閃~ 但一樣 最小化後時間到也不會彈跳出來 SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDCHANGE); SetForegroundWindow(Application->MainForm->Handle); 看來..... 算了~ 先研究別的好了~... -___-||
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-06 00:20:44 IP:61.221.xxx.xxx 未訂閱
引言: 看了文章 試了 四種方法~ 都無用耶~~ 看來..... 算了~ 先研究別的好了~... -___-||
builder78 你好: 試試看以下的做法 < class="code"> if(IsIconic(Application->Handle)) { ShowWindow(Application->Handle, SW_RESTORE); } else { SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDCHANGE); SetForegroundWindow(Application->MainForm->Handle); } -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
builder78
初階會員


發表:36
回覆:100
積分:47
註冊:2003-02-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-06 01:36:39 IP:210.85.xxx.xxx 未訂閱
喔喔~~~~ 真的可以了耶 這就是我要的~! 真是太神奇了~~ 還是 板主 厲害!!~~ 強~!!~ 原本以為沒望了說~~CC... 馬上給分~ ^O^
系統時間:2024-04-20 12:45:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!