API Spinnt ....

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

API Spinnt ....

Beitrag 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 :)
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
ChaOsKid
Beiträge: 66
Registriert: 29.08.2004 15:07
Wohnort: Oktoberfest

Beitrag 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
Antworten