Seite 1 von 1

API Spinnt ....

Verfasst: 30.01.2005 12:35
von Lukaso
Hallo,

ich habe ein großes Problem mit der WinApi bei BalloonToolTips und denke das dieses Problem auch nicht so einfach lösbar sein wird ...

Also, ich habe auf das Window von meinem Player ein BalloonToolTip gelegt für leute die Infos über das aktuelle Lied möchten fahren mit der Maus einfach auf das Fenster. Nun muß ich das BalloonToolTip immer bei einem neuen lied updaten.

Ich erstelle das BalloonToolTip mit volgendem Code:

Code: Alles auswählen

Procedure BalloonTipWindow(windowID, balloonText$, balloonTitle$, balloonIcon)
  hBalloonTip = CreateWindowEx_(0, "ToolTips_Class32", "", #WS_POPUP | #TTS_NOPREFIX, 0, 0, 0, 0, 0, 0, GetModuleHandle_(0), 0) 
  SendMessage_(hBalloonTip, #TTM_SETTIPTEXTCOLOR, RGB(0, 0, 0), 0)
  SendMessage_(hBalloonTip, #TTM_SETTIPBKCOLOR, RGB(150, 150, 150), 0)
  Balloon.TOOLINFO\cbSize = SizeOf(TOOLINFO) 
  Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hwnd = WindowID(windowID)
  Balloon\uId = WindowID(windowID)
  Balloon\lpszText = @balloonText$
  SendMessage_(hBalloonTip, #TTM_ADDTOOL, 0, Balloon) 
  SendMessage_(hBalloonTip, #TTM_SETDELAYTIME, #TTDT_AUTOPOP, 10000) 
  If balloonTitle$ > ""
    SendMessage_(hBalloonTip, #TTM_SETTITLE, balloonIcon, @balloonTitle$)
  EndIf 
EndProcedure
Nach einem Tip von Falko konnte ich das Aktuelle BalloonToolTip löschen:

Code: Alles auswählen

Procedure DelBalloonTipWindow(windowID) 
  Balloon.TOOLINFO\cbSize = SizeOf(TOOLINFO) 
  Balloon\hwnd = WindowID(windowID) 
  Balloon\uId = WindowID(windowID) 
  SendMessage_(hBalloonTip, #TTM_DELTOOL, 0, Balloon) 
EndProcedure 
Dabei gab es allerdings das Problem, dass das BalloonToolTip nach einiger Zeit nicht mehr gelöscht wurde und ich beim MouseOver 2 ToolTips angezeigt bekam. Ich habe in der MSSDK gestöbert und volgenden code daraus gewonnen:

Code: Alles auswählen

Procedure UpdateBalloonTipWindow(windowID, balloonText$) 
  Balloon.TOOLINFO\cbSize = SizeOf(TOOLINFO) 
  Balloon\hwnd = WindowID(windowID) 
  Balloon\uId = WindowID(windowID) 
  Balloon\lpszText = @balloonText$ 
  SendMessage_(hBalloonTip, #TTM_UPDATETIPTEXT, 0, Balloon) 
EndProcedure 
Damit musste ich nicht immer das alte löschen. Ich dachte damit klappts, aber auch daraus wurde nix. Nach einiger zeit wurde dass ToolTip dann nicht mehr Upgedatet .....

Solangsam bin ich mit meinem Latein am ende .... liegt dass jetzt an PB oder an der WinAPI??

Danke :allright:

Lukaso :)

Verfasst: 31.01.2005 00:58
von ChaOsKid
Hi Lukaso,

ich konnte kein problem feststellen :)

Code: Alles auswählen

Global Balloon.TOOLINFO, hBalloonTip.l, Quit.l
;/
Procedure BalloonTipWindow(windowID, balloonText$, balloonTitle$, balloonIcon)
  hBalloonTip = CreateWindowEx_(0, "ToolTips_Class32", "", #WS_POPUP | #TTS_NOPREFIX, 0, 0, 0, 0, 0, 0, GetModuleHandle_(0), 0)
  SendMessage_(hBalloonTip, #TTM_SETTIPTEXTCOLOR, RGB(0, 0, 0), 0)
  SendMessage_(hBalloonTip, #TTM_SETTIPBKCOLOR, RGB(150, 150, 150), 0)
  Balloon\cbSize = SizeOf(TOOLINFO)
  Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hwnd = WindowID(windowID)
  Balloon\uID = WindowID(windowID)
  Balloon\lpszText = @balloonText$
  SendMessage_(hBalloonTip, #TTM_ADDTOOL, 0, Balloon)
  SendMessage_(hBalloonTip, #TTM_SETDELAYTIME, #TTDT_AUTOPOP, 10000)
  If balloonTitle$ > ""
    SendMessage_(hBalloonTip, #TTM_SETTITLE, balloonIcon, @balloonTitle$)
  EndIf
EndProcedure
;/
Procedure UpdateBalloonTipWindow(windowID, balloonText$)
  Balloon\cbSize = SizeOf(TOOLINFO)
  Balloon\hwnd = WindowID(windowID)
  Balloon\uID = WindowID(windowID)
  Balloon\lpszText = @balloonText$
  SendMessage_(hBalloonTip, #TTM_UPDATETIPTEXT, 0, Balloon)
EndProcedure
;/
Procedure changetext()
  Repeat
    Zeit = ElapsedMilliseconds()
    If Timer < Zeit
      UpdateBalloonTipWindow(0, Str(Zeit))
      Timer = Zeit + 1000
    EndIf
    Delay(20)
  Until Quit
EndProcedure
;/

OpenWindow(0,0,0,300,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"GadgetTooltip")
BalloonTipWindow(0, "huhu", "test", 0)
CreateThread(@changetext(), 0)
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Quit = 1
  EndSelect
Until Quit
mfG
Tobi