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

關於SetCapture API問題

尚未結案
liouville
一般會員


發表:4
回覆:4
積分:1
註冊:2003-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-20 14:52:34 IP:211.20.xxx.xxx 未訂閱
在練習一個範例程式時,看到一個函式,setcapture API函式 看了說明文件,只知道他是補捉滑鼠訊息的,但搞不懂差別在哪? 那個範例程式是在一個form上用canvas畫一個矩形 利用滑鼠MouseDown 然後MouseMove 最後MouseUP以Down and UP 兩點的位置當對角線畫出一個矩形 書上是說如果沒有使用SetCapture函式的話,則程式不太可靠.他說當滑鼠移動 到其它的視窗放開滑鼠鍵時,則別的視窗會收到這個MouseUp訊息. 但是我把source codes裡的setcapture那行註解掉,發現結果都一樣 我一直以為沒使用setcapture則滑鼠拖曳到form的client區外會沒法畫 (因為MouseUp被其它視窗接收了),但現在看來並非如此... 所以我搞不太懂setcapture的用途到底是什麼?希望有高手可以幫我解答..
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-24 10:00:28 IP:203.95.xxx.xxx 未訂閱
參考這篇看看: http://forum.vclxx.org/topic.php?TOPIC_ID=15662&FORUM_ID=4&CAT_ID=2&Topic_Title=¦p¦D·ƹ«Â÷¶}¬Y¤@¤¸¥ó?&Forum_Title=VCL 或是利用 ktop 搜尋找 SetCapture 的關鍵字可以找到一些相關的資料!
brucetsao
一般會員


發表:1
回覆:33
積分:11
註冊:2002-09-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-29 12:39:56 IP:61.219.xxx.xxx 未訂閱
function savescreen(savescreenfilename:string):integer;stdcall;//抓取屏幕圖象并 var fullscreen:tbitmap; fullcanvas:tcanvas; dc:HDC; ret:integer; begin savescreenfilename:=strpas(pchar(savescreenfilename)); if not (directoryexists(extractfilepath(savescreenfilename))) then begin //路徑是否存在 ret:=2; end else begin DC:=getdc(0); //獲取屏幕handle,0為屏幕,1為活動窗體 fullcanvas:=tcanvas.Create; fullcanvas.Handle:=dc; fullscreen:=tbitmap.Create; fullscreen.Width:=screen.Width; //設置抓取圖片寬度 fullscreen.Height:=screen.Height; fullscreen.Canvas.CopyRect(rect(0,0,screen.Width,screen.Height),fullcanvas,rect(0,0,fullscreen.Width,fullscreen.Height)); //從畫布中copy抓圖片 try//保存文件 fullscreen.SaveToFile(savescreenfilename); ret:=0; //保存成功返回0 except ret:=1; //文件被lock傳回1 end; if not(fileexists(savescreenfilename)) then ret:=99; //成功保存后文件不存在返回99 fullcanvas.Free; fullscreen.Free; releasedc(dc,0); end; result:=ret; end;
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-29 14:11:58 IP:218.163.xxx.xxx 未訂閱
當滑鼠移動到其它的視窗放開滑鼠鍵時,則別的視窗會收到這個MouseUp訊息. 這就是問題所在 我一直以為沒使用setcapture則滑鼠拖曳到form的client區外會沒法畫 (因為MouseUp被其它視窗接收了),但現在看來並非如此... 並非如此, 沒有SetCapture, 你的程式仍可正常執行,然而卻影響了其他元件, 你可以試試看, 如果你在form上放一些其他元件, 並為這些元件寫入MouseUp, mousemove等Event, 你會發現一旦執行過你的功能, 不論mouse在什麼位置, 這些Event都會被Trigger 所以說是不太可靠而不是不能執行
系統時間:2024-05-11 1:57:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!