Mega Code Archive

 
Categories / Delphi / Examples
 

Trap the OnEnter and OnLeave events

Title: Trap the OnEnter and OnLeave events. Question: This code shows how to get the OnEnter and OnLeave event from components without changing the component. Answer: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } FFocusControl: TControl; procedure ApplicationIdle(Sender: TObject; var Done: Boolean); public { Public declarations } procedure OnEnter(Sender: TObject); procedure OnExit(Sender: TObject); end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin FFocusControl := nil; Application.OnIdle := ApplicationIdle; end; procedure TForm1.FormDestroy(Sender: TObject); begin Application.OnIdle := nil; end; procedure TForm1.ApplicationIdle(Sender: TObject; var Done: Boolean); var CurControl: TControl; P: TPoint; begin GetCursorPos(P); CurControl := FindDragTarget(P, True); if FFocusControl CurControl then begin if FFocusControl nil then OnExit(FFocusControl); FFocusControl := CurControl; if FFocusControl nil then OnEnter(FFocusControl); end; end; procedure TForm1.OnEnter(Sender: TObject); begin //OnEnter code If sender=Button1 then begin Label1.caption:='Hello'; Button1.Caption:='Exit'; end; end; procedure TForm1.OnExit(Sender: TObject); begin //OnExit code If sender=Button1 then begin Label1.caption:='Godbye'; Button1.Caption:='Enter'; end; end; end.