Hallo zusammen,
ich bin dabei eine Komponente zu erstellen (Delphi 10 Seattle, Windows 10). Meine Komponente ist von TCustomControl abgeleitet. Hier mal ein Ausschnitt der Zeichenfläche:
Ich möchte nun beim Überfahren bestimmter Bereiche (im Beispiel die Felder mit den unterstrichenen Zahlen) einen Hinweis anzeigen. Der Hinweis soll erscheinen, sobald sich die Maus innerhalb des Felds befindet und auch solange angezeigt werden, bis die Maus das Feld wieder verlässt. Es soll also ein Hint gezielt ein- und ausgeblendet werden.
Im ersten Schritt habe ich das mal mit "Hint := HintText" und beim Verlassen mit "Application.CancelHint" versucht. Das hat grundsätzlich funktioniert. Leider war die Formatierung nicht wie gewünscht und Hinweis wurde natürlich nach einer bestimmten Zeit wieder ausgeblendet. Die globale Einstellung hierzu möchte ich aber nicht verändern.
Nun habe ich einen "TBalloonHint" erstellt und diesem dem "CustomHint" der Komponente zugewiesen. Dieser wird aber beim ersten Mal gar nicht angezeigt. Die Anzeige erfolgt erst, nachdem ich die Komponente mit der Maus komplett verlassen habe und diese dann wieder auf die Fläche der Komponente bewege. Angezeigt wird der Hint dann aber immer nur am Rand der Komponente bzw. an dem Punkt, an dem die Maus beim Eintritt in die Komponentenfläche zum ersten mal erfasst wurde.
Die Anzeige des Hints erfolgt in "MouseMove" und wird etwa wie folgt durchgeführt:
Delphi-Quellcode:
procedure Txxx.MouseMove(Shift: TShiftState; X, Y: Integer);
var
I: Integer;
HintText: string;
begin
HintText := '';
if AreaAt(X, Y) = rgaDay then
begin
I := GetHolidayIndex(DateAt(X));
if I >= 0 then
HintText := DateToStr(GetDateAt(X)) + '|' + FHolidays[I].Description;
end;
// show hint
if HintText <> '' then
begin
Hint := HintText;
if Assigned(CustomHint) then
CustomHint.ShowHint(Mouse.CursorPos);
end
else
if Assigned(CustomHint) then
CustomHint.HideHint
else
Application.CancelHint;
end;
Das Ganze wurde auf das Wesentliche eingekürzt und sollte eigentlich selbsterklärend sein. Im Bereich ab "//show hint" habe ich schon alles Mögliche getestet. Leider hat bisher nichts zum Erfolg geführt. Ich möchte lediglich, dass der BalloonHint bei dem Feld angezeigt wird, sobald der Mauszeiger dieses berührt. Beim Verlassen des Bereichs soll der Hint dann wieder verschwinden.
Hat jemand vielleicht ein "Rezept" für das gezielte ein- und ausblenden von Hints? Im Internet (und auch hier im Forum) habe ich da nichts wirklich hilfreiches gefunden.
Danke schon mal für Eure Antworten.
Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)