Page 1 sur 1

Problème avec GadgetTooltip

Publié : mar. 23/mars/2010 15:33
par MLD
Bonjour a tous

J'ai une fenêtre toujours au premier plan avec StikyWindow(id,1).
j'ai un bouton éloigné du bord de la fenêtre. le tooltip est sur le bouton.
Dans ce cas l'étiquette du tooltip se retrouve sous la fenêtre.
Quelqu'un connait'il la solution, pour que l'étiquette aparaisse au dessus de la fenêtre, ou bien est-ce un Bug?
Merci
Michel

Re: Problème avec GadgetTooltip

Publié : mar. 23/mars/2010 18:24
par Ar-S
ça doit être un bug de ton système car pour moi pas de soucis.
Essaye ce code.

Code : Tout sélectionner

Enumeration
  #Window_0
  #Button_0
EndEnumeration
Global Button_0_Tooltip
;}
; Create tooltip
Procedure GadgetBalloonToolTip(WindowNumber.l, GadgetNumber.l, Text.s)
  Protected Tooltip.l, Balloon.TOOLINFO
  Tooltip = CreateWindowEx_(0, "ToolTips_Class32", "", #WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON, 0, 0, 0, 0, WindowID(WindowNumber), 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)
  Balloon\cbSize = SizeOf(TOOLINFO)
  Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
  If IsGadget(GadgetNumber)
    Balloon\hwnd = GadgetID(GadgetNumber)
    Balloon\uId = GadgetID(GadgetNumber)
  Else
    Balloon\hwnd = GadgetNumber
    Balloon\uId = GadgetNumber
  EndIf
  Balloon\lpszText = @Text
  SendMessage_(Tooltip, #TTM_ADDTOOL, 0, @Balloon)
  ProcedureReturn Tooltip
EndProcedure
; Change tooltip text
Procedure ChangeGadgetBalloonToolTip(Tooltip.l, GadgetNumber.l, Text.s)
  Protected Balloon.TOOLINFO
  Balloon\cbSize = SizeOf(TOOLINFO)
  Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
  If IsGadget(GadgetNumber)
    Balloon\hwnd = GadgetID(GadgetNumber)
    Balloon\uId = GadgetID(GadgetNumber)
  Else
    Balloon\hwnd = GadgetNumber
    Balloon\uId = GadgetNumber
  EndIf
  Balloon\lpszText = @Text
  SendMessage_(Tooltip, #TTM_ADDTOOL, 0, @Balloon)
EndProcedure
; Free tooltip
Procedure FreeBalloonTooltip(Tooltip.l)
  DestroyWindow_(Tooltip.l)
EndProcedure 

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    StickyWindow(#Window_0,1)
    ButtonGadget(#Button_0, 90, 135, 210, 90, "Gadget_0")
    Button_0_Tooltip = GadgetBalloonToolTip(#Window_0, #Button_0, "Suis-je derriere ou devant, telle est la question.")
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Select WaitWindowEvent()
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
      EndSelect
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver

Re: Problème avec GadgetTooltip

Publié : mar. 23/mars/2010 19:12
par Le Soldat Inconnu
ça arrive parfois, c'est plus un bug de Windows que de PB je pense

Re: Problème avec GadgetTooltip

Publié : mer. 24/mars/2010 9:06
par MLD
Merci a Ar-S et au soldat

Ar-S ton code est OK :D
Le Soldat Inconnu a écrit :ça arrive parfois, c'est plus un bug de Windows que de PB je pense
Humm, un tooltip est une fenêtre. Si StikyWindow a été oublier dans la lib PB, le problème est reproduit :?:

Re: Problème avec GadgetTooltip

Publié : mer. 24/mars/2010 9:40
par Le Soldat Inconnu
Moi, j'ai le souci sur mon XP avec des appli non PB et les tooltips qui reste en arrière plan, par exemple, derrière la barre des taches pour les tooltip du systray. C'est pour ça que je pense à un prob de windows

Re: Problème avec GadgetTooltip

Publié : mer. 24/mars/2010 10:39
par Ar-S
C'est clair, les tooltips de la barre des taches qui s'affichent derrière est un soucis récurent. Le pire est que ça ne le fait pas tout le temps.

Re: Problème avec GadgetTooltip

Publié : mer. 24/mars/2010 12:51
par PAPIPP
Bonjour à tous
Chez moi ça fonctionne bien
Pour obtenir le tooltip après avoir cliqué le bouton gadget_0 j'ai modifié le Prg

Code : Tout sélectionner

Enumeration
  #Window_0
  #Button_0
EndEnumeration
Global Button_0_Tooltip
;}
; Create tooltip
Procedure GadgetBalloonToolTip(WindowNumber.l,GadgetNumber.l,Text.s)
  Protected Tooltip.l,Balloon.TOOLINFO
  Tooltip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID(WindowNumber),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)
  Balloon\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  If IsGadget(GadgetNumber)
    Balloon\hwnd=GadgetID(GadgetNumber)
    Balloon\uId=GadgetID(GadgetNumber)
  Else
    Balloon\hwnd=GadgetNumber
    Balloon\uId=GadgetNumber
  EndIf
  Balloon\lpszText=@Text
  SendMessage_(Tooltip,#TTM_ADDTOOL,0,@Balloon)
  ProcedureReturn Tooltip
EndProcedure
; Change tooltip text
Procedure ChangeGadgetBalloonToolTip(Tooltip.l,GadgetNumber.l,Text.s)
  Protected Balloon.TOOLINFO
  Balloon\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  If IsGadget(GadgetNumber)
    Balloon\hwnd=GadgetID(GadgetNumber)
    Balloon\uId=GadgetID(GadgetNumber)
  Else
    Balloon\hwnd=GadgetNumber
    Balloon\uId=GadgetNumber
  EndIf
  Balloon\lpszText=@Text
  SendMessage_(Tooltip,#TTM_ADDTOOL,0,@Balloon)
EndProcedure
; Free tooltip
Procedure FreeBalloonTooltip(Tooltip.l)
  DestroyWindow_(Tooltip.l)
EndProcedure
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0,450,200,400,400,"Window_0",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    StickyWindow(#Window_0,1)
    ButtonGadget(#Button_0,90,135,210,90,"Gadget_0")
    Button_0_Tooltip=GadgetBalloonToolTip(#Window_0,#Button_0,"Suis-je derriere ou devant, telle est la question.")
  EndIf
EndProcedure
OpenWindow_Window_0()
;{- Event loop
Repeat
  Select WaitWindowEvent()
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
          Button_0_Tooltip=GadgetBalloonToolTip(#Window_0,#Button_0,"Suis-je derriere ou devant, telle est la question.") ; MODIF
      EndSelect
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver


A+
PP

Re: Problème avec GadgetTooltip

Publié : mer. 24/mars/2010 14:19
par MLD
Bonjour PAPPIP

Oui ce code fonctionne bien. C'est le tooltip d'origine qui a un problème.

Merci a toi
Michel