Seite 1 von 1

ToolTip eines Gadget ändern

Verfasst: 08.09.2006 10:25
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

Verfasst: 08.09.2006 10:50
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
  

Verfasst: 08.09.2006 23:24
von HeX0R
Wieso geht diese Art des Tooltipps eigentlich nicht mehr, sobald man xp-skin-unterstützung aktiviert hat ?

Verfasst: 17.09.2006 09:56
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??