@shareholder:
Habe hier eine Lösung ohne Verzögerung, die zumindest funktioniert. Ob sie Dir gefällt, musst Du dann entscheiden. Habe als Control eine Paintbox genommen, da Du was von Canvas geschrieben hast, geht aber mit allen Nachfahren von TControl.
Delphi-Quellcode:
// Die bestehende Paintbox erweitern:
Type TMyPaintBox = Class(TPaintBox)
public
Procedure CMMOUSELEAVE(Var Message: TMessage); message CM_MOUSELEAVE;
End;
// Formulardeklaration
...
public
...
HintWindow: THintWindow;
...
implementation
{$R *.DFM}
// in FormCreate das HintWindow und die Paintbox erstellen. Paintbox in die rechte untere Ecke des Formulars
procedure TForm1.FormCreate(Sender: TObject);
begin
HintWindow := THintWindow.Create(Self);
MyPaintBox := TMyPaintBox.Create(Self);
MyPaintBox.Parent := Self;
MyPaintBox.Top := ClientHeight-MyPaintBox.Height;
MyPaintBox.Left := ClientWidth-MyPaintBox.Width;
MyPaintBox.OnMouseMove := PBMouseMove;
// beides in FormDestroy wieder freigeben!
end;
// bei Mausbewegungen auf der Paintbox entsprechenden Hint ausgeben
procedure TForm1.PBMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var ScreenPoint: TPoint;
begin
// Koordinaten umwandeln
ScreenPoint := (Sender as TControl).ClientToScreen(Point(x,y));
// Hint ausgeben
HintWindow.ActivateHint(Rect(ScreenPoint.x,ScreenPoint.y-20,ScreenPoint.x+100,ScreenPoint.y),'Position: '+IntToStr(x)+' / '+IntToStr(y));
end;
// Beim Verlassen der Paintbox HintWindow ausschalten
procedure TMyPaintBox.CMMOUSELEAVE(Var Message: TMessage);
begin
TForm1(Parent).HintWindow.ReleaseHandle;
inherited;
end;
Gruß, teebee