Bulle d'aide multiligne (Window)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Bulle d'aide multiligne (Window)

Message 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()
Dernière modification par falsam le mer. 19/oct./2011 14:55, modifié 3 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
GG
Messages : 239
Inscription : jeu. 09/déc./2004 12:23

Re: Bulle d'aide multiligne (Window)

Message 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.
Dernière modification par GG le mer. 19/oct./2011 9:37, modifié 1 fois.
PureBasic 6.03 - Windows 11 22H2 (64 bits)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Bulle d'aide multiligne (Window)

Message par Ar-S »

De très bon codes ça merci !
Sympa l'icone ajoutée Falsam.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Bulle d'aide multiligne (Window)

Message 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)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
GG
Messages : 239
Inscription : jeu. 09/déc./2004 12:23

Re: Bulle d'aide multiligne (Window)

Message 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...
PureBasic 6.03 - Windows 11 22H2 (64 bits)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Bulle d'aide multiligne (Window)

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Bulle d'aide multiligne (Window)

Message par falsam »

Bonjour GallyHC, j'ai effectivement oublié de faire ce test. je compte sur toi :)
Si tu pouvez poster un code exemple. Merciiii.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Bulle d'aide multiligne (Window)

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Bulle d'aide multiligne (Window)

Message par Le Soldat Inconnu »

Terrible la solution de Gnozal et Netmaestro :D

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 :mrgreen:

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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Bulle d'aide multiligne (Window)

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Bulle d'aide multiligne (Window)

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Bulle d'aide multiligne (Window)

Message par MLD »

@ Soldat

Bonjour

Oui les deux code fonctionnent en multilignes sur XP.
A+
GG
Messages : 239
Inscription : jeu. 09/déc./2004 12:23

Re: Bulle d'aide multiligne (Window)

Message par GG »

Oui, multilignes sous XP SP3 32 bits.
PureBasic 6.03 - Windows 11 22H2 (64 bits)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Bulle d'aide multiligne (Window)

Message par Le Soldat Inconnu »

@MLD, GG : Merci

Donc mon second code est mieux, il suffit d'appeler une fois la procedure GadgetToolTipMultipleLine() et zou :D
Par contre, l'astuce de Gnozal valide le multiligne sur toutes les info-bulles.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre