Lib Video

Programmation d'applications complexes
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

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 ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

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.
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

Régis !!!! Au secours !!!! A l'aide !!!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Pingtix a écrit :Régis !!!! Au secours !!!! A l'aide !!!
Avant d'appeler à l'aide, il aurait peut-être fallu lire le code d'exemple que Régis livre avec la librairie.

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

Tu sais que tu as le droit de l'utiliser, ton prog pour faire les fichiers d'aide! :wink:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

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. :wink:

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
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

J'ai lu le code d'exemple ! C'est avec l'exemple que j'ai pigé comment fonctionne la lib.
Mais vu qu'a ce moment là je ne savais pas ce que c'etait qu'un callback....

En tout cas, ça marche très bien avec addcallback merci beaucoup pour ces explications !
Répondre