Merci beaucoup !
Pourquoi dès que le callback démarre les boutons de la libtoolbarxp disparaissent alors j'ai j'ai bien spécifié la taille du rectangle affecté par le InvalidateRect_() ?
Je pense que la libtoolbarxp utilise un callback (car la lib usecallback est donnée avec) et que le problème vient de là. Que faire ?
Lib Video
C'est une lib de Régis, ça, si ma mémoire est bonne.
Si oui, c'est à lui qu'il faut demander ça.
C'est vrai que si la lib possède sa propre callback, ça peut peut-être poser un problème, mais je ne suis pas sûr.
Et comme on est que tous les deux à discuter sur ce sujet qui n'a pas l'air d'interesser grand monde, on est pas sûr d'avoir une réponse.
Si oui, c'est à lui qu'il faut demander ça.
C'est vrai que si la lib possède sa propre callback, ça peut peut-être poser un problème, mais je ne suis pas sûr.
Et comme on est que tous les deux à discuter sur ce sujet qui n'a pas l'air d'interesser grand monde, on est pas sûr d'avoir une réponse.
Nouvelle version, avec six commandes en plus.
L'adresse est la même que pour la précédente.
L'aide est mise à jour, mais je n'ai pas modifié le fichier .pdf qui, à mon avis, n'a plus d'utilité.
Et maintenant, je passe à autre chose, vu le peu d'interêt que cette librairie suscite.
Merci à Pingtix et à Flype pour l'avoir testée
L'adresse est la même que pour la précédente.
L'aide est mise à jour, mais je n'ai pas modifié le fichier .pdf qui, à mon avis, n'a plus d'utilité.
Et maintenant, je passe à autre chose, vu le peu d'interêt que cette librairie suscite.
Merci à Pingtix et à Flype pour l'avoir testée
Avant d'appeler à l'aide, il aurait peut-être fallu lire le code d'exemple que Régis livre avec la librairie.Pingtix a écrit :Régis !!!! Au secours !!!! A l'aide !!!
Tu aurais vu qu'il avait prévu une commande pour ajouter une callback.
AddCallBack(@CallBack()) à la place de SetWindowCallback(@CallBack()), et chez moi, ça fonctionne sans aucun problème.
Les codes sources livrés avec les librairies, surtout si ils sont commentés, c'est pas là uniquement pour faire du volume ou pour faire un effet décoratif, ça sert aussi à apprendre aux gens à utiliser ce qu'ils viennent d'installer sur leur ordinateur.
@Régis
Très bien, cette lib.
Par contre, pour quelqu'un qui a fait un prog pour faire des fichiers d'aide, c'est pas le top, au niveau de la doc

Tu sais que tu as le droit de l'utiliser, ton prog pour faire les fichiers d'aide!

Je te poste le code qui est fourni dans la librairie ToolBarXP, avec la callback qui fonctionne.
La seule modif que j'ai faite, est d'ajouter la callback, et de retirer tous les commentaires pour que le post soit moins long. (ou plus court, c'est au choix)
Lance le, choisis ton film, et constate par toi même.
Tu peux bouger la fenêtre, la recouvrir avec une autre fenêtre, la redimensionner dans tous les sens.
La seule modif que j'ai faite, est d'ajouter la callback, et de retirer tous les commentaires pour que le post soit moins long. (ou plus court, c'est au choix)
Lance le, choisis ton film, et constate par toi même.

Tu peux bouger la fenêtre, la recouvrir avec une autre fenêtre, la redimensionner dans tous les sens.
Code : Tout sélectionner
#Win_Player = 0
#Video = 0
Global Re.RECT
Film$ = OpenFileRequester("Ouvrir une vidéo","Fichiers vidéo","Fichiers vidéo|*.wmv;*.avi;*.mpg|Tout type|*.*",0)
Structure SH_FILEINFO ; la structure SHFILEINFO PB est fausse
hIcon.l
iIcon.l
dwAttributes.l
szDisplayName.b[#MAX_PATH]
szTypeName.b[80]
EndStructure
Procedure.l ExtractSmallIconFile(IconPath.s)
SHGetFileInfo_(IconPath, 0, @InfosFile.SH_FILEINFO, SizeOf(SH_FILEINFO), #SHGFI_ICON | #SHGFI_SMALLICON)
ProcedureReturn InfosFile\hIcon
EndProcedure
Procedure.l ExtractLargeIconFile(IconPath.s)
SHGetFileInfo_(IconPath, 0, @InfosFile.SH_FILEINFO, SizeOf(SH_FILEINFO), #SHGFI_ICON | #SHGFI_LARGEICON)
ProcedureReturn InfosFile\hIcon
EndProcedure
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Callback du film
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure WindowCallBack(Hnd,msg,wParam,lParam)
Resultat = #PB_ProcessPureBasicEvents
If Hnd = WindowID(#Win_Player)
Select msg
Case #WM_MOVE
InvalidateRect_(Hnd,@Re,#False)
Case #WM_PAINT
InvalidateRect_(Hnd,@Re,#False)
Case #WM_SIZE
Re\left = 0 : Re\top = 65
Re\right = WindowWidth(): Re\bottom = WindowHeight()-85
ResizeVideo(#Video, Re\left,Re\top, Re\right, Re\bottom)
InvalidateRect_(Hnd,@Re,#False)
EndSelect
EndIf
ProcedureReturn Resultat
EndProcedure
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;- Exemple d'utilisation de la lirairie ToolBarXP
If OpenWindow(#Win_Player, 0, 0, 600, 600, #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget, "ToolBarXP") = 0 Or CreateGadgetList(WindowID()) = 0
End
Else
hPlayer = WindowID(#Win_Player)
EndIf
If CreateMenu(0, WindowID())
MenuTitle("Fichier")
MenuItem(1000, "Quitter")
EndIf
If CreatePopupMenu(1)
MenuItem(1001, "PopupMenu exemple 1")
MenuItem(1002, "PopupMenu exemple 2")
MenuItem(1003, "PopupMenu exemple 3")
EndIf
If CreatePopupMenu(2)
MenuItem(1, "Hauteur totale de la barre d'outils")
MenuItem(2, "Hauteur d'une ligne de la barre d'outils")
MenuItem(3, "Largeur de la barre d'outils")
MenuBar()
OpenSubMenu("Insérer un élément avant le bouton 4 de la barre d'outils")
MenuItem(10, "Un bouton")
MenuItem(11, "Un menu")
MenuItem(12, "Une séparation")
MenuItem(13, "Un espace")
MenuItem(14, "Une fin et un début")
MenuItem(15, "Un StringGadget")
MenuItem(16, "Un bouton texte")
CloseSubMenu()
OpenSubMenu("Supprimer un élément de la barre d'outils")
MenuItem(20, "Le bouton 3")
MenuItem(21, "La premier élément")
CloseSubMenu()
OpenSubMenu("Déplacer un élément de la barre d'outils")
MenuItem(70, "Déplacer le bouton 5 avant le bouton 4")
MenuItem(71, "Déplacer la séparation avant le bouton 1")
CloseSubMenu()
MenuBar()
MenuItem(30, "Renvoyer la position du bouton 2")
MenuItem(31, "Renvoyer l'identifiant du premier élément")
MenuItem(32, "Renvoyer le type du premier élément")
MenuBar()
MenuItem(40, "Changer le texte du bouton 'Suivant'")
MenuItem(41, "Retirer le texte du bouton 'Précédent'")
MenuItem(42, "Changer l'icône du bouton 'Suivant'")
MenuItem(43, "Changer le texte du bouton 'Texte'")
MenuBar()
MenuItem(50, "Désactiver ou activer tous les éléments")
OpenSubMenu("Masquer ou afficher un élément")
MenuItem(51, "Le bouton 5")
MenuItem(52, "La séparation")
MenuItem(53, "Le ComboBoxGadget")
CloseSubMenu()
MenuBar()
MenuItem(60, "Changer le curseur au dessus de la barre d'outils")
MenuBar()
MenuItem(100, "Supprimer la barre d'outils")
EndIf
;- On charge l'image qui va donner l'apparence à la barre d'outils
LoadImage(0, "ToolBarXP 16.bmp")
;- On crée la barre d'outils
CreateToolBarXP(WindowID(), 16, 10)
;- On charge l'apparence de la barre d'outils (Pas obligatoire, sans cette fonction, la barre d'outils prendra une apparence par défaut)
SetToolBarXPShape(UseImage(0), RGB(237, 241, 252), GetSysColor_(#COLOR_3DFACE), 350) ; Commenter cette fonction pour voir la barre d'outils par défaut
;- On change la couleur du texte
SetToolBarXPTextColor(0, RGB(174, 28, 174))
IconePrecedent = ExtractSmallIconFile("Précédent.ico")
IconeSuivant = ExtractSmallIconFile("Suivant.ico")
Icone1 = ExtractSmallIconFile("1.ico")
Icone2 = ExtractSmallIconFile("2.ico")
Icone3 = ExtractSmallIconFile("3.ico")
Icone4 = ExtractSmallIconFile("4.ico")
Icone5 = ExtractSmallIconFile("5.ico")
;- On place une bordure gauche sur la barre d'outils
ToolBarXPStart()
;- On place un bouton avec du texte
ToolBarXPButton(1, IconePrecedent, "Précédent")
GadgetToolTip(1, "Précédent") ; On ajoute une info-bulle au bouton
;- On place un menu
ToolBarXPMenu(2)
GadgetToolTip(2, "Menu du bouton 'Précédent'") ; On ajoute une info-bulle au menu
ToolBarXPButton(3, IconeSuivant, "Suivant")
GadgetToolTip(3, "Suivant") ; On ajoute une info-bulle au bouton
ToolBarXPMenu(4)
GadgetToolTip(4, "Menu du bouton 'Suivant'") ; On ajoute une info-bulle au menu
;- On place une bordure droite sur la barre d'outils
ToolBarXPEnd()
;- On se décale avant de continuer le menu en plaçant un espace
ToolBarXPSpace(10)
ToolBarXPStart()
Bouton_Icone1 = ToolBarXPButton(#PB_Any, Icone1)
Bouton_Icone2 = ToolBarXPButton(#PB_Any, Icone2)
Bouton_Icone3 = ToolBarXPButton(#PB_Any, Icone3)
;- On ajoute une séparation
SeparatorID = ToolBarXPSeparator()
Bouton_Icone4 = ToolBarXPButton(#PB_Any, Icone4)
ToolBarXPSpace(20, 1) ; On met un espace entre les 2 boutons
Bouton_Icone5 = ToolBarXPButton(#PB_Any, Icone5)
MenuFonctions = ToolBarXPMenu(#PB_Any)
GadgetToolTip(MenuFonctions, "Tester les fonctions disponibles")
;- On étend le menu sur le reste de la fenêtre
ToolBarXPExpand(1)
;- On ajoute une nouvelle ligne à la barre d'outils
ToolBarXPNewLine(2)
ToolBarXPStart()
Bouton_Icone6 = ToolBarXPButton(#PB_Any, Icone1)
ToolBarXPSeparator()
Bouton_Icone7 = ToolBarXPButton(#PB_Any, Icone2)
;- Ajouter un gadget dans la barre d'outils
Gadget_ComboBox = ComboBoxGadget(#PB_Any, 0, 0, 100, 200)
Gadget_ComboBox_BarreOutils = AddGadgetInToolBarXP(Gadget_ComboBox)
For n = 1 To 10
AddGadgetItem(Gadget_ComboBox, -1, "Elément " + Str(n))
Next
ToolBarXPSpace(5, 1)
Gadget_Bouton = ButtonGadget(#PB_Any, 0, 0, 100, 20, "Bouton")
Gadget_Bouton_BarreOutils = AddGadgetInToolBarXP(Gadget_Bouton)
ToolBarXPSeparator()
;- On ajoute un bouton texte (pas d'icône)
BoutonTexte = ToolBarXPTextButton(#PB_Any, "Texte")
ToolBarXPSpace(Int(600 - GetToolBarXPWidth() - 16 * 0.75), 1)
ToolBarXPEnd()
ToolBarXPExpand(0)
;- Remarque importante
AddCallBack(@WindowCallBack())
If LoadVideo(#Video, Film$)
SetVideoFormat(#Video, #VIDEO_MSECONDE)
VideoLoaded = 1
EndIf
If VideoLoaded
PlayVideo(#Video, hPlayer)
Re\left = 0 : Re\top = 65
Re\right = WindowWidth(): Re\bottom = WindowHeight()-85
ResizeVideo(#Video, Re\left,Re\top, Re\right, Re\bottom)
SetVideoCaption(#Video, GetTitle(Film$))
; Debug IsVideo(#Video)
; Debug IsVideoMaximized(#Video)
Debug IsVideoVisible(#Video)
EndIf
;- Boucle d'évènement
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventMenu
Select EventMenuID() ; menu et barre d'outils
Case 1000
Event = #WM_CLOSE ; On quitte
Case 1001 ; Appui sur le PopupMenu exemple
MessageRequester("ToolBarXP", "Appui sur 'PopupMenu exemple 1'.", 4 * 16)
Case 1002
MessageRequester("ToolBarXP", "Appui sur 'PopupMenu exemple 2'.", 4 * 16)
Case 1003
MessageRequester("ToolBarXP", "Appui sur 'PopupMenu exemple 3'.", 4 * 16)
;- Fonctions disponibles à partir du menu
Case 1 ; Hauteur totale de la barre d'outils
Hauteur.l = GetToolBarXPHeight()
MessageRequester("ToolBarXP", "Hauteur totale = " + Str(Hauteur), 4 * 16)
Case 2 ; Hauteur d'une ligne de la barre d'outils
Hauteur.l = GetToolBarXPLineHeight()
MessageRequester("ToolBarXP", "Hauteur d'une ligne = " + Str(Hauteur), 4 * 16)
Case 3 ; Largeur de la barre d'outils
Largeur.l = GetToolBarXPWidth() ; Cette fonction ne prend en compte que la dernière ligne de la barre d'outils.
MessageRequester("ToolBarXP", "Largeur de la dernière ligne = " + Str(Largeur), 4 * 16)
Case 10 ; Insérer un bouton avant le bouton 4 de la barre d'outils
PositionBouton4 = GetToolBarXPItemPosition(Bouton_Icone4)
InsertToolBarXPButton(PositionBouton4, #PB_Any, IconeSuivant, "Insertion")
Case 11 ; Insérer un menu avant le bouton 4 de la barre d'outils
PositionBouton4 = GetToolBarXPItemPosition(Bouton_Icone4) ; On récupère la position du bouton 4
InsertToolBarXPMenu(PositionBouton4, #PB_Any)
Case 12 ; Insérer une séparation avant le bouton 4 de la barre d'outils
PositionBouton4 = GetToolBarXPItemPosition(Bouton_Icone4) ; On récupère la position du bouton 4
InsertToolBarXPSeparator(PositionBouton4)
Case 13 ; Insérer un espace avant le bouton 4 de la barre d'outils
PositionBouton4 = GetToolBarXPItemPosition(Bouton_Icone4) ; On récupère la position du bouton 4
InsertToolBarXPSpace(PositionBouton4, 15, 1)
Case 14 ; Insérer un début et une fin avant le bouton 4 de la barre d'outils
PositionBouton4 = GetToolBarXPItemPosition(Bouton_Icone4) ; On récupère la position du bouton 4
InsertToolBarXPEnd(PositionBouton4)
InsertToolBarXPStart(PositionBouton4 + 1)
Case 15 ; Insérer un StringGadget avant le bouton 4 de la barre d'outils
PositionBouton4 = GetToolBarXPItemPosition(Bouton_Icone4) ; On récupère la position du bouton 4
Gadget_Texte = StringGadget(#PB_Any, 300, 37, 50, 20, "Texte") ; On crée le StringGadget
InsertGadgetInToolBarXP(PositionBouton4, Gadget_Texte)
Case 16 ; Insérer un bouton texte avant le bouton 4 de la barre d'outils
PositionBouton4 = GetToolBarXPItemPosition(Bouton_Icone4) ; On récupère la position du bouton 4
InsertToolBarXPTextButton(PositionBouton4, #PB_Any, "Texte 2")
Case 20 ; Supprimer le bouton 3
PositionBouton3 = GetToolBarXPItemPosition(Bouton_Icone3)
If PositionBouton3 >=0
RemoveToolBarXPItem(PositionBouton3)
EndIf
Case 21 ; Supprimer la premier élément de la barre d'outils
RemoveToolBarXPItem(0) ; Voir description ci-dessus
Case 30 ; Renvoyer la position du bouton 2
PositionBouton2 = GetToolBarXPItemPosition(Bouton_Icone2) ; Voir description de la fonction pour la suppression du bouton 3
MessageRequester("ToolBarXP", "Position du bouton 2 = " + Str(PositionBouton2), 4 * 16)
Case 31 ; Renvoyer l'identifiant du premier élément
id = GetToolBarXPItemID(0)
MessageRequester("ToolBarXP", "Identifiant du premier élément = " + Str(id), 4 * 16)
Case 32 ; Renvoyer le type du premier élément
Type = GetToolBarXPItemType(0)
Select Type
Case 1 : Definition.s = "Espace"
Case 2 : Definition = "Début"
Case 3 : Definition = "Fin"
Case 4 : Definition = "Séparation"
Case 5 : Definition = "Bouton"
Case 6 : Definition = "Menu"
Case 7 : Definition = "Extension"
Case 8 : Definition = "Gadget"
EndSelect
MessageRequester("ToolBarXP", "Type du premier élément = " + Str(Type) + " (" + Definition + ")", 4 * 16)
Case 40 ; Changer le texte du bouton 'Suivant'
SetToolBarXPButtonText(3, "Nouveau texte")
Case 41 ; Retirer le texte du bouton 'Précédent'
SetToolBarXPButtonText(1, "") ; Voir ci-dessus
Case 42 ; Changer l'icône du bouton 'Suivant'
SetToolBarXPButtonIcon(3, Icone1)
Case 43 ; Changer le texte du bouton texte
SetToolBarXPTextButtonText(BoutonTexte, "Nouveau texte")
Case 50 ; Désactiver ou activer tous les éléments de la ligne 1
Etat = 1 - Etat
DisableToolBarXPItem(1, Etat)
DisableToolBarXPItem(2, Etat)
DisableToolBarXPItem(3, Etat)
DisableToolBarXPItem(4, Etat)
DisableToolBarXPItem(Bouton_Icone1, Etat)
DisableToolBarXPItem(Bouton_Icone2, Etat)
DisableToolBarXPItem(Bouton_Icone3, Etat)
DisableToolBarXPItem(Bouton_Icone4, Etat)
DisableToolBarXPItem(Bouton_Icone5, Etat)
DisableToolBarXPItem(Bouton_Icone6, Etat)
DisableToolBarXPItem(Bouton_Icone7, Etat)
DisableToolBarXPItem(Gadget_ComboBox_BarreOutils, Etat)
DisableToolBarXPItem(Gadget_Bouton_BarreOutils, Etat)
Case 51 ; Masquer ou afficher le bouton 5
MasquerBouton5 = 1 - MasquerBouton5
PositionBouton5 = GetToolBarXPItemPosition(Bouton_Icone5) ; On récupère la position du bouton 5
HideToolBarXPItem(PositionBouton5, MasquerBouton5)
Case 52 ; Masquer ou afficher la séparation
MasquerSeparation = 1 - MasquerSeparation
PositionSeparation = GetToolBarXPItemPosition(SeparatorID) ; On récupère la position de la séparation, on avait récupérer son identifiant lors de sa création.
HideToolBarXPItem(PositionSeparation, MasquerSeparation)
Case 53 ; Masquer ou afficher le ComboBoxGadget
MasquerCombo = 1 - MasquerCombo
PositionCombo = GetToolBarXPItemPosition(Gadget_ComboBox_BarreOutils) ; On récupère la position du ComboBox, on avait récupérer son identifiant lors de sa création.
HideToolBarXPItem(PositionCombo, MasquerCombo)
Case 60 ; Changer le curseur au dessus de la barre d'outils
SetToolBarXPCursor(#IDC_HAND)
Case 70 ; On déplace le bouton 5 avant le bouton 4
PositionBouton4 = GetToolBarXPItemPosition(Bouton_Icone4) ; On récupère la position du bouton 4
PositionBouton5 = GetToolBarXPItemPosition(Bouton_Icone5) ; On récupère la position du bouton 5
MoveToolBarXPItem(PositionBouton5, PositionBouton4)
Case 71 ; Déplacer la séparation avant le bouton 1
PositionBouton1 = GetToolBarXPItemPosition(Bouton_Icone1) ; On récupère la position du bouton 1
PositionSeparation = GetToolBarXPItemPosition(SeparatorID) ; On récupère la position de la séparation, on avait récupérer son identifiant lors de sa création.
MoveToolBarXPItem(PositionSeparation, PositionBouton1) ; On déplace la séparation avant le bouton 1
Case 100 ; Supprimer la barre d'outils
FreeToolBarXP()
EndSelect
EndIf
;- Gestion des boutons de la barre d'outils
If Event = #PB_EventGadget ; Les éléments de la librairie ToolBarXP se comporte comme des gadgets
Select EventGadgetID() ; boutons, zone de texte, ...
Case 1 ; Bouton 1 de la barre d'outils
MessageRequester("ToolBarXP", "Appui sur le bouton 'Précédent'.", 4 * 16)
Case 2 ; On appui sur le bouton de menu 2
DisplayPopupMenu(1, WindowID())
Case 3 ; Bouton 3 de la barre d'outils
MessageRequester("ToolBarXP", "Appui sur le bouton 'Suivant'.", 4 * 16)
Case 4 ; On appui sur le bouton de menu 4
DisplayPopupMenu(1, WindowID())
Case Bouton_Icone1 ; Appui sur un bouton
MessageRequester("ToolBarXP", "Appui sur le bouton 1.", 4 * 16)
Case Bouton_Icone2
MessageRequester("ToolBarXP", "Appui sur le bouton 2.", 4 * 16)
Case Bouton_Icone3
MessageRequester("ToolBarXP", "Appui sur le bouton 3.", 4 * 16)
Case Bouton_Icone4
MessageRequester("ToolBarXP", "Appui sur le bouton 4.", 4 * 16)
Case Bouton_Icone5
MessageRequester("ToolBarXP", "Appui sur le bouton 5.", 4 * 16)
Case Bouton_Icone6
MessageRequester("ToolBarXP", "Appui sur le bouton 1 de la la ligne 2 de la barre d'outils.", 4 * 16)
Case Bouton_Icone7
MessageRequester("ToolBarXP", "Appui sur le bouton 2 de la la ligne 2 de la barre d'outils.", 4 * 16)
Case MenuFonctions ; On affiche le menu avec les différentes fonctions disponibles pour modifier la barre d'outils
DisplayPopupMenu(2, WindowID())
Case Gadget_Bouton
MessageRequester("ToolBarXP", "Appui sur le ButtonGadget", 4 * 16)
Case BoutonTexte ; On a appyé sur le bouton texte
MessageRequester("ToolBarXP", "Appui sur le bouton texte", 4 * 16)
EndSelect
EndIf
Until Event = #WM_CLOSE ; On quitte l'exemple