AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TBallonHint gezielt anzeigen / ausblenden

Ein Thema von BigAl · begonnen am 5. Mär 2016 · letzter Beitrag vom 5. Mär 2016
Antwort Antwort
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#1

TBallonHint gezielt anzeigen / ausblenden

  Alt 5. Mär 2016, 12:20
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:

snip.png

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)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: TBallonHint gezielt anzeigen / ausblenden

  Alt 5. Mär 2016, 12:32
Ich habe sowas in der Art hier laufen. Der BalloonHint heißt bei mir DispHint und ich speichere mir die letzte Position noch in einer Variablen 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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: TBallonHint gezielt anzeigen / ausblenden

  Alt 5. Mär 2016, 12:58
Hallo Uwe,

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

VIELEN DANK!

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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