whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1548)

Database (90)
Files (137)
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)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

23 Visitors Online


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

Tip Rating (21):  
     





 {
  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 © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners