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

如何讓游標在"非主視窗"時,也能將所在座標的RGB值傳回?

答題得分者是:ChungLin.Net
howdz
一般會員


發表:17
回覆:12
積分:5
註冊:2003-12-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-02-12 22:07:15 IP:61.229.xxx.xxx 訂閱
我想用三個Label來分別顯示滑鼠游標所在位置的R、G、B值;
滑鼠在Form的範圍內時,可以正常顯示,會隨著MouseMove而改變值;
但是一離開Form的範圍就不會隨著改變了,

請問,要用哪個function才能取得螢幕上《非主視窗》的RGB值、並讓它顯示在Form的Label上呢?
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-02-12 22:12:37 IP:211.22.xxx.xxx 未訂閱
這個問題應該要用Windows Hook來解決,看看這兩篇吧!
http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=22389
http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=79184
howdz
一般會員


發表:17
回覆:12
積分:5
註冊:2003-12-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-02-13 08:29:23 IP:61.221.xxx.xxx 訂閱
非常感謝您提供的資料,正在研究中...
謝謝。
ChungLin.Net
中階會員


發表:2
回覆:33
積分:52
註冊:2006-07-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-02-13 09:21:29 IP:59.120.xxx.xxx 訂閱
以前寫的小程式,不知有沒符合你的需求 需要二個 StaticText 取名為 stXY , stRGB  一個 Bevel 取名為 blPattern 一個 Timer , 將下面程式段放於 Timer 中執行,Timer Interval 值設為10
<textarea class="cpp" rows="10" cols="60" name="code"> POINT xy; if(GetCursorPos(&xy)) { Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Bmp->Width=1; Bmp->Height=1; StretchBlt(Bmp->Canvas->Handle,0,0,1,1,GetDC(0),xy.x,xy.y,1,1,SRCCOPY); TColor ptr=(TColor)Bmp->Canvas->Pixels[0][0]; this->Canvas->Brush->Color = (TColor)RGB((ptr & 0x000000FF),(ptr & 0x0000FF00) >> 8,(ptr & 0x00FF0000) >> 16); this->Canvas->FillRect(Rect(blPattern->Left 1,blPattern->Top 1,blPattern->Width blPattern->Left - 1,blPattern->Height blPattern->Top - 1)); stXY->Caption = stXY->Caption.sprintf("座標:(M,M)",xy.x,xy.y); stRGB->Caption = stRGB->Caption.sprintf("R:%d G:%d B:%d",(ptr & 0x000000FF) ,(ptr & 0x0000FF00) >> 8 ,(ptr & 0x00FF0000) >> 16); delete Bmp; } </textarea>
------
無限的想像,無盡的延伸。
howdz
一般會員


發表:17
回覆:12
積分:5
註冊:2003-12-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-13 21:43:13 IP:61.229.xxx.xxx 訂閱
非常感謝 ChungLin.Net 板友!
您的程式正是我需要的功能,
正在熟悉GetDC的相關應用中....

感謝大家的指教! <( _ _ )>

ChungLin.Net
中階會員


發表:2
回覆:33
積分:52
註冊:2006-07-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-02-14 10:04:35 IP:59.120.xxx.xxx 訂閱
發現一個 API 可以把程式寫的簡單一點

<textarea class="cpp" rows="10" cols="60" name="code"> POINT xy; if(GetCursorPos(&xy)) { COLORREF cRGB = GetPixel(GetDC(0),xy.x,xy.y); this->Canvas->Brush->Color = cRGB; this->Canvas->FillRect(Rect(blPattern->Left 1,blPattern->Top 1,blPattern->Width blPattern->Left - 1,blPattern->Height blPattern->Top - 1)); stXY->Caption = stXY->Caption.sprintf("座標:(M,M)",xy.x,xy.y); stRGB->Caption = stRGB->Caption.sprintf("R:%d G:%d B:%d",(cRGB & 0x000000FF) ,(cRGB & 0x0000FF00) >> 8 ,(cRGB & 0x00FF0000) >> 16); } </textarea>
------
無限的想像,無盡的延伸。
系統時間:2024-04-30 1:40:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!