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

如何在同一程式中的某視窗保持在主視窗的下面

尚未結案
ivanxyz
一般會員


發表:7
回覆:10
積分:3
註冊:2004-03-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-21 17:52:36 IP:210.202.xxx.xxx 未訂閱
請教如何讓Form2保持在Form1的下面,有試過用BringWindowToTop()來做 如下 //Form1和Form2都是多邊型視窗 void __fastcall TForm2::FormMouseDown(TObject *Sender, TMouseButton Button,TShiftState Shift, int X, int Y) { BringWindowToTop(Form1->Handle); } 雖然可以在mouse選到Form2時讓Form2保持在Form1下方可是會閃一下 不知道有沒有方法可以改善 P.S.如果不用FormStyle=fsStayOnTop
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-22 20:12:01 IP:211.74.xxx.xxx 未訂閱
引言: 請教如何讓Form2保持在Form1的下面,有試過用BringWindowToTop()來做 如下 //Form1和Form2都是多邊型視窗 void __fastcall TForm2::FormMouseDown(TObject *Sender, TMouseButton Button,TShiftState Shift, int X, int Y) { BringWindowToTop(Form1->Handle); } 雖然可以在mouse選到Form2時讓Form2保持在Form1下方可是會閃一下 不知道有沒有方法可以改善 P.S.如果不用FormStyle=fsStayOnTop
ivanxyz你好: 其實我覺得<>用>這招還>會閃一下"的問題,其實那應該是合理的,因為在滑鼠點到>>> 把視窗設下去! 所以目前而言,照整個流程看來,這類的做法,造成閃一下的效果應是合理的,這篇有一些些相關的討論: < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44828">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44828 而這篇的功用是把某視窗永遠設在最下層,如果你不介意把Form2永遠設為最下層的話,可試用這範例!當然這篇也會有"閃一下"的問題,不過我記得比BringWindowToTop(Form1->Handle)這招好很多, 也就是閃的不太明顯! 另外本篇的一個重點是研究要攔多少的訊息才夠,像你的例子只有在FormMouseDown事件中做對應當然是不夠的! 最後,我初想了一個不是這類的作法,即今天滑鼠先只要點下去,我們再做對應的話,這樣的做法都會歸類到上面的做法,也就是應該會閃一下! 所以唯有直接先把滑鼠 class="code"> ~~~ TForm1 *Form1; HHOOK HookID; LRESULT CALLBACK MouseProc(int iCode,WPARAM wParam,LPARAM lParam); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form2=new TForm2(Application); Form2->Show(); Form1->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { HookID=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,0,GetCurrentThreadId()); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { if (HookID!=0) UnhookWindowsHookEx(HookID); } //--------------------------------------------------------------------------- LRESULT CALLBACK MouseProc(int iCode,WPARAM wParam,LPARAM lParam) { if (iCode<0) { return CallNextHookEx(HookID,iCode,wParam,lParam); } else if (wParam==WM_LBUTTONDOWN || wParam==WM_LBUTTONUP || wParam==WM_NCLBUTTONDOWN || wParam==WM_NCLBUTTONUP) { MOUSEHOOKSTRUCT* ms; ms=(MOUSEHOOKSTRUCT*)lParam; if (ms->hwnd==Form2->Handle) { return HC_SKIP; } } return CallNextHookEx(HookID,iCode,wParam,lParam); } 這個例子可以把click在Form2的所有滑鼠事件擋掉,也就是滑鼠永遠點不到Form2,所以當然Form2會永遠在最下層了! 當然這是個不太有用的例子,是不是有用要端看你的Form2是做什麼用以及Form2上有那些元件才能再做應用的! 以上是我之前的一些心得,不見得有用,但加減參考看看吧!
ivanxyz
一般會員


發表:7
回覆:10
積分:3
註冊:2004-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-23 11:22:34 IP:210.202.xxx.xxx 未訂閱
m8815010版主你好: 我想要的效果就是版主列的這討論,但其中的方法好像也還是會閃.. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44828 再請問如果我將Form2->FormStyle=fsStayOnTop Form2便會保持在自己AP的最上方,而不會擋到其它AP,有辦法使Form1也如此嗎?
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-23 11:54:10 IP:61.63.xxx.xxx 未訂閱
引言: m8815010版主你好: 我想要的效果就是版主列的這討論,但其中的方法好像也還是會閃.. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44828 再請問如果我將Form2->FormStyle=fsStayOnTop Form2便會保持在自己AP的最上方,而不會擋到其它AP,有辦法使Form1也如此嗎?
ivanxyz你好< >: 我再強調一下< >: 1. 只要是 "在Form2彈上來後,再硬把它設下去" 這類的做法都會閃(目前我的認知) 2. 那篇範例也是這類的做法,所以會閃< >! >! >!另外閃的嚴重與否好像會跟自端的>好像啦)! 另外~~ <>再請問如果我將>> 不太懂你在說什麼< >,設
ivanxyz
一般會員


發表:7
回覆:10
積分:3
註冊:2004-03-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-23 13:12:12 IP:210.202.xxx.xxx 未訂閱
m8815010版主你好: 可能是我沒說清楚.. 我的意思是我有Form1(mainform)和Form2, 1.當只把Form2->FormStyle=fsStayOnTop  可以讓Form1蓋不著Form2,但其它視窗如IE...等,還是可以蓋著Form2 2.反之當只把Form1->FormStyle=fsStayOnTop  就真的是所有的視窗都蓋不著Form1, 為什麼會有這樣的差別? 有方法可以讓mainForm有第1點效果嗎..謝謝
系統時間:2024-05-05 10:19:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!