Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TBallonHint gezielt anzeigen / ausblenden (https://www.delphipraxis.net/188455-tballonhint-gezielt-anzeigen-ausblenden.html)

BigAl 5. Mär 2016 11:20

TBallonHint gezielt anzeigen / ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
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:

Anhang 44900

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

Uwe Raabe 5. Mär 2016 11:32

AW: TBallonHint gezielt anzeigen / ausblenden
 
Ich habe sowas in der Art hier laufen. Der BalloonHint heißt bei mir
Delphi-Quellcode:
DispHint
und ich speichere mir die letzte Position noch in einer Variablen
Delphi-Quellcode:
DispHintPos: TPoint
ab. Darauf aufbauend kann ich den Hint mit zwei Methoden ein- und ausschalten.

Delphi-Quellcode:
procedure TFrEditor3DGraphic.ShowDispHint(const HintTitle, HintDescription: string; const HintPos: TPoint);
begin
  if (HintTitle <> DispHint.Title) or
     (HintDescription <> DispHint.Description) or
     (HintPos.X <> DispHintPos.X) or
     (HintPos.Y <> DispHintPos.Y) then begin
    DispHint.HideHint;
    DispHint.Title := HintTitle;
    DispHint.Description := HintDescription;
    DispHintPos := HintPos;
    if (Length(HintTitle) > 0) then
      DispHint.ShowHint(PaintBox.ClientToScreen(HintPos));
  end;
end;

procedure TFrEditor3DGraphic.ClearHint;
begin
  DispHint.HideHint;
  DispHint.Title := '';
  DispHint.Description := '';
end;

BigAl 5. Mär 2016 11:58

AW: TBallonHint gezielt anzeigen / ausblenden
 
Hallo Uwe,

funktioniert. Keine Ahnung warum das bei mir nicht ging. Hatte da schon eine ähnliche Lösung.

VIELEN DANK!

Alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz