Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Hint in Image bei MouseMove anzeigen


Daniel L. - Sa 07.04.18 15:14
Titel: Hint in Image bei MouseMove anzeigen
Hi zusammen!

Ich möchte erreichen, dass beim Stehenbleiben des MausCursors über einem Image
ein Hint angezeit wird, der Mauskoordinatenbezogene Infos ausgibt.
Wird die Maus zu einer anderen Stelle im Image bewegt, soll dann der alte Hint ausgeblendet und
ein entsprechend neuer Hint angezeigt werden.
Cool wäre auch, wenn man den Hint per Mausclick wieder ausblenden könnte (ohne die Maus zu bewegen)


Ich hab einiges probiert mit OnMouseMove, CancelHint usw. aber nichts gescheites rausbekommen.

Danke für Tips -
Daniel L.


Delphi-Laie - Sa 07.04.18 15:29

"Maus stehenbleiben" ist nach meinem Wissen kein(em) Ereignis zugeordnet.

Vermutlich kommst Du mit einem Timer weiter. Der wird mit jedem Mousemove deaktiviert und anschließend akiviert. Nachdem er einmal ausgelöst hat, wird er wiederum deaktiviert.


Daniel L. - Sa 07.04.18 16:13

user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
"Maus stehenbleiben" ist nach meinem Wissen kein Ereignis zugeordnet.

Vermutlich kommst Du mit einem Timer weiter. Der wird mit jedem Mousemove deaktiviert und anschließend akiviert. Nachdem er einmal ausgelöst hat, wird er wiederum deaktiviert.


hm, folgendes hab ich probiert...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.FormCreate (Sender: TObject);
begin
  application.HintHidePause := 10000;    // Hint lange anzeigen
  Image1.ShowHint := true;
  timer1.Interval := 400;
end;


procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  application.CancelHint;
  //showHint := false;
  Image1.hint := IntToStr (x);
  timer1.Enabled := false;
  timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Hint anzeigen...?
  showhint := true;
end;


CanceHint funktioniert, aber wie lässt dich der Hint erneut anzeigen?


Delphi-Laie - Sa 07.04.18 16:52

user profile iconDaniel L. hat folgendes geschrieben Zum zitierten Posting springen:
CanceHint funktioniert, aber wie lässt dich der Hint erneut anzeigen?


An gleicher Mausposition gar nicht. Erst, wenn die Maus wiederum bewegt wird, setzt die Ereigniskaskade erneut ein.

Außerdem müßtest Du showhint entweder beim Anzeigen des Hints oder spätestens beim nächsten Mousemove wieder einnullen, d.h., auf false setzen.

Zudem hast Du nicht, wie ich es empfahl, den Timer in der Timerprozedur "disabled" (mit aktiv und deaktiv weiter oben meinte ich natürlich enabled und disabled) gesetzt.


Daniel L. - Sa 07.04.18 17:28

sorry, ich verstehe dich glaub ich nicht ganz.

meinst du


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.FormCreate (Sender: TObject);
begin
  application.HintHidePause := 10000;    // Hint lange anzeigen
  Image1.ShowHint := true;
  timer1.Interval := 400;
end;


procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  //application.CancelHint;
  showHint := false;
  Image1.hint := IntToStr (x);
  timer1.Enabled := false;
  timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Hint anzeigen...?
  showhint := true;
  timer1.Enabled := false;
end;


mit showhint := false lässt sich der Hint nicht sofort ausblenden,
man muss erst das Control mit der Maus verlassen.


Delphi-Laie - Sa 07.04.18 17:52

Doch, Du hast mich sehr wohl verstanden. Jedenfalls sind jetzt meine Anregungen alle enthalten.

Wenn das jetzt noch nicht wie gewünscht funtiontiert, bin ich jetzt mit meinem Latein auch erst mal am Ende. Funktioniert es wenigstens besser als zuvor?

Mit einem Image.ShowHint hatte ich noch nie zu tun, deshalb wäre ein kleines Referenzprojekt ganz hilfreich. Könntest Du eines hier veröffentlichen? Falls ja, dann bitte eines für eine möglichst niedrige Delphiversion.

Alternativ können wir warten, bis jemand sich meldet, der besser als meine Wenigkeit helfen kann. Frühlingsrolle und jaenicke z.B. sind solche Experten, die eigentlich zu jedem (nicht nur Delphi-)Problem irgendeine substantielle Hilfe parathaben.


Delete - Sa 07.04.18 18:13

- Nachträglich durch die Entwickler-Ecke gelöscht -


Daniel L. - Sa 07.04.18 18:44

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:

Sei kreativ und probier's einfach mal aus. ;)


bin schon dabei...

Danke an euch,

Daniel