Page 1 sur 2

[Résolu] Problème raccourcis clavier

Publié : mer. 30/mars/2011 19:41
par David02
Bonsoir,

j'ai un petit problème pour faire fonctionner un raccourci clavier.
J'aimerais faire en sorte que quand j'appuie sur la touche "Espace", mon fichier se trouvant dans une liste se lance.
J'ai essayé avec AddKeyboardShortcut() mais cela ne fonctionne pas.

Merci de m'aider

Re: Problème raccourcis clavier

Publié : mer. 30/mars/2011 20:15
par Ar-S
Donne du code s'il te plait.

Re: Problème raccourcis clavier

Publié : jeu. 31/mars/2011 8:52
par falsam
David02 a écrit : J'ai essayé avec AddKeyboardShortcut() mais cela ne fonctionne pas.
Un raccourci clavier génère un évènement du type 'Menu' car ils sont souvent associés aux élèments des menus.

je pense que vous essayer de créer un lecteur de fichiers mp3.

1-Déclarer un identifiant pour la touche Espace
Exemple #Kbd_Space

2-Affecter le raccourci
#Player : Notre fenetre
#PB_Shortcut_Space : La touche Espace
#Kbd_Space : L'identifiant de la touche à tester dans la boucle évènementiel.

AddKeyboardShortcut(#Player, #PB_Shortcut_Space, #Kbd_Space)

Un exemple simple de chargement d'un fichier mp3.

Code : Tout sélectionner

Enumeration
  #Player 
  #Son
  #ListMp3
  #Kbd_Space
EndEnumeration

Global Source.s, PlayOnOff.b

;Jouer un mp3
Procedure PlaySoundMp3()
  If LoadMovie(#Son, Source)
    PlayMovie(#Son, WindowID(#Player))
  Else
    MessageRequester("Erreur", "Le son ne peut etre lu", #MB_ICONERROR)
EndIf
EndProcedure

;ne joue plus de son
Procedure StopSoundMp3()
  StopMovie(#Son)
EndProcedure

;Initialise l'environnement  movie, ouverture du player et selection du mp3 à jouer
Procedure PlayerShow()
  If InitMovie() = 0
    MessageRequester("Ooops ", "Ne peut initialiser l'environnement movie", #MB_ICONERROR) 
    End
  EndIf
  
  ;Ouverture du player
  OpenWindow(#Player, 100, 150, 280, 280, "Jouer un MP3")
  ListIconGadget(#ListMp3, 15, 10, 250, 200,"Mp3", 190)
  TextGadget(#PB_Any, 30, 220, 300, 20, "Touche [Espace] pour jouer ou arreter la lecture")
  

  ;Affectation d'une touche de racourci 
  ;Ajoute un raccourci clavier pour la fenêtre spécifiée. 
  ;Un raccourci clavier génère un évènement du type 'Menu' 
  AddKeyboardShortcut(#Player, #PB_Shortcut_Space, #Kbd_Space)

  ;Ouvrir un fichier mp3
  Source=OpenFileRequester("Que voulez vous jouer ?", "", "Mp3|*.mp3", 0)
  If source
    AddGadgetItem(#ListMp3, -1, GetFilePart(Source))
  EndIf
  
EndProcedure

PlayerShow()

;-Boucle evenementiel
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Menu
      Select EventMenu()
        Case #Kbd_Space
          If PlayOnOff=#False
            PlayOnOff=#True
            PlaySoundMp3()
          Else
            PlayOnOff=#False
            StopSoundMp3()
          EndIf
      EndSelect
            
    Case #PB_Event_Gadget   
      
    Case #PB_Event_CloseWindow
      ;Libere la mémoire
      If IsMovie(#Son)
        FreeMovie(#Son)
      EndIf
            
      End ;Fermeture du programme
      
    EndSelect
ForEver

Re: Problème raccourcis clavier

Publié : jeu. 31/mars/2011 9:24
par David02
Merci ça fonctionne :D

Par contre, je comprends pas à quoi sert ce code?
J'ai vu qu'il y avait le commentaire mais je comprends pas pourquoi ça libère de la mémoire.

Code : Tout sélectionner

      ;Libere la mémoire
      If IsGadget(#Son)
        FreeMovie(#Son)
      EndIf
Et dans ce code j'ai vu qu'il y avait "PlatonOFF.b.
A quoi sert-il?

Code : Tout sélectionner

Global Source.s, PlatOnOff.b

En tout cas un grand merci car vous m'avez bien aidé :D

Re: Problème raccourcis clavier

Publié : jeu. 31/mars/2011 9:31
par falsam
la bibliothéque Movie permet de lire des films mais aussi des fichier mp3 par exemple.

David02 a écrit :Et dans ce code j'ai vu qu'il y avait "PlatonOFF.b.
A quoi sert-il?

Code : Tout sélectionner

Global Source.s, PlatOnOff.b
Oops !!! il fallait lire PLayOnoff. En voulant faire vite j'ai oublié de commencer mon code par EnableExplicit ce qui m'aurait indiquer immédiatement cette erreur de variable.

Re: Problème raccourcis clavier

Publié : jeu. 31/mars/2011 9:34
par David02
Ton code fonctionne en tout cas, je l'ai testé.

Donc ça rejoint le code:

Code : Tout sélectionner

If PlayOnOff=#False
            PlayOnOff=#True
            PlaySoundMp3()
          Else
            PlayOnOff=#False
            StopSoundMp3()

C'est possible de mettre un raccourci avec la touche "Entrée"? Car je ne la trouve pas dans l'aide

Re: Problème raccourcis clavier

Publié : jeu. 31/mars/2011 9:39
par falsam
#PB_Shortcut_Return :)

Si l'autocompletion est activé dans ton editeur Pure Basic, quand tu commences à taper #PB_Shortcut_ un menu contextuel (PopPup) devrait te faire apparaître l'ensemble des variables.

Re: Problème raccourcis clavier

Publié : jeu. 31/mars/2011 9:44
par David02
Oui il est activé mais moi je cherchais à chaque fois #PB_shortcut_enter lol

En tout merci de l'aide que tu m'as apporté :D

Re: [Résolu] Problème raccourcis clavier

Publié : jeu. 31/mars/2011 13:47
par falsam
Deux erreurs corrigé dans le code

PlayOnOff.b au lieu de PlatOnOff.b

et

Code : Tout sélectionner

If IsMovie(#Son)
   FreeMovie(#Son)
EndIf
au lieu de

Code : Tout sélectionner

If IsGadget(#Son)
   FreeMovie(#Son)
EndIf

Re: [Résolu] Problème raccourcis clavier

Publié : jeu. 31/mars/2011 13:56
par David02
Cela change quoi dans le programme IsMovie() et IsGadget() ?
Car il n'y avait pas d'erreur lors du programme?

Re: [Résolu] Problème raccourcis clavier

Publié : jeu. 31/mars/2011 14:19
par Ar-S
isGadget vérifie que ton gadget est initialisé alors que isMovie vérifie que ton film est initialisé.

Re: [Résolu] Problème raccourcis clavier

Publié : jeu. 31/mars/2011 16:18
par David02
Ça évite des erreurs alors ?

J'ai un autre petit problème avec la souris.
J'ai mis ce code là mais ça ne fonctionne pas.

Code : Tout sélectionner

Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
  
        Select EvenType()
          Case #PB_EventType_LeftDoubleClick : Lecture()
        EndSelect
En fait cela servirait à mettre en lecture une musique (ou film) sélectionner dans une playlist en faisant un double clique gauche.

Re: [Résolu] Problème raccourcis clavier

Publié : jeu. 31/mars/2011 16:31
par falsam
J'ai pris mon code précédent pour l'améliorer. la lecture séquentielle n'est pas encore gérer.

Ajout : du double clique, Pause, abandon de lecture, chargement d'un dossier, Volume et balance.

Code : Tout sélectionner

EnableExplicit

Enumeration
  #Player 
  #Son
  #MoviesDir
  #MovieAdd
  #DirectoryAdd
  #ListMovies
  #Volume
  #Balance
  #Kbd_On
  #Kbd_Off
  #Kbd_Pause
EndEnumeration
Define.l Event
Global Dim Movies.s (1), CountMovies.i, Movie.s, MoviesDir.s, CurrentMovie.i, MoviePlay.b, MoviePause.b

;Initialisation de la bibilothéque movie
Procedure MovieInit()
  If InitMovie() = 0
    MessageRequester("Ooops ", "Ne peut initialiser l'environnement movie", #MB_ICONERROR) 
    End 
  EndIf  
EndProcedure

;Chargement d'un fichier
Procedure MovieLoad()
  Movie=OpenFileRequester("Que voulez vous jouer ?", "", "Mp3|*.mp3", 0)
  If Movie
    ;Ajout du fichier dans le tableau des fichiers à jouer (Movies)
    Movies(CountMovies)=Movie
    
    ;Ajout du nom du fichier 
    AddGadgetItem(#ListMovies, -1, GetFilePart(Movie))
    
    ;On relie ListMp3 au tableau des sources à jouer
    SetGadgetItemData(#ListMovies, CountGadgetItems(#ListMovies)-1, CountMovies)
    
    CountMovies=CountMovies+1
    ReDim Movies(CountMovies)
  EndIf
EndProcedure

;AJout d'un dossier
Procedure MoviesLoad()
  Protected Result.i, FileName.s, FileExt.s
  ; Quel dossier selectionner
   MoviesDir = PathRequester("Dossier ou se trouve les morceaux à jouer:", MoviesDir)
     
   ; On cherche les mp3 
   If ExamineDirectory(#MoviesDir, MoviesDir, "*.*")
     Repeat
       Result = NextDirectoryEntry(#MoviesDir)
       If Result
         FileName = DirectoryEntryName(#MoviesDir)
         If FileName <> "." And FileName <> ".."
           FileExt = LCase(Right(FileName,4)) 
           If FileExt = ".mp3"
             Movies(CountMovies)=MoviesDir+FileName
             AddGadgetItem(#ListMovies, -1, GetFilePart(FileName))
             SetGadgetItemData(#ListMovies, CountGadgetItems(#ListMovies)-1, CountMovies)
             CountMovies=CountMovies+1
             ReDim Movies(CountMovies)
           EndIf  
         EndIf  
       EndIf  
     Until Result=0            
   Else
     MessageRequester("Error","Erreur de lecture" ,#MB_ICONERROR)  
   EndIf
 EndProcedure
 
;Jouer un mp3
Procedure MoviePlay()
  CurrentMovie=GetGadgetItemData(#ListMovies, GetGadgetState(#ListMovies))
  If LoadMovie(#Son, Movies(CurrentMovie))
    MoviePlay=#True
    MovieAudio(#Son, GetGadgetState(#Volume), 100-GetGadgetState(#Balance))  
    PlayMovie(#Son, WindowID(#Player))
  Else
    MessageRequester("Erreur", "Le son ne peut etre lu", #MB_ICONERROR)
EndIf
EndProcedure

;Ne joue plus de son
Procedure MovieStop()
  If IsMovie(#Son)
    MoviePlay=#False
    StopMovie(#Son)
  EndIf
EndProcedure

Procedure MoviePause()
  If IsMovie(#Son)
    If MoviePause=#False
      MoviePause=#True
      PauseMovie(#Son)
    Else
      MoviePause=#False
      ResumeMovie(#Son)
    EndIf
  EndIf
EndProcedure

;Ouverture du player et selection du mp3 à jouer
Procedure PlayerShow()
  OpenWindow(#Player, 100, 150, 300, 310, "Jouer un MP3")
  
  ButtonGadget(#MovieAdd, 10, 10, 80, 20, "Add File")
  ButtonGadget(#DirectoryAdd, 95, 10, 80, 20, "Add Directory")
  
  ListIconGadget(#ListMovies, 10, 35, 280, 200,"Mp3", 275)
   
  TrackBarGadget(#Volume, 255, 240, 25, 70, 0, 100, #PB_TrackBar_Vertical)
  SetGadgetState(#Volume, 50)
  
  TrackBarGadget(#Balance, 280, 240, 25, 70, 0, 200, #PB_TrackBar_Vertical)
  SetGadgetState(#Balance, 100)
  
  TextGadget(#PB_Any, 10, 250, 300, 20, "[Entrée] - Jouer")
  TextGadget(#PB_Any, 10, 270, 300, 20, "[Escape] - Arrêter")
  TextGadget(#PB_Any, 10, 290, 300, 20, "[Espace] - Pause")

  ;Affectation des touches de racourcis (Un raccourci génère un évènement du type 'Menu' )
  AddKeyboardShortcut(#Player, #PB_Shortcut_Return, #Kbd_On)
  AddKeyboardShortcut(#Player, #PB_Shortcut_Escape, #Kbd_Off)
  AddKeyboardShortcut(#Player, #PB_Shortcut_Space, #Kbd_Pause)
EndProcedure

;-Début du programme
CountMovies=1
MovieInit()
PlayerShow()

;-Boucle evenementiel
Repeat
  Event=WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Menu
      Select EventMenu()
        Case #Kbd_On
          MoviePlay()
          
        Case #Kbd_Off    
          MovieStop()
          
        Case #Kbd_Pause
          MoviePause()
          
      EndSelect
            
    Case #PB_Event_Gadget 
      Select EventGadget()
        Case #MovieAdd
          MovieLoad()
          
        Case #DirectoryAdd
          MoviesLoad()
          
        Case #ListMovies
          If EventType()=#PB_EventType_LeftDoubleClick
            MoviePlay()
          EndIf
          
        Case #Volume, #Balance
          If IsMovie(#Son)
            MovieAudio(#Son, GetGadgetState(#Volume), 100-GetGadgetState(#Balance))       
          EndIf
                    
      EndSelect
            
    Case #PB_Event_CloseWindow
      ;Libere la mémoire
      If IsMovie(#Son)
        FreeMovie(#Son)
      EndIf
            
      End ;Fermeture du programme
      
    EndSelect
ForEver

Re: [Résolu] Problème raccourcis clavier

Publié : jeu. 31/mars/2011 16:42
par David02
Ça fonctionne parfaitement :D :D

Juste une dernière question qui ne concerne pas le clavier ni la souris:
Quand on met une image dans le fond de la fenêtre et que l'on ajoute un TextGadget() par dessus, il y a toujours le cadre blanc autour du texte.
C'est possible de voir seulement le texte sur l'image sans avoir le cadre blanc qui fait laid?

(je sais pas si vous avez tout compris :? )

Re: [Résolu] Problème raccourcis clavier

Publié : jeu. 31/mars/2011 17:32
par Ar-S
Le plus simple est de créer un joli texte sur ton image de fond.
Sinon il va falloir que tu entres dans le monde merveilleux des API :mrgreen:

Fait de petites recherches en utilisant les termes, "skin", "skin gadget"
Sinon je te conseils de regarder attentivement la joli lib de notre ami LSI qui te permettra de skinner fenêtre et bouton de A à Z
http://www.purebasic.fr/french/viewtopi ... =3&t=10193
pour obtenir un resultat du genre :
Image

Comme tu peux le voir, ici les boutons, la fenêtre, le texte, tout est graphique (et interactif).

sinon :

Code : Tout sélectionner

Procedure WCB(WindowID, Message, wParam, lParam) 
	Result = #PB_ProcessPureBasicEvents 
	Select Message 
    Case #WM_CTLCOLORSTATIC 
      Select lParam 
        Case GadgetID(1) 
          SetBkMode_(wParam,#TRANSPARENT) 
          SetTextColor_(wParam,$0002FF) 
          ProcedureReturn GetStockObject_(#HOLLOW_BRUSH) 
      EndSelect 
  EndSelect 
	ProcedureReturn Result 
EndProcedure 

If OpenWindow(0,0,0,250,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
	TextGadget(1,10,10,200,30,"Texte transparent",0) 
	LoadFont(0, "Arial", 16) 
	SetGadgetFont(1, FontID(0)) 
	SetWindowColor(0,$CAFFFF) 
	SetWindowCallback(@WCB(),0) 
	Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf 
Non testé avec une image en fond.