我正试图在我开发多年的Apprehend屏幕捕获组件中绘制一个聚焦矩形,以便围绕所选屏幕对象。我可以通过使用Handles:=WindowFromPoint(P)获取到鼠标下的对象的句柄来DrawFocusRect,但这需要我隐藏并显示自身才能工作,否则会返回自身的句柄。
不幸的是,当我隐藏和显示窗体时,它会导致闪烁。
我可以轻松地获取所选对象的位图,只是绘制所选对象让我抓狂了。
有人有任何建议来绘制一个FocusedRect围绕所选对象,以便没有闪烁吗?是否有任何API可以获取屏幕的句柄,如果一个窗体在其上方?
我尝试使用Handles:=WindowFromDC(ScreenDC),这样我就不必隐藏和显示窗体了,但WindowFromDC仍然返回窗体而不是屏幕。
TCaptureObjectForm是透明的,覆盖在屏幕上。我需要TCaptureObjectForm在组件中。
// FormMouseMove事件 - 添加于08/2/2011
不幸的是,当我隐藏和显示窗体时,它会导致闪烁。
我可以轻松地获取所选对象的位图,只是绘制所选对象让我抓狂了。
有人有任何建议来绘制一个FocusedRect围绕所选对象,以便没有闪烁吗?是否有任何API可以获取屏幕的句柄,如果一个窗体在其上方?
我尝试使用Handles:=WindowFromDC(ScreenDC),这样我就不必隐藏和显示窗体了,但WindowFromDC仍然返回窗体而不是屏幕。
TCaptureObjectForm是透明的,覆盖在屏幕上。我需要TCaptureObjectForm在组件中。
// FormMouseMove事件 - 添加于08/2/2011
procedure TCaptureObjectForm.FormMouseMove( Sender: TObject; Shift: TShiftState; X, Y: Integer );
const
crHand = -18;
var
P: TPoint;
Handles: HWND;
Rect: TRect;
ScreenDC: HDC;
begin
// hide the TCaptureObjectForm form so the screen is found by WindowFromPoint
Self.Hide;
// get the object on the screen
GetCursorPos( P );
Handles := WindowFromPoint( P );
// tried this but it returns self.handle rather than the screen handle
//ScreenDC := GetDC( 0 );
//Handles := WindowFromDC(ScreenDC);
//ReleaseDC( 0, ScreenDC );
// restore the TCaptureObjectForm
Self.Show;
// get object rect
GetWindowRect( Handles, Rect );
// draw a rect to show it is focused
Self.Canvas.DrawFocusRect( Rect );
end;