Hallo,
eigentlich ist das der klassische Fall für das Erstellen eines eigenen TImage Nachfahren, der die Event's OnMouseEnter und OnMouseLeave bereitstellt.
Muss aber nicht sein. Man kann auch zur Laufzeit die Fensterprocedure austauschen.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 =
class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
FOldImageWndPorc : TWndMethod;
procedure DoMouseEnter;
procedure DoMouseLeave;
procedure NewWndProc(
var Msg : TMessage);
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.NewWndProc(
var Msg: TMessage);
begin
If (Msg.Msg=CM_MouseEnter)
and (Image1.Enabled)
then
DoMouseEnter;
If (Msg.Msg=CM_MouseLeave)
and (Image1.Enabled)
then
DoMouseLeave;
FOldImageWndPorc(Msg);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FOldImageWndPorc:=Image1.WindowProc;
Image1.WindowProc:=NewWndProc;
end;
procedure TForm1.DoMouseEnter;
begin
Label1.Caption:=IntToStr(StrToInt(Label1.Caption)+1);
end;
procedure TForm1.DoMouseLeave;
begin
Label2.Caption:=IntToStr(StrToInt(Label2.Caption)+1);
end;
end.
Die beiden Labels haben im Objektinspektor für Caption eine 0 bekommen