Trackbar-Gadget und Tooltip

Anfängerfragen zum Programmieren mit PureBasic.
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Trackbar-Gadget und Tooltip

Beitrag von Angelo »

Hallo,
ich habe im englischen Forum einen Code für ein Tooltip-Fenster gefunden:
http://www.purebasic.fr/english/viewtop ... ateToolTip
Ich habe ihn erweitert um ein Trackbar-Gadget. Außerdem habe ich ihn so verändert, dass jetzt das Tooltip-Fenster nur angezeigt wird, wenn der Mauszeiger im Bereich dieses Gadgets ist. Weiterhin ist die Anzeige im Fenster jetzt "dynamisch", ich lasse nämlich die aktuelle x-Position des Mauszeigers anzeigen, was genau das ist, was ich für mein Trackbar-Gadget haben will.
Der Code mit den gerade genannten Modifikationen sieht jetzt so aus:

Code: Alles auswählen

#TTF_TRANSPARENT=$100
#TTF_TRACK=$20
#TTF_ABSOLUTE=$80

Structure TOOLINFO1
  cbSize.l
  uFlags.l
  hwnd.l
  uID.l
  rect.RECT
  hInst.l
  lpszText.l
  lParam.l
EndStructure
; TOOLINFO in PB is false

Global hToolTip,ti.TOOLINFO

Procedure CreateToolTip(hParent)
     icex.INITCOMMONCONTROLSEX
     ti.TOOLINFO
     icex\dwSize = SizeOf(icex)
     icex\dwICC  = #ICC_WIN95_CLASSES
     
     InitCommonControlsEx_(@icex)
     
     sczTipText.s="x-position"
     sczTipTitle.s=""
     
     hToolTip = CreateWindowEx_(#WS_EX_TOPMOST, "ToolTips_Class32", "",#WS_POPUP| #TTS_NOPREFIX | #TTS_ALWAYSTIP,#CW_USEDEFAULT, #CW_USEDEFAULT,#CW_USEDEFAULT, #CW_USEDEFAULT, #Null,0, GetModuleHandle_(0),#Null)
  
     
     ti\cbSize = SizeOf(TOOLINFO)
     ti\uFlags = #TTF_IDISHWND | #TTF_TRACK | #TTF_ABSOLUTE ;| #TTF_TRANSPARENT
     ti\hwnd   = hParent
     ti\uId    = hParent
     ti\hinst  = GetModuleHandle_(0)
     ti\lpszText  = @sczTipText
     
     SendMessage_(hToolTip,#TTM_ADDTOOL,0,@ti)
     SendMessage_(hToolTip, #TTM_SETMAXTIPWIDTH, 0, 300)
     
     If sczTipTitle>""
          SendMessage_(hToolTip, #TTM_SETTITLE, 1, sczTipTitle)
     EndIf
     SendMessage_(hToolTip,#TTM_TRACKACTIVATE,1,@ti)
     
     ProcedureReturn hToolTip
     
EndProcedure
                                             


OpenWindow(0, 100, 100, 400, 300,  "ToolTip",#PB_Window_SystemMenu | #PB_Window_TitleBar)
   
TrackBarGadget(3, 50, 220, 300, 40, 0, 1000)
   
tooltip_visible.b = #False
     
Repeat
   EventID.l=WaitWindowEvent()
   Select EventID
      Case #WM_MOUSEMOVE
         ;Tooltipp auf den Bereich 60 < x < 340 | 210 < y < 250 beschränken:
         If tooltip_visible = #False And WindowMouseX(0) > 60 And WindowMouseX(0) < 340 And WindowMouseY(0) > 210 And WindowMouseY(0) < 250
            tt = CreateToolTip(WindowID(0))
            tooltip_visible = #True
         EndIf
         ;
         point.POINT\x=EventlParam()& $FFFF
         point.POINT\y=EventlParam() >>16
         ClientToScreen_(WindowID(0),@point)
         SendMessage_(hToolTip, #TTM_TRACKPOSITION, 0,((point\y+14)<<16)+point\x+14)
         SendMessage_(hToolTip, #TTM_SETTITLE, 1, Str(WindowMouseX(0)))
         ;
         ;Tooltipp entfernen, wenn Bereich 60 < x < 340 | 210 < y < 250 verlassen wird:
         If tooltip_visible = #True And ((WindowMouseX(0) < 60 Or WindowMouseX(0) > 340) Or (WindowMouseY(0) < 210 Or WindowMouseY(0) > 250))
            DestroyWindow_(tt)
            tooltip_visible = #False
         EndIf
   EndSelect
Until EventID = #PB_Event_CloseWindow	
Jetzt kommt mein Problem. Das Tooltip-Fenster "springt" unregelmäßig von einer Position unterhalb des Mauszeigers zu oberen Bereichen des Windows, wenn ich den Schieberegler des Trackbar-Gadgets verschiebe. Hat jemand eine Idee, wie man das in den Griff bekommen kann? Es würde mich auch interessieren, wie man die Größe des Tooltip-Fensters verändern kann. Thanks!
PB 5.50; Win 7
Axolotl
Beiträge: 279
Registriert: 31.12.2008 16:34

Re: Trackbar-Gadget und Tooltip

Beitrag von Axolotl »

Angelo hat geschrieben:...Jetzt kommt mein Problem. Das Tooltip-Fenster "springt" unregelmäßig von einer Position unterhalb des Mauszeigers zu oberen Bereichen des Windows, wenn ich den Schieberegler des Trackbar-Gadgets verschiebe. Hat jemand eine Idee, wie man das in den Griff bekommen kann? Es würde mich auch interessieren, wie man die Größe des Tooltip-Fensters verändern kann. Thanks!
Hi Angelo,
das Tooltip-Fenster springt, da EventlParam über dem TrackBarGadget "andere Werte" zurückgibt...
Einfach dies hier in den Case-Zweig einfügen und Fenstertitelzeile beobachten (Frame3D um TrackBar hilft beim Beobachten) :

Code: Alles auswählen

x = WindowMouseX(0) 
y = WindowMouseY(0) 
t$ = "WndMs:"+Str(x)+","+Str(y) 
x = EventlParam() & $FFFF
y = EventlParam() >> 16 
t$ + "  Event:"+Str(x)+","+Str(y)+"  "
x = point\x - 103 
y = point\y - 125 
t$ + "  Point:"+Str(x)+"x"+Str(y)+"  "
SetWindowTitle(0, t$)
Mit dieser Änderung sieht es ganz harmonisch aus (? -bei mir jedenfalls....)

Code: Alles auswählen

         ;SendMessage_(hToolTip, #TTM_TRACKPOSITION, 0,((point\y+14)<<16)+point\x+14) 
x = WindowMouseX(0) + 100
y = WindowMouseY(0) + 140
         SendMessage_(hToolTip, #TTM_TRACKPOSITION, 0,(y<<16)+x) 
Gruß Axolotl
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Angelo
Beiträge: 102
Registriert: 20.02.2010 14:47
Wohnort: Berlin

Re: Trackbar-Gadget und Tooltip

Beitrag von Angelo »

@Axolotl
Hab' Deinen Beitrag erst jetzt entdeckt. Du hast absolut recht: sieht harmonisch aus. Danke!
PB 5.50; Win 7
Antworten