線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:981
推到 Plurk!
推到 Facebook!

关于HANDLE的一个疑问!

答題得分者是:shaofu
xiaoning79627
初階會員


發表:46
回覆:60
積分:26
註冊:2002-11-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-15 12:58:26 IP:218.16.xxx.xxx 未訂閱
各位先进,我最近在用SetCaptureControl时发现在VCL中的定义 [CODE] procedure SetCaptureControl(Control: TControl); begin ReleaseCapture; CaptureControl := nil; if Control <> nil then begin if not (Control is TWinControl) then begin if Control.Parent = nil then Exit; CaptureControl := Control; Control := Control.Parent; end; SetCapture(TWinControl(Control).Handle);//请留意这 end; end; 我用SetCapture(TWinControl(Image1).Handle)不会出错,TIMAGE不属于TWinControl,为什么可以这样用,此时的Handle代表什么?谢谢 發表人 - xiaoning79627 於 2003/07/15 14:41:05
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-15 13:39:43 IP:147.8.xxx.xxx 未訂閱
The way you type cast will not check for type compatibility, and you can even do this: TWinControl(pointer(1)).Handle. The handle returned of course is invalid (or access violation in some cases). If you want type checking, you can use as: (AObject as TWinControl).Handle. The simple answer to your original question is: The handle returned is invalid.
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-15 13:45:42 IP:210.243.xxx.xxx 未訂閱
TWinControl(Image1).Handle 這行是錯的,     Image1 並不是 TWinControl, 這樣等於是強迫轉型,  Delphi 並不會幫你檢查錯誤.... 就如同 TStrings(Image1).Text 一樣 Complier 會過... 一般物件間轉換比較好的寫法是用 as 或 is, 請查 Help  因此, 這個時後的
xiaoning79627
初階會員


發表:46
回覆:60
積分:26
註冊:2002-11-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-15 14:54:59 IP:218.16.xxx.xxx 未訂閱
谢谢两位的回复,让小弟又明白了一些
系統時間:2024-04-30 3:59:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!