2008. november 10., hétfő
Trap the OnEnter and OnLeave events
Problem/Question/Abstract:
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.
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése