Page 1 sur 1

[RESOLU] Saut de ligne dans le texte du Tooltip

Publié : sam. 13/sept./2008 17:55
par kerkael
Alors voilà mon problème : dans les tooltips, le texte apparait sur une seule ligne. Même avec l'utilisation d'un +chr(10) ou +chr(13) bien placé.

Est-ce volontaire de bloquer le tooltip sur une seule ligne ?

Qu'est-ce que vous utilisez pour des tooltips personnalisés ?

Merki les aminches.
Enumeration
#fenetre0
#texte0
EndEnumeration

If openwindow ( #fenetre0 , 100,100, 250, 150, "Test ToolTip" , #PB_Window_SystemMenu|#PB_Window_TitleBar )
If creategadgetlist ( windowid ( #fenetre0 ))


comboboxgadget ( #texte0 , 20, 60, 220, 200, #PB_ComboBox_Editable )
gadgettooltip ( #texte0 , "ComboBoxGadget" + chr (10) + " Editable" )
addgadgetitem ( #texte0 , -1, "ou est le saut de ligne du tooltip ?" )
setgadgetstate ( #texte0 , 0)

EndIf

Repeat
Select waitwindowevent ()
Case #PB_Event_CloseWindow : End
EndSelect
ForEver
EndIf

Publié : dim. 14/sept./2008 1:02
par Ar-S
Je te conseils d'utiliser une procédure de Gadget Balloon. une bulle c'est plus sympa qu'un rectangle. En plus pour le réaliser, PureForm de Gnozal (utilise le moteur de recherche pour te guider sur pureform) te permet de générer les procédure pour tes gadgets. Voilà un exemple.



Enumeration
       #Window_0
       #ComboBox_0
EndEnumeration
Global ComboBox_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, 250) ; ICI 250 représente la largeur de ta bulle
      Balloon\cbSize = sizeof (TOOLINFO)
      Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
      Balloon\hwnd = gadgetid (GadgetNumber)
      Balloon\uId = gadgetid (GadgetNumber)
      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
      Balloon\hwnd = gadgetid (GadgetNumber)
      Balloon\uId = gadgetid (GadgetNumber)
      Balloon\lpszText = @Text
       SendMessage_ (Tooltip, #TTM_ADDTOOL , 0, @Balloon)
EndProcedure
; Free tooltip
Procedure FreeBalloonTooltip(Tooltip.l)
       DestroyWindow_ (Tooltip.l)
EndProcedure

If openwindow ( #Window_0 , 251, 371, 400, 146, "Window_0" , #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar )
       If creategadgetlist ( windowid ( #Window_0 ))
             comboboxgadget ( #ComboBox_0 , 75, 55, 270, 100)
             addgadgetitem ( #ComboBox_0 , -1, "ou est le saut de ligne du tooltip ?" )
             setgadgetstate ( #ComboBox_0 , 0)
            ComboBox_0_Tooltip = GadgetBalloonToolTip( #Window_0 , #ComboBox_0 , "Ic la largeur du tool tip (gadget balloon) est gérable dans la procédure, et une bulle est plus jolie qu'un rectangle : D" )
       EndIf
       Repeat
             Select waitwindowevent ()
                   Case #PB_Event_CloseWindow
                         Select eventwindow ()
                               Case #Window_0 : closewindow ( #Window_0 ) : Break
                         EndSelect
             EndSelect
       ForEver
      
EndIf

Publié : dim. 14/sept./2008 15:39
par kerkael
Super !
Exactement ce que je cherchais. Merci. (Sinon comment tu mets ton code en forme en couleur ici ? Tu ne t'embêtes quand même pas à ajouter des balises color à chaque nouveau mot, j'imagine)
[Edit]Super le code Dobro pour colorer ! [/Edit]

Hum, je viens de lancer ton code et j'ai plusieurs questions/remarques :
- CreateWindowEx_ n'est pas une commande PB, elle n'a pas d'aide ici-bas. Dois-je comprendre que c'est une commande windows, cette histoire d'API windows que je n'ai pas encore saisie ?

Ensuite, l'info-bulle semble bien vouloir apparaître quelques fois mais plus ensuite. Est-ce là aussi un paramètre de windows qui limite ce nombre ? Je n'ai jamais remarqué un tel comportement chez zinzin, mais ça ne m'étonnerait pas.

Du coup, j'ai essayé avec 2 gadgets, chacun sa bulle, et j'ai alterné de l'un à l'autre, et rapidement les 2 bulles deviennent inexistantes.

- Comportement normal ? Prévisible ? Surprenant ? Paramétrable ?

A part ça, si en plus de l'info-bulle je veux utiliser une fenêtre annexe pour faire un zoom, par exemple, sur une image que je survole, je ne vois pas d'option #PB_EventType_MouseOver, seulement divers ***_Click. Est-ce quelque chose à développer sois-même ? Si je prends l'exemple de macros VB sous excel (le monde d'où je viens) les boutons et autres assimilables gadgets ont ce genre d'option.

Publié : dim. 14/sept./2008 16:33
par Ar-S
Oui la commande CreateWindowEx_ est une API.
Toutes les commades suivies de _ dans PB sont des API windows.
http://fr.wikipedia.org/wiki/Windows_API

Tu peux aussi tater http://msdn.microsoft.com/en-us/library ... S.85).aspx pour avoir la liste des API windows.

Pour la mise en couleur du code j'utilise Colorer, tu le trouveras sur le site de dobro

Par contre pour 1 ou 2 bouton, les infos bulles fonctionnent sans soucis chez moi et réapparaissent..

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_0
  #Button_1
EndEnumeration
Global Button_0_Tooltip
Global Button_1_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
  Balloon\hwnd = GadgetID(GadgetNumber)
  Balloon\uId = GadgetID(GadgetNumber)
  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
  Balloon\hwnd = GadgetID(GadgetNumber)
  Balloon\uId = GadgetID(GadgetNumber)
  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, 424, 470, 310, 144, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 10, 5, 290, 55, "survol moi")
      Button_0_Tooltip = GadgetBalloonToolTip(#Window_0, #Button_0, "bouton 1")
      ButtonGadget(#Button_1, 10, 80, 290, 55, "survol me")
      Button_1_Tooltip = GadgetBalloonToolTip(#Window_0, #Button_1, "bouton 2")
    EndIf
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Select WaitWindowEvent()
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
        Case #Button_1
      EndSelect
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver
;
;}
Enfin pour ton histoire de zoom, je te conseils de faire une recherche sur "zoom", tu trouveras peut-être de quoi te guider.

Publié : lun. 15/sept./2008 13:03
par kerkael
Désolé, mais je confirme que chez moi, les 2 boutons affichent l'info-bulle jusqu'à ce que je clique sur le gadget.
Ainsi, ce n'est pas un nombre limité d'affichage, mais le fait que le gadget ait été utilisé qui bloque ensuite l'affichage de la bulle.

Ça ne fait pas pareil pour toi, vous ? les autres ?

Publié : lun. 15/sept./2008 13:06
par Ar-S
kerkael a écrit :Désolé, mais je confirme que chez moi, les 2 boutons affichent l'info-bulle jusqu'à ce que je clique sur le gadget.
Ainsi, ce n'est pas un nombre limité d'affichage, mais le fait que le gadget ait été utilisé qui bloque ensuite l'affichage de la bulle.

Ça ne fait pas pareil pour toi, vous ? les autres ?
Comme je te l'ai dit, chez moi ça marche, même si je déplace ma fene^tre, que je clique sur les boutons etc...

Publié : lun. 15/sept./2008 17:09
par Guac
Chez moi pas de problème avec le dernier code.
J'ai arrêté de compter à 30 infobulles de chaque bouton... :P
Tout fonctionne bien après toutes les manipulations auxquelles j'ai pu pensé.