如何讓表單永遠在最下層(包含拖曳) |
答題得分者是:jest0024
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
我們在建立表單時可以設定 fsStayOnTop 或由 API SetWindowPos 的 HWND_TOPMOST 將表單變成最上層顯示,但是要如何作到最下層呢? 我有試過在移動表單的同時將視窗以 SetWindowPos 的 HWND_BOTTOM 設為 onBottom,但在移動時,表單還是會跑到上層,在移完後,再變到下層? 可是有一些軟體(如桌面月曆)可以在移動時也維持在最下層,How? 沒空更新的網頁...
http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
dllee兄你好:
看了你的題目我感覺Windows應該在SetWindowPos這個API function中有一個對應HWND_TOPMOST的屬性,可能可以叫HWND_BOTTOMMOST,這樣才比較friendly才對< >! 針對>狂拳打死老師父>的方法(老一輩武俠小說中常見的名句)< >! 測試鎖死扣:
< class="code">in Unit.h
~~
private: // User declarations
void __fastcall FormWndProc(TMessage&);
TWndMethod OrgFormWndProc;
~~ in Unit.cpp
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
OrgFormWndProc=Form1->WindowProc;
Form1->WindowProc=FormWndProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormWndProc(TMessage& Msg)
{
if (Msg.Msg==WM_SETFOCUS || Msg.Msg==WM_MOVING || Msg.Msg==WM_PAINT) { <---目前這3個應該夠用了!
SetWindowPos(Form1->Handle,HWND_BOTTOM,Form1->Left,Form1->Top,Form1->Width,Form1->Height,SWP_NOOWNERZORDER);
Form1->Caption=i;
i ;
} OrgFormWndProc(Msg);
//---------------------------------------------------------------------------
目前上述還測試ok,不曉得有沒有其它的方法
|
conundrum
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
http://delphi.ktop.com.tw/topic.php?topic_id=39531
http://delphi.ktop.com.tw/topic.php?topic_id=19817
http://delphi.ktop.com.tw/topic.php?topic_id=20644
http://delphi.ktop.com.tw/topic.php?topic_id=25818
http://delphi.ktop.com.tw/topic.php?topic_id=26443
http://delphi.ktop.com.tw/topic.php?topic_id=28089 此未有正確答案
http://delphi.ktop.com.tw/topic.php?topic_id=30728
http://delphi.ktop.com.tw/topic.php?topic_id=40588
http://delphi.ktop.com.tw/topic.php?topic_id=35940
http://delphi.ktop.com.tw/topic.php?topic_id=40598
http://delphi.ktop.com.tw/topic.php?topic_id=41322
http://delphi.ktop.com.tw/topic.php?topic_id=44021 http://delphi.ktop.com.tw/topic.php?topic_id=44654 //額外這只是應用部份
【BCB】【轉貼】桌面繪畫
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41140
http://www.ne.jp/asahi/nagoya/ahomaro/builder/ 【轉貼】TidyDesktopOne
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44918 簡單一點 想辦法 把他 釘起來 跑不到移不走永遠最前 可以作假貼於桌面
啟用時 使用隱藏表單 又把它釘在貼再桌面的假圖 由於 不太懂所以亂哈哈啦 哈啦蒙主 發表人 - conundrum 於 2004/02/15 16:11:48
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
|
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 目前還有一點小小的缺陷,在移完後,放開滑鼠的瞬間,會有很明顯的閃動(跑到前景又立刻回到背景),如果還有其他的 Message 需要攔,請再分享一下...dllee兄你好: 這個問題我try到了,是有,不過我的PC上不好試出來,大概拖放個5、6次才有一次這種情形 |
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 這個問題我try到了,是有,不過我的PC上不好試出來,大概拖放個5、6次才有一次這種情形感謝您的繼續測試 if (Msg.Msg==WM_NCHITTEST) SetWindowPos(Form1->Handle,HWND_BOTTOM,Form1->Left,Form1->Top,Form1->Width,Form1->Height,SWP_NOOWNERZORDER); if (Msg.Msg==WM_SIZE) SetWindowPos(Form1->Handle,HWND_BOTTOM,Form1->Left,Form1->Top,Form1->Width,Form1->Height,SWP_NOOWNERZORDER);這兩個比較難試出何時需要用到,賣個關子
------
http://www.ViewMove.com |
jest0024
高階會員 ![]() ![]() ![]() ![]() 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
|
dllee
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 好久以前的問題捏,不過嘛來回答一下我的做法。高手!高手! 佩服!佩服! 實在是太強了procedure TForm1.Create; var dc:THandle; begin dc:=GetWindow(GetWindow(FindWindow('Progman',nil),GW_CHILD),GW_CHILD); Windows.SetParent(Handle,dc); end;學而時習之不亦樂乎!
------
http://www.ViewMove.com |
h5rong
一般會員 ![]() ![]() 發表:32 回覆:44 積分:15 註冊:2003-08-27 發送簡訊給我 |
引言: 好久以前的問題捏,不過嘛來回答一下我的做法。按照上述指令,當載入 mainform(此 mainform 有1024*768背景圖),整個 OS 螢幕畫面,整個反黑,當遠端用 遙控軟體連上該電腦時,一切又正常,此遙控軟體一離線時,整個螢幕畫面又反黑,曾經將 Active DeskTop--Web--顯示 web 內容拿掉,但還是一樣,不曉得有人遇到過否? 謝謝 !!procedure TForm1.Create; var dc:THandle; begin dc:=GetWindow(GetWindow(FindWindow('Progman',nil),GW_CHILD),GW_CHILD); Windows.SetParent(Handle,dc); end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |