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

關於Zoom In/Zoom Out

尚未結案
tglee
一般會員


發表:10
回覆:18
積分:5
註冊:2004-10-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-19 17:22:35 IP:61.220.xxx.xxx 未訂閱
Dear 各位先進, 我們知道在Office 系列產品下Ctrl Wheel 前滾或後滾 可以使文件放大或縮小 可是我寫到程式時 卻不能放大或縮小,只能滾動捲軸,這是怎麼回事? 我的Code 如下: 前滾是120,後滾是-120,我只列出前滾 . . . . HWND ahwnd = ::WindowFromPoint(pt); keybd_event(VK_CONTROL,0,0,0); ::PostMessage(ahwnd,WM_MOUSEWHEEL,MAKEWPARAM(0,120),NULL); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); 如果可以,請各位先進指教,謝謝
m8815010
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-19 18:11:41 IP:61.63.xxx.xxx 未訂閱
引言: Dear 各位先進, 我們知道在Office 系列產品下Ctrl Wheel 前滾或後滾 可以使文件放大或縮小 可是我寫到程式時 卻不能放大或縮小,只能滾動捲軸,這是怎麼回事? 我的Code 如下: 前滾是120,後滾是-120,我只列出前滾 . . . . HWND ahwnd = ::WindowFromPoint(pt); keybd_event(VK_CONTROL,0,0,0); ::PostMessage(ahwnd,WM_MOUSEWHEEL,MAKEWPARAM(0,120),NULL); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); 如果可以,請各位先進指教,謝謝
tglee你好< >: 你這個問題有點奇怪吧< >!? Office的軟體可以按Ctrl wheel造成Zoom in、Zoom out的效果是沒錯!但那應是它自已軟體本身俱備的功能吧! 一般軟體應是沒有此功能的,所以雖然現在你模擬這樣的一個動作(ctrl wheel)去給一個視窗,但由於這個視窗並沒有這樣Zoom in 、Zoom out的能力,所以即使你做了,也是枉然!對吧?? 不知你覺得?!
tglee
一般會員


發表:10
回覆:18
積分:5
註冊:2004-10-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-19 18:33:22 IP:61.220.xxx.xxx 未訂閱
Dear m8815010, 沒錯阿,我有一個專案就是用滑鼠按鍵,一按下去就要能使Office 系列產品 Zoom In/Zoom Out. 不好意思,沒說明
m8815010
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-19 23:44:31 IP:203.67.xxx.xxx 未訂閱
引言: Dear m8815010, 沒錯阿,我有一個專案就是用滑鼠按鍵,一按下去就要能使Office 系列產品 Zoom In/Zoom Out. 不好意思,沒說明
tglee你好: 嗯,瞭解你的意思了,我>>! 我測試了 class="code"> Word中: 前題:一個Word application有兩個HWND值是必要的,一個是整個視窗的HWND值,它的 classname是OpusApp,另一個視窗HWND值是我們編輯文件的那個編輯區視窗,它的 classname是_WwG 可達成Ctrl Wheel的方式: keybd_event(VK_CONTROL,0,0,0); SendMessage(hwnd,WM_MOUSEWHEEL,MAKEWPARAM(0,120),0); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); 說明:1.上述的hwnd值,可以是前題兩個hwnd值中的任一個 2.SendMessage可,PostMessage也可,但SendMessage效果較好 3.Ctrl鍵的按法,限定用keyboard event的這種方法 Excel中: 前題:同樣一個為整個視窗的HWND值,classname為XLMAIN,另一個可編輯區那個子視窗的 HWND值,classname為EXCEL7 可達成Ctrl Wheel的方式: SendMessage(hwnd,WM_MOUSEWHEEL,MAKEWPARAM(MK_CONTROL,120),0); 說明:1.上述的hwnd限用可編輯區的那個hwnd值 2.SendMessage,PostMessage皆可,效果一樣 3.3.Ctrl鍵的按法,限定用WParam內下MK_CONTROL參數的方式 Conclusion 1.各hwnd值的找法可自已寫程式,也可用VC的spy 直接測比較快 2.詭異的結果應該也是有合理的解釋,但似乎比try出結果難些! >! 發表人 -
tglee
一般會員


發表:10
回覆:18
積分:5
註冊:2004-10-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-20 10:07:29 IP:61.220.xxx.xxx 未訂閱
Dear m8815010, 謝謝您的回答,也寫的非常詳細 excel 沒問題(不好意思,我的Excel 做法與您相同,也謝謝您啦) 我提的問題是在Word,PowerPoint,Outlook 下 不過您使用的方式我之前也try 過了,還是不行,只有捲軸有動作-_- 我的作法如下: . . . . HWND hWord = ::FindWindow("OpusApp",NULL); HWND aHwnd = ::WindowFromPoint(pt); HWND opHwnd = ::GetAncestor(aHwnd,GA_ROOTOWNER); if(hWord == opHwnd) { ::keybd_event(VK_CONTROL,0,0,0); ::PostMessage(hWord,WM_MOUSEWHEEL,MAKEWPARAM(0,120),NULL); ::keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); } 而這樣是不行的:(,只有捲軸會動. 而我的環境是Office 2000,BCB 5.0,Windows 2000 如果您的方式與我不同, 請再指教一番,先謝謝您啦!!,您辛苦了!!
m8815010
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-20 11:23:38 IP:61.63.xxx.xxx 未訂閱
[quote] Dear m8815010,    謝謝您的回答,也寫的非常詳細 excel 沒問題(不好意思,我的Excel 做法與您相同,也謝謝您啦) 我提的問題是在Word,PowerPoint,Outlook 下 不過您使用的方式我之前也try 過了,還是不行,只有捲軸有動作-_- 我的作法如下: . . . . HWND hWord = ::FindWindow("OpusApp",NULL); HWND aHwnd = ::WindowFromPoint(pt); HWND opHwnd = ::GetAncestor(aHwnd,GA_ROOTOWNER);    if(hWord == opHwnd)  { ::keybd_event(VK_CONTROL,0,0,0); ::PostMessage(hWord,WM_MOUSEWHEEL,MAKEWPARAM(0,120),NULL); ::keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); }    而這樣是不行的:(,只有捲軸會動.    而我的環境是Office 2000,BCB 5.0,Windows 2000 如果您的方式與我不同, 請再指教一番,先謝謝您啦!!,您辛苦了!!        tglee你好: 剛剛又在我的 class="code"> ~~ TForm1 *Form1; HWND hwnd; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { keybd_event(VK_CONTROL,0,0,0); SendMessage(hwnd,WM_MOUSEWHEEL,MAKEWPARAM(0,-120),0); keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { hwnd=FindWindow("OpusApp",NULL); if (hwnd!=NULL) this->Caption=(LONG)hwnd; } //--------------------------------------------------------------------------- 這個範例中,Word視窗的hwnd值是直接用程式取的,不是用Spy 抓的!(當然你要先開一個Word Ap囉!) 承前篇回應由於Word的兩個視窗的Hwnd值皆可以使用,所以我就取整個Ap視窗的那個hwnd即可,也就是我上面範例的那一行,而tglee你的步驟卻那麼多: HWND hWord = ::FindWindow("OpusApp",NULL); HWND aHwnd = ::WindowFromPoint(pt); HWND opHwnd = ::GetAncestor(aHwnd,GA_ROOTOWNER); if(hWord == opHwnd) { ... ... ... 我不確定你有沒有抓錯hwnd值哦! 另外控制 >! 最後,我不對其它的 >!
tglee
一般會員


發表:10
回覆:18
積分:5
註冊:2004-10-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-20 11:57:24 IP:61.220.xxx.xxx 未訂閱
Dear m8815010, 先謝謝您回答問題 我剛剛看了你的程式,去執行放大或縮小是沒問題的. 而我的Code 用Click Button 去觸發,也是可以放大縮小的 問題再於您使用Click Button 去觸發, 所以在Word 是可以放大或縮小, 您能Hook 您Mouse 的其中一鍵的訊息(例如中間鍵) 然後去控制嗎? 因為這樣可能結果會跟我一樣..^^ 謝謝您再次指教
m8815010
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-20 12:09:14 IP:61.63.xxx.xxx 未訂閱
引言: Dear m8815010, 先謝謝您回答問題 我剛剛看了你的程式,去執行放大或縮小是沒問題的. 而我的Code 用Click Button 去觸發,也是可以放大縮小的 問題再於您使用Click Button 去觸發, 所以在Word 是可以放大或縮小, 您能Hook 您Mouse 的其中一鍵的訊息(例如中間鍵) 然後去控制嗎? 因為這樣可能結果會跟我一樣..^^ 謝謝您再次指教
呃,tglee我又不了解你的問題了!? 今天我要以一隻 >!
tglee
一般會員


發表:10
回覆:18
積分:5
註冊:2004-10-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-20 12:19:59 IP:61.220.xxx.xxx 未訂閱
Dear m8815010, 我的專題就是用Mouse 上的Button 去控制 Office 系列產品 的放大與縮小阿^^ 而Office 正是利用Ctrl Wheel 去放大或縮小 所以我並不是要用Ap 去控制 放大,縮小 是要用滑鼠上的按鍵去控制^^ 所以請再指教一番^^
m8815010
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-10-20 13:19:07 IP:61.63.xxx.xxx 未訂閱
引言: Dear m8815010, 我的專題就是用Mouse 上的Button 去控制 Office 系列產品 的放大與縮小阿^^ 而Office 正是利用Ctrl Wheel 去放大或縮小 所以我並不是要用Ap 去控制 放大,縮小 是要用滑鼠上的按鍵去控制^^ 所以請再指教一番^^
呃,套一句〝食神〞中的話:我真是搞不懂你呀…! 你的滑鼠--&
tglee
一般會員


發表:10
回覆:18
積分:5
註冊:2004-10-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-10-20 13:31:55 IP:61.220.xxx.xxx 未訂閱
Dear m8815010, MicroSoft 有一個Keyboard 叫Wireless Optical Comfort Keyboard 上有個拉 桿,他就是用Keyboard 上的拉桿去控制Office 系列的放大和縮小. 換句話說 ,我們的用意就是要用滑鼠上的按鍵去控制Office 產品的放大和縮小 這隻滑鼠可能是8 個鍵或10 個鍵,我們利用其中兩個鍵去控制放大和縮小 其他的按鍵去做mouse 的default function or programmable function. 您可以說他是噱頭,也可以稱他非常便利.. 市面上有很多週邊輸入裝置有這功能 ^^ 如有問題,請指教^^
tglee
一般會員


發表:10
回覆:18
積分:5
註冊:2004-10-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-10-20 15:52:18 IP:61.220.xxx.xxx 未訂閱
Dear m8815010, 我一直都沒想到使用mouse_event 這個方法 這樣就可以了..哈 ::keybd_event(VK_CONTROL,0,0,0); ::mouse_event(MOUSEEVENTF_WHEEL,0,0,120,0); ::keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); 不過可能我一直沒把問題說清楚,讓您一直傷腦經,還是非常非常 謝謝您的指導!!
系統時間:2024-05-06 3:23:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!