Thema: Delphi Hints... egal wo!

Einzelnen Beitrag anzeigen

teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#18

Re: Hints... egal wo!

  Alt 20. Mai 2005, 14:34
@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
  Mit Zitat antworten Zitat