全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2977
推到 Plurk!
推到 Facebook!

托移Form的問題

尚未結案
kraen4468
初階會員


發表:66
回覆:112
積分:35
註冊:2003-12-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-31 14:08:26 IP:61.222.xxx.xxx 未訂閱
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{ 
 long wsex=::GetWindowLongPtr(Handle,GWL_EXSTYLE);
  wsex |= WS_EX_NOACTIVATE;
  ::SetWindowLongPtr(Handle,GWL_EXSTYLE,wsex);
}
上面的code沒有問題~ 可是正在托移時會看不見中間托移過程 是什麼問題呢? ~我還在學習狀態希望多多向您學習~
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-11 05:26:40 IP:211.76.xxx.xxx 未訂閱
不會只是因為您的 Windows 桌面外觀效果沒有設定「拖放時顯示視窗內容」吧...     StatPlus2系統資源監測器 視動科技 VMASK - ViewMove Automation Software Kernel
------
http://www.ViewMove.com
kraen4468
初階會員


發表:66
回覆:112
積分:35
註冊:2003-12-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-13 09:41:32 IP:61.222.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-13 11:46:26 IP:211.162.xxx.xxx 未訂閱
不好意思,插個花: 先看看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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-13 15:20:37 IP:61.222.xxx.xxx 未訂閱
bigdogchina大大~ 你說的不用 
引言: wsex |= WS_EX_NOACTIVATE;
可是不用的話就沒辨法在任意文章key上 ~我還在學習狀態希望多多向您學習~
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-13 19:19:37 IP:211.162.xxx.xxx 未訂閱
引言: 可是不用的話就沒辨法在任意文章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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-14 09:41:29 IP:61.222.xxx.xxx 未訂閱
引言:對不起,小弟理解能力有限,這句話我領悟不到其中的精髓。從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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-14 12:56:55 IP:220.139.xxx.xxx 未訂閱
... 只是為了托移嗎? 如果您的程式可以知道您的視窗正要被托移, 在那時就把它設為一般,在托移結束再設回 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-14 16:10:43 IP:61.222.xxx.xxx 未訂閱
dllee大大~ 你的程式跟我想要的是一樣的結果 不過我不知道怎麼寫才有辨法在移動時不用WS_EX_NOACTIVATE 停下來時,又有WS_EX_NOACTIVATE的效果 因為我看不到你寫的code ~我還在學習狀態希望多多向您學習~
kraen4468
初階會員


發表:66
回覆:112
積分:35
註冊:2003-12-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-09-14 16:23:43 IP:61.222.xxx.xxx 未訂閱
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-09-15 09:22:14 IP:220.139.xxx.xxx 未訂閱
引言: 你的程式跟我想要的是一樣的結果 不過我不知道怎麼寫才有辨法在移動時不用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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-09-15 10:13:01 IP:61.222.xxx.xxx 未訂閱
引言:可是不用的話就沒辨法在任意文章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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-09-15 19:20:43 IP:211.76.xxx.xxx 未訂閱
所以您想要作的是「螢幕小鍵盤」,這不是 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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-09-15 23:30:30 IP:61.64.xxx.xxx 未訂閱
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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-09-16 11:02:14 IP:61.222.xxx.xxx 未訂閱
dllee大大謝謝你找的資料~ 我想我問的太差了,還是沒有人了解我的意思 dllee大大你有用過WS_EX_NOACTIVATE嗎 那你有用過就知道他可以像screen keyboard一樣key在任意的文章上 不一定只有文件檔,就連我現在寫的也可以key 如果有別的WS_EX_XXXXXX可以替代他的話我也想 因為他會有托移的問題! 不過還是感謝各位對小弟的解答 感恩~ ~我還在學習狀態希望多多向您學習~
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-09-16 20:56:14 IP:211.76.xxx.xxx 未訂閱
我測試了 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

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-09-17 06:43:26 IP:61.64.xxx.xxx 未訂閱
試過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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-09-17 17:27:41 IP:220.139.xxx.xxx 未訂閱
是呀,只要把表單 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

發送簡訊給我
#19 引用回覆 回覆 發表時間:2004-09-17 17:44:59 IP:61.222.xxx.xxx 未訂閱
下面的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

發送簡訊給我
#20 引用回覆 回覆 發表時間:2004-09-17 19:41:21 IP:61.221.xxx.xxx 未訂閱
引言:我是不清楚使用 WS_EX_NOACTIVATE 時是如何傳按鍵資料給其他視窗? 不需要 PostMessage 嗎? WS_EX_NOACTIVATE 是螢幕小鍵盤專用的屬性嗎?
報告 庵猜的 跟本不需要 偵測其他AP2的執行緒 只要最置前即可 應該說 當OSK偵測自己時或有鍵盤值時 他就送在他之下的視窗 而輸入法本身有位置功能 就如使用ctrl c時 選取的位置不會因切換視窗之後 在回妳要的視窗就改變位置了
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#21 引用回覆 回覆 發表時間:2004-09-17 21:07:11 IP:211.76.xxx.xxx 未訂閱
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

發送簡訊給我
#22 引用回覆 回覆 發表時間:2004-09-18 01:10:38 IP:61.64.xxx.xxx 未訂閱
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

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