ToolTip eines Gadget ändern

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

ToolTip eines Gadget ändern

Beitrag von blbltheworm »

Hallo zusammen,
ich hab mir mit Hilfe des Codearchiv folgenden Code zur Anzeige von Tooltips gebastelt:

Code: Alles auswählen

Procedure BalloonTip(WindowID.l, Gadget.l, Text$ , Title$, Icon.l=#TOOLTIP_NO_ICON) 
Protected ToolTip.l
Protected Balloon.TOOLINFO
 
    ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0) 
    SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0) 
    SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0) 
    SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180) 
    With Balloon
      \cbSize=SizeOf(TOOLINFO) 
      \uFlags=#TTF_IDISHWND | #TTF_SUBCLASS 
      \hWnd=GadgetID(Gadget) 
      \uId=GadgetID(Gadget) 
      \lpszText=@Text$ 
    EndWith
    SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon) 
    If Title$ > "" 
      SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$) 
    EndIf 
EndProcedure 
Jetzt würde ich gerne wissen wie ich den Tooltip eines einzelnen Gadgets ändern kann, denn bei einem zweiten Aufruf der Funktion erhalte ich einen doppelten Tooltip.

Der Code müsste also so erweitert werden, dass überprüft wird ob zu diesem Gadget bereits ein Tipp existiert und wenn ja soll dieser zuerst gelöscht werden.

Aber wie machen
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

In etwa so (mehr dazu auf MSDN) :


Beispiel :

Code: Alles auswählen

  Global ToolTip.l
  
  Procedure BalloonTip(WindowID.l, Gadget.l, Text$ , Title$, Icon.l=#TOOLTIP_NO_ICON)
    Global ToolTip.l
    Protected Balloon.TOOLINFO
    
    SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
    SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
    SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
    With Balloon
      \cbSize=SizeOf(TOOLINFO)
      \uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
      \hwnd=GadgetID(Gadget)
      \uId=GadgetID(Gadget)
      \lpszText=@Text$
    EndWith
    SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
    If Title$ > ""
      SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
    EndIf
  EndProcedure 
  
  Procedure UpdateBalloonTip(WindowID.l, Gadget.l, Text$ , Title$, Icon.l=#TOOLTIP_NO_ICON)
    Protected Balloon.TOOLINFO
    
    With Balloon
      \cbSize=SizeOf(TOOLINFO)
      \uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
      \hwnd=GadgetID(Gadget)
      \uId=GadgetID(Gadget)
      \lpszText=@Text$
    EndWith
    
    SendMessage_(ToolTip, #TTM_UPDATETIPTEXT, 0, Balloon)
    
  EndProcedure
  
  
  hwnd = OpenWindow(0,0,0,100,100,"")
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,hwnd,0,GetModuleHandle_(0),0)
  
  CreateGadgetList(hwnd)
  
  ButtonGadget(0,0,0,20,20,"") 
  ButtonGadget(1,20,0,20,20,"")
  
  BalloonTip(hwnd, 0, "Blub" , "Info")
  UpdateBalloonTip(hwnd, 0, "Wichtig !!" , "Info")
  BalloonTip(hwnd, 1, "Blub" , "Info")
  
  
  Repeat
    
  Until WaitWindowEvent() = #WM_CLOSE
  
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Wieso geht diese Art des Tooltipps eigentlich nicht mehr, sobald man xp-skin-unterstützung aktiviert hat ?
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Beitrag von blbltheworm »

Danke für den Code, er tut.
Was man damit jedoch nicht machen kann ist den Titel des ToolTips ändern.
Auch das einfügen der Zeile:

Code: Alles auswählen

If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
bei UpdateBaloonTip() ändert nichts daran.

Und noch eine Frage:
Wie kann ich feststellen, ob ein Gadget bereits einen ToolTip besitzt??
Antworten