Kylix
Tips

NEW TIPS
Database (90)
Files (138)
Forms (107)
Graphic (116)
IDE (21)
Indy (5)
Internet / LAN (131)
IntraWeb (0)
Math (76)
Misc (127)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (268)
VCL (243)

Search Tip
Top15
Add new Tip

Forum

...draw a highlight box around the control under the mouse?
Author: Borland Delphi How To
[ Print tip ]    

Tip Rating (18):  
     






 {
  This tip might be useful if you want to program
  a screen capture tool and show a bounding box
  around a control or for a spy tool like winsight to
  highlight a object on the screen.
}

{
  Dieser Tipp könnte vielleicht nützlich sein, wenn
  man einen Printscreen machen möchte und das Control
  unter der Maus hervorheben möchte. Auch für ein Spy
  Programm könnte man diese Funktion gebrauchen, um
  ein bestimmtes Control hervorzuheben (siehe Winsight)
}

var
 
hOldWnd :HWND;

procedure FrameWindow(Wnd: HWnd);
var
  
Rect: TRect;
  DC: hDC;
  OldPen, Pen: hPen;
  OldBrush, Brush: hBrush;
  X2, Y2: Integer;
begin
  
{ Get the target window's rect and DC }
  
GetWindowRect(Wnd, Rect);
  DC := GetWindowDC(Wnd);
  { Set ROP appropriately for highlighting }
  
SetROP2(DC, R2_NOT);
  { Select brush and pen }
  
Pen := CreatePen(PS_InsideFrame, 4, 0);
  OldPen := SelectObject(DC, Pen);
  Brush := GetStockObject(Null_Brush);
  OldBrush := SelectObject(DC, Brush);
  { Set dimensions of highlight }
  
X2 := Rect.Right - Rect.Left;
  Y2 := Rect.Bottom - Rect.Top;
  { Draw highlight box }
  
Rectangle(DC, 0, 0, X2, Y2);
  { Clean up }
  
SelectObject(DC, OldBrush);
  SelectObject(DC, OldPen);
  ReleaseDC(Wnd, DC);
  { Do NOT delete the brush, because it was a stock object }
  
DeleteObject(Pen);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  
hNewWnd: HWnd;
begin
  
hNewWnd := WindowFromPoint(Mouse.CursorPos);
  { To avoid flickering, remove the old frame ONLY if moved to new window }
  
if hNewWnd <> hOldWnd then
  begin
    if 
hOldWnd <> 0 then
      
FrameWindow(hOldWnd);
    if hNewWnd <> 0 then
      
FrameWindow(hNewWnd);
    hOldWnd := hNewWnd;
  end;
end;

Rate this tip:

poor
very good


Copyright  Torry's Delphi Pages Torry's Delphi Pages Maintained by Simon Grossenbacher Notes? Comments? Feel free to send... Copyright 1996-2001