Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Balloon ToolTip positions problem (https://www.delphipraxis.net/191933-balloon-tooltip-positions-problem.html)

EWeiss 5. Mär 2017 15:33


Balloon ToolTip positions problem
 
Ich erstelle einen Balloon Tooltip.
Wenn ich meine Trackbar verschiebe Horizontal wird der Tip korrekt angezeigt.
Verschiebe ich aber die Vertikale habe ich Probleme wenn ich die Trackbar noch oben bewege.
Nach unten funktioniert alles.

Kann man bestimmen wo der Balloon Tip angezeigt werden soll? Über oder unter der Maus Position?
Solange wie sich die Position des Ballon Tip über der Maus (bzw. der Trackbar) befindet funktioniert alles.

EDIT:
Hab mal ein paar Pics addiert
Vertikal nach oben (wird kein Tip mehr angezeigt)
Ich denke es liegt daran weil sich der Tip nicht unter die Trackbar beim verschieben setzen kann.

gruss

himitsu 5. Mär 2017 15:49

AW: Balloon ToolTip positions problem
 
Wenn du hoch gehst, dann schiebst du die Maus über den Balloon.
Da reagiert natürlich das MouseOver des BalloonTipps und nicht das deiner TrackBar.

* der BalloonTip darf garnicht auf Mausereignisse reagieren (quasi Durchklickbar)
* der BalloonTip reicht die Ereignisse eine Ebene nach unten weiter
* der BalloonTip muß halt bissl entfernt platziert werden (hilft nichts, wenn die Maus schneller verschoben wird, als er reagiert)
* ...

Uwe Raabe 5. Mär 2017 16:04

AW: Balloon ToolTip positions problem
 
Kannst du denn Balloon nicht einfach links/rechts neben den vertikalen Trackbar platzieren. Rein topologisch entspricht das doch dem horizontalen Fall.

EWeiss 5. Mär 2017 16:10

AW: Balloon ToolTip positions problem
 
Zitat:

Zitat von himitsu (Beitrag 1363237)
Wenn du hoch gehst, dann schiebst du die Maus über den Balloon.
Da reagiert natürlich das MouseOver des BalloonTipps und nicht das deiner TrackBar.

* der BalloonTip darf garnicht auf Mausereignisse reagieren (quasi Durchklickbar)
* der BalloonTip reicht die Ereignisse eine Ebene nach unten weiter
* der BalloonTip muß halt bissl entfernt platziert werden (hilft nichts, wenn die Maus schneller verschoben wird, als er reagiert)
* ...

Nun ja das ist mir bekannt löst aber nicht mein Problem.

Ich bin jetzt auf diese Message gestoßen
Tut sich aber auch nichts.
Eigentlich sollte mit dem Flag TTM_TRACKPOSITION der Balloon Tip unter der Trackbar gezeichnet werden tut's aber nicht.

Delphi-Quellcode:
SetToolTipText(WinHandle, PWideChar(IntToStr(tVal)), x, -y);


Hmmmm.. vielleicht muss ich dafür den Rect vorher berechnen und diesen übergeben.

gruss

EWeiss 5. Mär 2017 17:05

AW: Balloon ToolTip positions problem
 
Zitat:

Wenn du hoch gehst, dann schiebst du die Maus über den Balloon.
Da reagiert natürlich das MouseOver des BalloonTipps und nicht das deiner TrackBar.
Eigentlich unmöglich!
Weil ich die Trackbar einfange.. mit SetCapture die Maus kann sich also niemals über den Balloon Tip schieben.


Habe es jetzt so gelöst.

Delphi-Quellcode:
procedure SetToolTipText(hObj: HWND; skText: PWideChar; Show: Integer; Update: Bool = False); overload;
var
  hTooltip: HWND;
  ti:      TToolInfo;
  Bol:     Boolean;

begin

  hTooltip := ToolTipData(0, 0);
  ZeroMemory(@ti, SizeOf(TToolInfo));

  Fillchar(ti, sizeof(TToolInfo), #0);
  if hTooltip <> 0 then
  begin
    ti.cbSize  := sizeof(TToolInfo);
    ti.hinst   := SkinEngine.skInstance;
    ti.uFlags  := TTF_IDISHWND or TTF_SUBCLASS;
    ti.hWnd    := GetParent(hObj);
    ti.uId     := hObj;
    Bol        := Length(ti.lpszText) <> 0;
    ti.lpszText := PWideChar(skText);
    if Bol or Update then
      SendMessageW(hTooltip, TTM_ADDTOOLW, 0, LParam(@ti))
    else
    SendMessageW(hTooltip, TTM_UPDATETIPTEXT, 0, LParam(@ti));
    SendMessageW(hTooltip, TTM_TRACKACTIVATE, Show, LParam(@ti));

    SkinEngine.SetZorder(hTooltip, HWND_TOPMOST);
  end;
end;
Delphi-Quellcode:
    if not (TrackOrientation(WinHandle) = TRACK_HORZ) then
      SetToolTipText(WinHandle, PWideChar(IntToStr(tVal)), Ord(True))
    else
    SetToolTipText(WinHandle, PWideChar(IntToStr(tVal)));
und in WM_LBUTTONUP
Delphi-Quellcode:
SetToolTipText(WinHandle, PWideChar(sOldTip), Ord(False))


Ob es das wahre ist mag dahingestellt sein.
Es funktioniert erst mal und der Tip wird wie vorher über der Trackbar angezeigt beim hoch und runterfahren.

TTM_TRACKPOSITION konnte ich mir sparen. ;)
Gewonnen hat! TTM_TRACKACTIVATE.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 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