Page 1 sur 1
Bulle d'aide multiligne (Window)
Publié : mar. 18/oct./2011 20:38
par falsam
Syntaxe
BalloonTip(Gadget,TipTitle.s, TipText.s, [TipIcon.i], [TipFontId.i], [TipBackColor.i], [TipFrontColor.i])
Permet d'afficher une icone, un titre et plusieurs lignes d'aide dans une bulle d'aide.
Code : Tout sélectionner
;BalloonTip
;Syntaxe : BalloonTip(Gadget,TipTitle.s, TipText.s, [TipIcon.i], [TipFontId.i], [TipBackColor.i], [TipFrontColor.i])
;
;Gadget : Gadget concerné
;TipTitle : Titre de l'aide
;TipText : Texte de l'aide
;
;En option :
;TipIcon : Icon à afficher
; #TOOLTIP_WARNING_ICON - #TOOLTIP_ERROR_ICON - #TOOLTIP_INFO_ICON - #TOOLTIP_NO_ICON (Defaut)
;
;TipFontId : Id Police de caractére
;TipBackColor : Couleur d'arriére plan
;TipFrontColor: Couleur de police
;
Procedure BalloonTip(Gadget.l, TipTitle.s, TipText.s, TipIcon=#TOOLTIP_NO_ICON, TipFontId=0, TipBackColor.i=0, TipFrontColor=0)
Protected ToolTip.l, Balloon.TOOLINFO
ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP|#TTS_NOPREFIX|#TTS_BALLOON,0,0,0,0,GadgetID(Gadget),0,GetModuleHandle_(0),0)
Balloon\cbSize=SizeOf(TOOLINFO)
Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
;Balloon\hWnd=GadgetID(Gadget)
Balloon\uId=GadgetID(Gadget)
Balloon\lpszText = @TipText
If TipFontID<>0
SendMessage_(ToolTip, #WM_SETFONT, TipFontID, 0)
EndIf
If Not(TipBackColor=0 And TipFrontColor=0)
SetWindowTheme_(ToolTip, #NUL$, #NUL$)
SendMessage_(ToolTip, #TTM_SETTIPTEXTCOLOR, TipFrontColor,0)
SendMessage_(ToolTip, #TTM_SETTIPBKCOLOR, TipBackColor,0)
EndIf
SendMessage_(ToolTip, #TTM_SETTITLE, TipIcon, @TipTitle)
SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
EndProcedure
;/////// TEST //////////////////////////////////////////////////////////
EnableExplicit
Enumeration
#Mainform
#Button1
#Button2
EndEnumeration
Global FontID1.l
OpenWindow(#Mainform, 235, 2, 400, 200, "ToolTip Test", #PB_Window_SystemMenu |#PB_Window_ScreenCentered )
ButtonGadget(#Button1, 300, 10, 80, 22, "Bouton 1")
BalloonTip(#Button1, "Titre de l'aide 1", "Ligne 1", #TOOLTIP_WARNING_ICON, 0, $CCF9FF, #Black)
FontID1 = LoadFont(1, "Arial", 12, #PB_Font_HighQuality)
ButtonGadget(#Button2, 300, 35, 80, 22, "Bouton 2")
BalloonTip(#Button2,"Titre de l'aide 2", "Ligne 1" +#CRLF$+ "Ligne 2" +#CRLF$+ "Ligne 3", #TOOLTIP_WARNING_ICON, FontId1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Ce code ne fonctionne pas en remplacement de
ToolBarToolTip() et
SysTrayIconToolTip()
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 9:09
par GG
Super Falsam, merci.
A mettre dans PB Contributions si ce n'est déjà fait !
Autre solution que m'a proposé gnozal sur
>> le forum UK <<:
Code : Tout sélectionner
Structure PB_Globals
CurrentWindow.i
FirstOptionGadget.i
DefaultFont.i
*PanelStack
PanelStackIndex.l
PanelStackSize.l
ToolTipWindow.i
EndStructure
Import ""
PB_Object_GetThreadMemory(*Mem)
PB_Gadget_Globals
EndImport
Procedure ToolTipID()
Protected *PB_Globals.PB_Globals
*PB_Globals = PB_Object_GetThreadMemory(PB_Gadget_Globals)
ProcedureReturn *PB_Globals\ToolTipWindow
EndProcedure
OpenWindow(0,0,0,320,240,"")
StringGadget(1,20,40,200,20,"stuff")
GadgetToolTip(1, "This is a tooltip with multiple lines ")
ttid = ToolTipID()
SendMessage_(ttid, #TTM_SETMAXTIPWIDTH, 0, 100)
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
et netmaestro :
Code : Tout sélectionner
Procedure TT_CBTHookProc(nCode, wParam, lParam)
Shared _Hook, TT_HWND
Select nCode
Case #HCBT_CREATEWND
*pcbt.CBT_CREATEWND = lParam
*pcs.CREATESTRUCT = *pcbt\lpcs
Select PeekS(*pcs\lpszClass)
Case "tooltips_class32"
TT_HWND = wParam
EndSelect
EndSelect
ProcedureReturn CallNextHookEx_(_Hook, nCode, wParam, lParam)
EndProcedure
Procedure GadgetToolTipEx(gadget_number, tooltip_text$)
Shared _Hook, TT_HWND
_Hook = SetWindowsHookEx_(#WH_CBT, @TT_CBTHookProc(), #Null, GetCurrentThreadId_())
GadgetToolTip(gadget_number, tooltip_text$)
UnhookWindowsHookEx_(_Hook)
ProcedureReturn TT_HWND
EndProcedure
OpenWindow(0,0,0,320,240,"")
StringGadget(1,20,40,200,20,"stuff")
ttid = GadgetToolTipEx(1, "This is a tooltip with multiple lines ")
SendMessage_(ttid, #TTM_SETMAXTIPWIDTH, 0, 100)
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
A mettre dans PB Contrib également je pense.
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 9:29
par Ar-S
De très bon codes ça merci !
Sympa l'icone ajoutée Falsam.
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 9:44
par falsam
@GG :
Je crois que je préfère ma petite procédure que je stocke sous forme d'include. Je la trouve plus sexy
Je préfère faire.
Code : Tout sélectionner
ButtonGadget(#Button1, 300, 10, 80, 22, "Bouton 1")
BalloonTip(#Button1, "Titre de l'aide 1", "Ligne 1", #TOOLTIP_WARNING_ICON, 0, $CCF9FF, #Black)
plutôt que
Code : Tout sélectionner
StringGadget(1,20,40,200,20,"stuff")
GadgetToolTip(1, "This is a tooltip with multiple lines ")
ttid = ToolTipID()
SendMessage_(ttid, #TTM_SETMAXTIPWIDTH, 0, 100)
De plus on peut ajouter un titre et changer le style de la bulle (Couleur de fond, couleur de caractére, Changement de font)
Quand à PB Contribution, L'outils ne séduisant pas, je pense que je vais arrêter là le dev.
Ar-S a écrit :Sympa l'icone ajoutée Falsam.
3 icônes possibles
#TOOLTIP_WARNING_ICON
#TOOLTIP_ERROR_ICON
#TOOLTIP_INFO_ICON
ou pas d'icone
#TOOLTIP_NO_ICON (Defaut)
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 10:00
par GG
Je plussoie concernant l'intégration de la procédure.
Pour PB Contributions, ce serait dommage, car bien pratique pour stocker des bouts de code que l'on peut réutiliser par ci par là, et cela permet de centraliser cette richesse d'informations plutôt que de papillonner dans le forum...
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 12:43
par GallyHC
Bonjour falsam,
Vraiment cool comme code je vais surement l'utilisé. Je vais voir si cela est utilisable avec le systray
Cordialement,
GallyHC
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 12:52
par falsam
Bonjour GallyHC, j'ai effectivement oublié de faire ce test. je compte sur toi

Si tu pouvez poster un code exemple. Merciiii.
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 14:52
par falsam
Ce code ne fonctionne pas en remplacement de ToolBarToolTip() et SysTrayIconToolTip()
J'ai commenté Balloon\hWnd=GadgetID(Gadget). Ca ne sert à rien et c'est une erreur.
je ne suis pas familiarisé avec les APi (Même que je déteste), je pense que c'est la fenêtre qui contient le gadget qu'il fallait indiquer et non pas le gadget lui même (Qui est lui aussi est une fenêtre). Apparement ça n'a pas d'incidence sur l’exécution.
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 15:56
par Le Soldat Inconnu
Terrible la solution de Gnozal et Netmaestro
Une version simplifiée à l'utilisation du codes de Gnozal. Pour les fainéants, comme moi, qui aime bien avoir une fonction qui intègre tout pour être simple à utiliser
Code : Tout sélectionner
;{ GadgetToolTipEx Import
Structure PB_Globals
CurrentWindow.i
FirstOptionGadget.i
DefaultFont.i
*PanelStack
PanelStackIndex.l
PanelStackSize.l
ToolTipWindow.i
EndStructure
Import ""
PB_Object_GetThreadMemory(*Mem)
PB_Gadget_Globals
EndImport
;}
Procedure GadgetToolTipEx(Gadget, Text.s, Width.l = 128)
Protected *PB_Globals.PB_Globals
GadgetToolTip(Gadget, Text)
*PB_Globals = PB_Object_GetThreadMemory(PB_Gadget_Globals)
SendMessage_(*PB_Globals\ToolTipWindow, #TTM_SETMAXTIPWIDTH, 0, Width)
EndProcedure
; Début du code
OpenWindow(0, 0, 0, 320, 240, "ToolTip", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(1, 4, 4, 200, 40, "ToolTip 1")
GadgetToolTipEx(1, "This is a tooltip with multiple lines", 100)
ButtonGadget(2, 4, 64, 200, 40, "ToolTip 2")
GadgetToolTipEx(2, "This is a tooltip with multiple lines")
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 16:02
par Le Soldat Inconnu
Heu, je viens de voir un truc. Est-ce que les 2 tooltips sont multilignes chez vous aussi ? (à tester sous XP si possible)
Code : Tout sélectionner
;{ GadgetToolTipEx Import
Structure PB_Globals
CurrentWindow.i
FirstOptionGadget.i
DefaultFont.i
*PanelStack
PanelStackIndex.l
PanelStackSize.l
ToolTipWindow.i
EndStructure
Import ""
PB_Object_GetThreadMemory(*Mem)
PB_Gadget_Globals
EndImport
;}
Procedure GadgetToolTipMultipleLine(Width.l = 128)
Protected *PB_Globals.PB_Globals
*PB_Globals = PB_Object_GetThreadMemory(PB_Gadget_Globals)
SendMessage_(*PB_Globals\ToolTipWindow, #TTM_SETMAXTIPWIDTH, 0, Width)
EndProcedure
; Début du code
OpenWindow(0, 0, 0, 320, 240, "ToolTip", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(1, 4, 4, 200, 40, "ToolTip 1")
GadgetToolTip(1, "This is a tooltip with multiple lines 1")
GadgetToolTipMultipleLine()
ButtonGadget(2, 4, 64, 200, 40, "ToolTip 2")
GadgetToolTip(2, "This is a tooltip with multiple lines 2")
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 16:23
par falsam
@GallyHC: Pour une bulle d'aide multilignes sur un SysTray tu peux utiliser Chr(13) ou #CRLF$ pour séparer chaque ligne.
Code : Tout sélectionner
OpenWindow(0, 100, 150, 300, 100, "SysTray Test", #PB_Window_SystemMenu)
AddSysTrayIcon(1, WindowID(0), LoadIcon_(#Null, #IDI_ASTERISK))
AddSysTrayIcon(2, WindowID(0), LoadIcon_(#Null, #IDI_WARNING))
SysTrayIconToolTip(1, "Ligne 1" +#CRLF$+ "ligne 2")
SysTrayIconToolTip(2, "Ligne 1" +#CRLF$+ "ligne 2")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 16:35
par MLD
@ Soldat
Bonjour
Oui les deux code fonctionnent en multilignes sur XP.
A+
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 16:43
par GG
Oui, multilignes sous XP SP3 32 bits.
Re: Bulle d'aide multiligne (Window)
Publié : mer. 19/oct./2011 18:36
par Le Soldat Inconnu
@MLD, GG : Merci
Donc mon second code est mieux, il suffit d'appeler une fois la procedure GadgetToolTipMultipleLine() et zou
Par contre, l'astuce de Gnozal valide le multiligne sur toutes les info-bulles.