托移Form的問題 |
尚未結案
|
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
不會只是因為您的 Windows 桌面外觀效果沒有設定「拖放時顯示視窗內容」吧... StatPlus2系統資源監測器 視動科技 VMASK - ViewMove Automation Software Kernel
------
http://www.ViewMove.com |
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
dllee大大~
當然不是囉~
這麼無知的問題我也不敢po上來~(怕各位大大笑)
是因為這段code所以才產生拖曳的問題
引言: void __fastcall TForm1::FormCreate(TObject *Sender) { long wsex=::GetWindowLongPtr(Handle,GWL_EXSTYLE); wsex |= WS_EX_NOACTIVATE; ::SetWindowLongPtr(Handle,GWL_EXSTYLE,wsex); }~我還在學習狀態希望多多向您學習~ |
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
不好意思,插個花:
先看看GetWindowLongPtr和SetWindowLongPtr的原型吧:
LONG_PTR GetWindowLongPtr( HWND hWnd, int nIndex ); LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong );這兩個函數分別用來從指定視窗的結構中取得和設置資訊。再看看其中的說明: Long,由nIndex決定。零表示出錯。會設置GetLastErrorhwnd ----------- Long,欲爲其獲取資訊的視窗的控制碼 nIndex --------- Long,欲取回的資訊,可以是下述任何一個常數: GWL_EXSTYLE 擴展視窗樣式 GWL_STYLE 視窗樣式 GWL_WNDPROC 該視窗的視窗函數的位址 GWL_HINSTANCE 擁有視窗的實例的控制碼 GWL_HWNDPARENT 該視窗之父的控制碼。不要用SetWindowWord來改變這個值 GWL_ID 對話方塊中一個子窗口的識別字 GWL_USERDATA 含義由應用程式規定 DWL_DLGPROC 這個視窗的對話方塊函數位址 DWL_MSGRESULT 在對話方塊函數中處理的一條消息返回的值 DWL_USER 含義由應用程式規定 知道了這些資訊,再看看它:WS_EX_NOACTIVATE,問題就出在它身上,因爲WS_EX_NOACTIVATE的視窗類型就是在拖動過程中不顯示托移過程,我們換掉它或者去掉這行就可以啦: void __fastcall TForm1::FormCreate(TObject *Sender) { long wsex=::GetWindowLongPtr(Handle,GWL_EXSTYLE); //wsex |= WS_EX_APPWINDOW; ::SetWindowLongPtr(Handle,GWL_EXSTYLE,wsex); }================================= 人生在勤,不索何獲 業精於勤荒於嬉,行成於思毀於隨 臨淵羡魚不如退而結網 發表人 - bigdogchina 於 2004/09/13 11:49:28
------
人生在勤,不索何获? |
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
引言: 可是不用的話就沒辨法在任意文章key上對不起,小弟理解能力有限,這句話我領悟不到其中的精髓。從MSDN上找到相關的解釋: WS_EX_NOACTIVATE A top-level window created with this style cannot be activated. If a child window has this style, tapping it will not cause its top-level parent to be activated. A window that has this style will receive stylus events, but neither it nor its child windows can get the focus. 換成這樣試試呢: void __fastcall TForm1::FormCreate(TObject *Sender) { long wsex=::GetWindowLongPtr(Handle,GWL_EXSTYLE); wsex |= WS_EX_APPWINDOW; ::SetWindowLongPtr(Handle,GWL_EXSTYLE,wsex); }================================= 人生在勤,不索何獲 業精於勤荒於嬉,行成於思毀於隨 臨淵羡魚不如退而結網
------
人生在勤,不索何获? |
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
引言:對不起,小弟理解能力有限,這句話我領悟不到其中的精髓。從MSDN上找到相關的解釋: WS_EX_NOACTIVATE A top-level window created with this style cannot be activated. If a child window has this style, tapping it will not cause its top-level parent to be activated. A window that has this style will receive stylus events, but neither it nor its child windows can get the focus. 換成這樣試試呢: void __fastcall TForm1::FormCreate(TObject *Sender) { long wsex=::GetWindowLongPtr(Handle,GWL_EXSTYLE); wsex |= WS_EX_APPWINDOW; ::SetWindowLongPtr(Handle,GWL_EXSTYLE,wsex); }可能是因為WS_EX_NOACTIVATE 的關西所以才不能托移 可是又不能沒有因為 引言: 可是不用的話就沒辨法在任意文章key上所以因為是無解吧~ 謝謝大大厚愛的解答!! ~我還在學習狀態希望多多向您學習~ |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
... 只是為了托移嗎?
如果您的程式可以知道您的視窗正要被托移,
在那時就把它設為一般,在托移結束再設回 WS_EX_NOACTIVATE。
或是無法輸入...
那就在要輸入時,設定成可輸入的狀態,
在輸入完,再回到可托移的狀態。 不知道您是否有用過小弟的工具:
StatPlus2系統資源監測器
在使用它時,當滑鼠移到它的上面時,就會變得不透明,
當滑鼠移開時,又會變得透明。
同樣的方式,您可以在需要作某項工作時,把視窗的 STYLE 設為可以滿足
該狀況的 STYLE,在處理完該工作後,再把視窗的 STYLE 設回原來的樣子,
對於使用者來說,並不會覺得有什麼異樣。 吃軟也吃硬 dllee.ktop.com.tw 視動科技 VMASK - ViewMove Automation Software Kernel
------
http://www.ViewMove.com |
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
|
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
dllee大大~
可以寄你的code給我嗎?
我對這個程式很有興趣 kraen.hsu@amtek.com.tw ~我還在學習狀態希望多多向您學習~ 發表人 - kraen4468 於 2004/09/14 16:58:54 發表人 - kraen4468 於 2004/09/14 17:00:42
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 你的程式跟我想要的是一樣的結果 不過我不知道怎麼寫才有辨法在移動時不用WS_EX_NOACTIVATE 停下來時,又有WS_EX_NOACTIVATE的效果 因為我看不到你寫的code請問您指的是什麼效果? 在我的程式中完全沒有用到 WS_EX_NOACTIVATE 因為我不會用... 另外,bigdogchina 版主向您問的 引言: 可是不用的話就沒辨法在任意文章key上這句話我也完全看不懂 您想要的功能是什麼? 如果您先使用了錯誤的方法, 也要求別人要使用這個方法來解決,這就太難了。 如果您只要您的視窗是最上層顯示,那站內也有許多文章說明 如何讓視窗在最上層顯示。因為 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=55289" target="blank">StatPlus2系統資源監測器 就只是設定最上層顯示而已, 沒有什麼技巧。 如果您的程式也像 StatPlus2系統資源監測器 一樣沒有標題列, 可以參考: http://delphi.ktop.com.tw/topic.php?topic_id=37720 http://delphi.ktop.com.tw/topic.php?topic_id=43132 http://delphi.ktop.com.tw/topic.php?topic_id=50295 來移動表單,這些都不會用到 WS_EX_NOACTIVATE 所以囉,把您想要的功能先說清楚,講明白,而不只是片段,這樣別人才好幫您喔 < href="http://dllee.ktop.com.tw" target="blank">吃軟也吃硬 dllee.ktop.com.tw 視動科技 VMASK - ViewMove Automation Software Kernel
------
http://www.ViewMove.com |
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
引言:可是不用的話就沒辨法在任意文章key上上面的圖就是我的說的意思 dllee大大、bigdogchina大大~ 不好意思讓你們暈頭轉向,我的表答很差請多多包涵 我也不知道有沒有其他的方法也~ 在文件檔或有游標可以輸入的地方,我寫的鍵盤都可以輸入, 是因為我加入了 void __fastcall TForm1::FormCreate(TObject *Sender) { long wsex=::GetWindowLongPtr(Handle,GWL_EXSTYLE); wsex |= WS_EX_NOACTIVATE; ::SetWindowLongPtr(Handle,GWL_EXSTYLE,wsex); }不過也因為WS_EX_NOACTIVATE 讓我在移動整個鍵盤時看不見托移過程 所以我才很納悶,用也不是不用也不是 後來你po上了你寫的程式 那個程式有我想要的功能 在我移動時執行wsex &= ~WS_EX_NOACTIVATE; 指漂指到別的地方時執行wsex |= WS_EX_NOACTIVATE; 這不是不可能,不過有個難處 就是在form表最上面的藍色部份沒辨法控制 如果大大有好的意見要告訴小弟~ ~我還在學習狀態希望多多向您學習~ 發表人 - kraen4468 於 2004/09/15 10:23:30 |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
所以您想要作的是「螢幕小鍵盤」,這不是 Windows 內建的工具嗎?
我使用 Spyxx 去看它的 STYLE:
也沒有 WS_EX_NOACTIVATE
只有 bigdogchina版主說的 WS_EX_APPWINDOW 及我說的 WS_EX_TOPMOST。 如果是我要作... 我會 monitor 前一個 Active 視窗,當發現我的視窗
移動了,表示我是 Active,但在移動一結束,就把 Active 視窗設回
之前所記錄的 Active 視窗即可。 參考一下這篇:
【BCB】【發表】列出所有輸入法(含語言輸入)、切換輸入法、監視目前輸入法
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37920 可以切換其他視窗所使用的輸入法喔 < href="http://dllee.ktop.com.tw" target="blank">吃軟也吃硬 dllee.ktop.com.tw 視動科技 VMASK - ViewMove Automation Software Kernel
------
http://www.ViewMove.com |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
http://delphi.ktop.com.tw/topic.php?topic_id=24492
http://delphi.ktop.com.tw/topic.php?topic_id=19936
http://delphi.ktop.com.tw/topic.php?topic_id=42646
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30640
http://delphi.ktop.com.tw/topic.php?topic_id=24879
http://delphi.ktop.com.tw/topic.php?topic_id=133 這一篇可真是找好久 哈哈
kraen4468 兄 模擬小鍵盤功能 http://delphi.ktop.com.tw/topic.php?topic_id=53805
【轉貼】螢幕軟鍵盤
http://delphi.ktop.com.tw/forum.asp?FORUM_ID=77
忘記在那的了 http://delphi.ktop.com.tw/topic.php?topic_id=54757 這問題十分熱鬧 建議各位去下載此試用版 因為是個好東西
【轉貼】一個掃瞄 木馬 蠕蟲 的軟體 試用版
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=56330 此版我還是不太清楚 真正拖曳Form的問題 有點疑問 艾庵自己又變呆了 發表人 - conundrum 於 2004/09/16 00:22:55
|
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
我測試了 WS_EX_NOACTIVATE
主要是使用 TitleBar 移動時會看不到,
使用相同技術的表單移動,如:
ReleaseCapture(); // Perform( WM_SYSCOMMAND, 0xf012, 0 ); Perform(WM_SYSCOMMAND, SC_MOVE | 2, 0); Application->ProcessMessages();也是一樣,看不到移動的過程。 但是使用最原始簡單的方法就可以,如: 在表單中 MouseDown 事件中判斷 如果按下左鍵時,記錄已按下左鍵,同時記錄 X,Y 數值, 在 MouseMove 事件中判斷 如果已按下左鍵,就表單移動 X,Y 的差值 if(bMouseDown) { this->Left+=X-iDownX; this->Top+=Y-iDownY; }在 MoveUp 事件中解除已按下左鍵的記錄。 如此就可以移動表單,在 WS_EX_NOACTIVATE 下也可以看表單移動的過程。 不過,如果移動 TitleBar 則同樣是看不到移動過程。 我的建議是,不要使用 WS_EX_NOACTIVATE 因為以相同功能 Windows 所提供的螢幕小鍵盤, 它沒有使用 WS_EX_NOACTIVATE 一樣可以達到您想要的功能, 因為它沒有使用 WS_EX_NOACTIVATE,所以它使用 TitleBar 來移動時, 一樣可以看到表單內容。 當然,我不知道,螢幕小鍵盤要如何實作,無法再進一步幫您了... 下載了您的大作: ■【BCB】【發表】ON-Screen Keyboard http://delphi.ktop.com.tw/topic.php?topic_id=53805 同樣用 spyxx 看了一下,提供您參考: 吃軟也吃硬 dllee.ktop.com.tw 視動科技 VMASK - ViewMove Automation Software Kernel 發表人 - dllee 於 2004/09/16 21:37:51
------
http://www.ViewMove.com |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
試過ms的之後 知道問的題目了
%SystemRoot%\system32\osk.exe
基本上 ms的 osk 應該是偵測滑鼠焦點 切換目前的下一個視窗 還沒時間測 猜的 請使用osk.exe 並開啟 工作管理員 當滑鼠點下osk.exe時焦點正常
當滑鼠放開之後 在fomr上放一個Label1 Panel1 來判斷原osk.exe的位置都可 如果把問者的程式與ms的osk.exe同時執行 就更知道2者設計上的差異 認真看完dllee版主 所說 就是答案 了阿 哈哈 自己又白木了 發表人 - conundrum 於 2004/09/17 07:13:12
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
是呀,只要把表單 BorderStyle 設為 bsNone 不要 Title Bar
如果真的需要,再自己畫一個 < >
再使用最原始簡單的方法來移動表單就可以了 < > 昨天再次玩玩 M$ 的螢幕小鍵盤時,發現它的用的方法應該是像我說的,
去 Monitor/記錄 之前 Active 的 Windows,因為在第一次啟動時,
就是它是 Actived,而它還沒記錄到其他 Active 的視窗,此時按下按鈕
它會要求先指定一個視窗才能輸入,所以囉是用類似:
【BCB】【發表】列出所有輸入法(含語言輸入)、切換輸入法、監視目前輸入法
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37920
的方法,而所按的按鈕,再以 PostMessage 的方式送給所記錄的 Active 視窗。 我是不清楚使用 WS_EX_NOACTIVATE 時是如何傳按鍵資料給其他視窗?
不需要 PostMessage 嗎? WS_EX_NOACTIVATE 是螢幕小鍵盤專用的屬性嗎?
不解...
也許用 href="http://dllee.ktop.com.tw" target="blank">吃軟也吃硬 dllee.ktop.com.tw 視動科技 VMASK - ViewMove Automation Software Kernel
------
http://www.ViewMove.com |
kraen4468
初階會員 發表:66 回覆:112 積分:35 註冊:2003-12-04 發送簡訊給我 |
下面的code是我keyboard一些重要的code
void __fastcall TForm1::FormCreate(TObject *Sender) { long wsex = WS_EX_NOACTIVATE; ::SetWindowLong(Handle,GWL_EXSTYLE,wsex); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { scancode = (BYTE)MapVirtualKey(0X65, 0); keybd_event(0X65,scancode,0,0); keybd_event(0X65,scancode,KEYEVENTF_KEYUP,0); }我是用keybd_event 1個1個把每個盤寫出來 你說藍色部份的用畫的嗎?我還沒試過 不過我可以問一下有辨法自已寫code去控制藍色部份嗎? 因為除了畫一個之外就是只有這個辨法了 ~我還在學習狀態希望多多向您學習~ |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
void __fastcall TForm1::FormCreate(TObject *Sender) { long wsex = WS_EX_NOACTIVATE; ::SetWindowLong(Handle,GWL_EXSTYLE,wsex); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { scancode = (BYTE)MapVirtualKey(0X65, 0); keybd_event(0X65,scancode,0,0); keybd_event(0X65,scancode,KEYEVENTF_KEYUP,0); }那我來試寫一個看看好了...
------
http://www.ViewMove.com |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
http://www.lakefolks.org/cnt/index.htm#Download
類似軟體
鍵盤元件
http://delphi.icm.edu.pl/newl/d60/s002_002.htm 更確定dllee說法 哈哈 P版主的工具 ez阿 哈哈
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39531
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25378
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37720
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
OK 測試完成
■【 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=17683261&CC=395479"> 吃軟也吃硬 dllee.ktop.com.tw 視動科技 VMASK - ViewMove Automation Software Kernel
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |