Autor Beitrag
Daniel L.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125
Erhaltene Danke: 1

W7, W8
D7, TurboD Prof, Delphi 10.1 Starter
BeitragVerfasst: Sa 07.04.18 14:14 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1567
Erhaltene Danke: 221


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 07.04.18 14: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.

_________________
Ordnung ist das halbe Leben - und sie zu schaffen die andere Hälfte.


Zuletzt bearbeitet von Delphi-Laie am Sa 07.04.18 18:16, insgesamt 1-mal bearbeitet
Daniel L. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125
Erhaltene Danke: 1

W7, W8
D7, TurboD Prof, Delphi 10.1 Starter
BeitragVerfasst: Sa 07.04.18 15: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...

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1567
Erhaltene Danke: 221


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 07.04.18 15: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.

_________________
Ordnung ist das halbe Leben - und sie zu schaffen die andere Hälfte.
Daniel L. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125
Erhaltene Danke: 1

W7, W8
D7, TurboD Prof, Delphi 10.1 Starter
BeitragVerfasst: Sa 07.04.18 16:28 
sorry, ich verstehe dich glaub ich nicht ganz.

meinst du

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1567
Erhaltene Danke: 221


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 07.04.18 16: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.

_________________
Ordnung ist das halbe Leben - und sie zu schaffen die andere Hälfte.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2132
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 07.04.18 17:13 
Guten Tag Daniel L.,

so richtig "anpassen", lässt sich die Hint-Eigenschaft nicht, außer man überschreibt sie komplett und reagiert dabei auf die entsprechenden Windows Messages.
Eine Idee wäre, einen Tooltip auszugeben, so wie es hier beschrieben ist.
Problem dabei ist, die Methode benötigt ein Fenster-Handle, welches die Klasse TImage nicht hat, da sie von TGraphicControl <- TControl abstammt.
Die andere Idee, schreib eine eigene Hint-Klasse!
Dafür könntest du von der Klasse THintWindow ableiten, oder von z.B. TCustomControl (hat eine Paint-Methode im Gegensatz zu TWinControl), und erweiterst diese um eine "ShowHint"-Methode:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
// dlgRect = Der Rechtecks-Bereich, der samt Text angezeigt wird
// AText = Jener Text, der ausgegeben werden soll
// Show = Soll den Dialog anzeigen, oder nicht
procedure ShowHint(dlgRect: TRect; const AText: string; Show: Boolean = true);

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

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Daniel L. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125
Erhaltene Danke: 1

W7, W8
D7, TurboD Prof, Delphi 10.1 Starter
BeitragVerfasst: Sa 07.04.18 17: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