

Toutefois, comment gère-t'on conjointement les évènements de gadgets de type ListIcon, Editor,... ???
L'emploi sumultané de WaitWindowEvent() et WaitSkinWindowEvent() ne fonctionne pas. Le premier "freezant" (logiquement) le second...
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
CreateImage(0, 100, 100, 32 | #PB_Image_Transparent)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(50, 50, 40, $80FF5087)
StopDrawing()
ImageGadget(0, 0, 0, 100, 100, ImageID(0))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
CreateImage(0, 100, 100, 32 | #PB_Image_Transparent)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(50, 50, 40, $80FF5087)
StopDrawing()
ButtonImageGadget(0, 0, 0, 100, 100, ImageID(0))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
oui c'est ce que je voulais dire, dommage qu'on voit le carré du button. (heureusement la skinlib est là ^^)Le Soldat Inconnu a écrit : Sauf que j'ai le bouton dessous.
Code : Tout sélectionner
UsePNGImageDecoder()
Enumeration
#wincode
#NOM
#CLE1
#Text_Nom
#Text_CLE
#enregistrer
#Enr_Annuler
#Text_DEVER
#Timer1
EndEnumeration
Declare About()
Declare TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Declare S_Etape1()
Declare S_Etape2()
Declare COPYdir()
Declare GOCOPY(*ldvmultimedia)
Declare.s recupeDate()
declare CacheACCUEIL()
declare AffichACCUEIL()
declare AffichSAUVER()
declare CacheSAUVER()
declare.q GetDiskFreeSpace(Lecteur.s, Type.l = 0)
declare.s DisplayDiskFreeSpace(Taille.q, Unite.l = -1, NbDecimals.l = -1)
;Inclusion des images datas
IncludeFile("skin.pbi") ; Insertion des datas
; Chargement des images
img_Normal=CatchImage(10, ?n_img)
img_Select=CatchImage(11, ?s_img)
img_Item=CatchImage(12, ?i_img)
; Chargement de la font
arialBig=LoadFont(100,"arial",16,#PB_Font_HighQuality)
arialMed=LoadFont(101,"arial",12,#PB_Font_Bold|#PB_Font_HighQuality)
Global AUTOQUIT$,FINPERIODE$,SOURCE$,DEST$,LASTSAVNAME$,LASTSAVDATE$,LIC$,USER$,LecteurDEST$,DernierRep$,Apropos$,lancement$,pass$,lancrypt$
Global DefRep$,Pref$
Global Date$,Time$,LaDate$,bilan$,trial
Global RC.s=chr(10)
Global CacheACCUEIL,CacheSAUVER,SS,SD
Global v$="1.0 alpha 8 build 17"
Global RepAcopier$
GLOBAL GOCOPY=0
GLOBAL ANNUL=0
global taille
global TUE_THREAD
Global TailleSOURCE.q,TailleDEST.q,afficheBARRE,Full.l
afficheBARRE=0
TUE_THREAD=0
TailleSOURCE=0
TailleDEST=0
DefRep$=GetCurrentDirectory()
; ------COULEUR DES ITEMS--------
#C_ACCUEIL=$9999CC
#C_SAUVER=$6666CC
;#C_QUITTER=$99CCCC
#C_X=$66CCCC
#C_APROPOS=$339999
#C_EDITOR=$336666
#C_HORIZONTAL=$333333
#C_Fond=$CC00FF
; ------------------------------
;QuoiLister
#dossier = #PB_DirectoryEntry_Directory
#fichier = #PB_DirectoryEntry_File
#all = -1
;Mode (afficher les extensions pour les fichiers ou pas)
#EXToui=1
#EXTnon=0
Directory$ = "c:\"
If CreateSkinWindow(0, #PB_Ignore, #PB_Ignore, titre$, #PB_Window_ScreenCentered|#PB_Window_Invisible, 0, 10, 11, 11, 11, 10, 12, 12, 0,0)
Handle = WindowID (0)
StickyWindow(0,1)
SkinItemMoveWindow(#C_Fond, 1)
HideSkinWindow(0, 0)
EditorGadget(1,SkinItemX(#C_EDITOR),SkinItemY(#C_EDITOR),SkinItemWidth(#C_EDITOR),SkinItemHeight(#C_EDITOR))
SetGadgetFont(1,fontID(101))
RetourAuto(1)
SetGadgetText(1,bilan$)
;-GADGETs CLASSIQUEs---------------
;Global
Frame3DGadget(3,SkinItemX(#C_EDITOR),SkinItemY(#C_EDITOR),SkinItemWidth(#C_EDITOR),SkinItemHeight(#C_EDITOR),TXTframe$)
;SAUVE-----------------------------------------------
;Etape 1
TextGadget(4, SkinItemX(#C_EDITOR)+10, SkinItemY(#C_EDITOR)+30, 355, 20, "ETAPE 1 - Sélectionnez le répertoire que vous voulez sauvegarder.", #SS_CENTERIMAGE)
ButtonGadget(10, SkinItemX(#C_EDITOR)+10, SkinItemY(#C_EDITOR)+55, 365, 25, "Choisir le répertoire à sauvegarder")
SetGadgetFont(10,FontID(101))
StringGadget(6, SkinItemX(#C_EDITOR)+10, 160, 365, 20, "Ici apparaitra le chemin du répertoire que vous voulez sauvegarder.", #PB_String_ReadOnly|#ES_CENTER)
; Etape 2
TextGadget(5, SkinItemX(#C_EDITOR)+10, SkinItemY(#C_EDITOR)+140, 282, 22, "ETAPE 2 - Sélectionnez le répertoire de déstinnation", #SS_CENTERIMAGE)
ButtonGadget(9, SkinItemX(#C_EDITOR)+10, SkinItemY(#C_EDITOR)+170, 365, 25, "Choisir l'endroit ou sera sauvé le répertoire")
SetGadgetFont(9,FontID(101))
StringGadget(7, SkinItemX(#C_EDITOR)+10, SkinItemY(#C_EDITOR)+200, 365, 19, "Ici apparaitra le chemin du répertoire de destination", #PB_String_ReadOnly|#ES_CENTER)
;créer la sauvegarde
ButtonGadget(8, SkinItemX(#C_EDITOR)+10, 350, 365, 75, "Créer la sauvegarde maintenant !")
SetGadgetFont(8,FontID(101))
CacheACCUEIL=0
CacheSAUVER()
;FOOTER
SetSkinItemText(#C_HORIZONTAL,"Bienvenue sur LDV MULTIMEDIA Sauvegarde Facile !")
SetSkinItemFont(#C_HORIZONTAL,FontID(100),$00,$00)
;-Lance le TIMER
SetTimer_(Handle, #timer1 , 500, @TimerProc())
Repeat
if TUE_THREAD=1
if IsThread(thread)<>0
KillThread(thread)
endif
If CacheSAUVER=0
CacheSAUVER()
EndIf
if CacheACCUEIL=1
AffichACCUEIL()
EndIf
TUE_THREAD=0
EndIf
;-EVENEMENTS--------------------
;-*-- LES GADGETS SKIN ------
Event = WaitSkinWindowEvent()
Select EventSkinItem()
Case #C_APROPOS
About()
Case #C_X
End
;{-ACCUEIL
Case #C_ACCUEIL
If CacheSAUVER=0
CacheSAUVER()
EndIf
if CacheACCUEIL=1
AffichACCUEIL()
EndIf
SetGadgetText(1,bilan$)
;}
;{-SAUVER
Case #C_SAUVER
if CacheACCUEIL=0
CacheACCUEIL()
endif
if CacheSAUVER=1
AffichSAUVER()
endif
SetSkinItemText(#C_HORIZONTAL,"Commencez par l'étape 1")
;}
DisableGadget(10,0)
DisableGadget(8,1) ; GO
DisableGadget(9,1)
EndSelect
;-*-- LES GADGETS CLASSIQUES------
GadgetEvent=WindowEvent()
Select EventGadget()
Case 10 ; Bouton source
S_Etape1()
Case 9 ; Bouton destination
S_Etape2()
case 8 ; bouton COPY
COPYdir()
If GOCOPY=1
;--Vérifie que source < Lecteur destination----
debug "Source : "+SOURCE$
PoidsSource$=str(GetDirectorySize(SOURCE$))
debug "Poids : "+PoidsSource$
LecteurDEST$=Mid(DEST$,1,3)
debug "lecteur DEST$ : "+LecteurDEST$
PoidsDEST$=DisplayDiskFreeSpace(GetDiskFreeSpace(LecteurDEST$, 0))
debug "Espace restant : "+PoidsDEST$
if val(PoidsSource$)<val(PoidsDEST$)
;Désactivation des boutons pendant la copie
DisableGadget(8,1)
DisableGadget(9,1)
DisableGadget(10,1)
TailleSOURCE=GetDirectorySize(SOURCE$)
afficheBARRE=1
thread=CreateThread(@GOCOPY(),200)
debug GOCOPY
else
GOCOPY=0
SetSkinItemText(#C_HORIZONTAL,"Copie impossible, plus assez de place sur "+LecteurDEST$)
DisableGadget(9,1)
endif
elseif GOCOPY=0
if IsThread(thread)<>0
KillThread(thread)
endif
elseif ANNUL=1
EndIf
EndSelect
Until event = #PB_Event_CloseWindow
EndIf
;-FIN EVENEMENTS-------------------------
; Auteur : Le Soldat Inconnu
Procedure.q GetDiskFreeSpace(Lecteur.s, Type.l = 0)
; lecteur = nom du lecteur
; type = choix de la réponse, 0 = espace libre sur le lecteur, 1 = taille du lecteur
Protected EspaceLibre.q, Taille.q, resultat.q
GetDiskFreeSpaceEx_(Lecteur, @EspaceLibre, @Taille, 0)
Select Type
Case 0 : resultat = EspaceLibre
Case 1 : resultat = Taille
EndSelect
ProcedureReturn resultat
EndProcedure
Procedure.s DisplayDiskFreeSpace(Taille.q, Unite.l = -1, NbDecimals.l = -1)
Protected Val.q, Txt.s
If Unite = -1
NbDecimals = 0
Unite = 1
Val = 1024
EndIf
ProcedureReturn StrF(Taille / Val, NbDecimals)
EndProcedure
Procedure.s RecupeDate()
Date$ = FormatDate("%dd/%mm/%yyyy", Date())
Time$ = FormatDate("%hh:%ii", Date())
LaDate$=Date$+ " à "+Time$
ProcedureReturn LaDate$
EndProcedure
;{- PROCEDURES SAUVEGARDES
;-**Etape 1
procedure S_Etape1()
if SOURCE$=""
SOURCE$="c:\"
EndIf
RepAcopier$=PathRequester("Répertoire à sauvegarder",SOURCE$)
If RepAcopier$
debug RepAcopier$
SOURCE$=RepAcopier$
; Nom du dernier repertoire
DernierRep$=ReverseString(RepAcopier$)
PosSlash=FindString(DernierRep$,"\",3)
DernierRep$=mid(DernierRep$,2,PosSlash-2)
DernierRep$=ReverseString(DernierRep$)
DernierRep$+"\"
debug "Dernier Rep : "+DernierRep$
SetGadgetText(6,SOURCE$)
SetSkinItemText(#C_HORIZONTAL,"Passez maintenant à l'étape 2")
DisableGadget(9,0)
else
SetSkinItemText(#C_HORIZONTAL,"Annulé par l'utilisateur")
EndIf
EndProcedure
;-** Etape 2
procedure S_Etape2()
RepCible$=PathRequester("Répertoire de destination","c:\")
If RepCible$
DEST$=RepCible$
SetGadgetText(7,DEST$)
SetSkinItemText(#C_HORIZONTAL,"Vous pouvez lancer la copie")
DisableGadget(8,0)
else
SetSkinItemText(#C_HORIZONTAL,"Annulé par l'utilisateur")
EndIf
EndProcedure
;-** COPYdir
Procedure COPYdir()
ANNUL=0
QuestionSav=MessageRequester("Résumé","Répertoire source : "+rc+SOURCE$+rc+rc+"Répertoire de destination : "+rc+DEST$+DernierRep$+rc+rc+"Souhaitez vous ajouter 'la date' en sous repertoire pour votre sauvegarde ?"+rc+"(nous vous conseillons d'utiliser cette option)"+rc+"Ce qui donnerait : "+rc+DEST$+FormatDate("%yyyy_%mm_%dd", Date())+"\"+DernierRep$,#PB_MessageRequester_YesNoCancel|#MB_ICONINFORMATION ) ;
If QuestionSav = 6 ; oui
DEST$+FormatDate("%yyyy-%mm-%dd", Date())+"\"+DernierRep$
GOCOPY=1
elseif QuestionSav=7
GOCOPY=1
DEST$+DernierRep$
else
GOCOPY=0
SetSkinItemText(#C_HORIZONTAL,"Annulé par l'utilisateur")
ANNUL=1
EndIf
EndProcedure
;-** GOCOPY
Procedure GOCOPY(*ldvmultimedia)
MakeSureDirectoryPathExists(DEST$) ; DroopyLib - Si vous ne l'avez pas, soyez sur que le rep destination existe
Copiage = CopyDirectory(SOURCE$, DEST$, "" ,#PB_FileSystem_Recursive|#PB_FileSystem_Force)
if Copiage=0
SetSkinItemText(#C_HORIZONTAL,"Impossible de copier le répertoire source !")
afficheBARRE=0 : GOCOPY=0 : TUE_THREAD=1
else
SetSkinItemText(#C_HORIZONTAL,"La copie est terminée")
Date$ = FormatDate("%dd/%mm/%yyyy", Date())
Time$ = FormatDate("%hh:%ii", Date())
LaDate$=Date$+ " à "+Time$
afficheBARRE=0
TailleSOURCE=0
TailleDEST=0
GOCOPY=0
TUE_THREAD=1
EndIf
ProcedureReturn TUE_THREAD
EndProcedure
; PROCEDURES D'AFFICHAGE/MASQUAGE des gadgets
Procedure AffichACCUEIL()
HideGadget(1,0)
HideGadget(3,1)
CacheACCUEIL=0
ProcedureReturn CacheACCUEIL
EndProcedure
Procedure CacheACCUEIL()
HideGadget(1,1)
CacheACCUEIL=1
ProcedureReturn CacheACCUEIL
EndProcedure
Procedure CacheSAUVER()
For i = 4 to 10
Hidegadget(i,1)
next
HideGadget(3,1)
CacheSAUVER=1
ProcedureReturn CacheSAUVER
EndProcedure
Procedure AffichSAUVER()
For i = 4 to 10
Hidegadget(i,0)
next
HideGadget(3,0)
CacheSAUVER=0
ProcedureReturn CacheSAUVER
EndProcedure
Procedure About()
If CacheSAUVER=0
CacheSAUVER()
EndIf
if CacheACCUEIL=1
AffichACCUEIL()
EndIf
Apropos$=" LDV MULTIMEDIA - Sauvegarde Facile !"+rc+rc
SetGadgetText(1,Apropos$)
EndProcedure
;-PROCEDURE TIMER
;Original : Dobro
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Select uMsg
Case #WM_TIMER
Select idEvent
Case #timer1
if afficheBARRE=1
TailleDEST=GetDirectorySize(DEST$)
if TailleDEST<>TailleSOURCE
debug "source : "+SOURCE$
debug "taille :"+str(TailleSOURCE)
debug "Dest : "+DEST$
debug "poids :"+str(TailleDEST)
Full=TailleSOURCE-TailleDEST
debug "Progression : "+str(Full)
SetSkinItemText(#C_HORIZONTAL,"copie en cours : "+str(Full))
else
afficheBARRE=0
EndIf
endif
EndSelect
EndSelect
EndProcedure
Code : Tout sélectionner
;-<>-Boucles Début
Repeat
event.l = WaitSkinWindowEvent()
Select EventSkinWindow() ; Fenêtre skinnée qui a reçu un évènement
;-=====================================================
;- EVENEMENTS FENETRE F0 -> SKIN
;-=====================================================
Case #F0 ; Fenêtre principale 1
Select EventSkinItem() ; Item appuyé
Case #ITEMa_F0
If OpenWindow(100,800,450,100,400,"F1",#PB_Window_SystemMenu)
Debug "Liste 1"
Else
Debug "chiasse"
EndIf
Case #ITEMb_F0
If OpenWindow(100,800,450,100,400,"F2",#PB_Window_SystemMenu)
Debug "Liste 2"
Else
Debug "chiasse"
EndIf
Case #Quit_F0
Debug "quitter"
quitForm1=1
EndSelect
;-=====================================================
;- EVENEMENTS FENETRE F1
;-=====================================================
Case #F1 ; Fenetre 2
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #ListeF1
Select EventType()
Case #PB_EventType_LeftClick
EndSelect
Case #boutonF1 ; quitter
quitForm1=1
EndSelect
EndSelect
;-=====================================================
;- EVENEMENTS FENETRE F2
;-=====================================================
Case F2 ; Fenetre 3
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #ListF2
Select EventType()
Case #PB_EventType_LeftClick
EndSelect
Case #boutonA_F2
If OpenWindow(100,800,450,100,400,"F3",#PB_Window_SystemMenu)
Debug "Liste 1"
Else
Debug "chiasse"
EndIf
Case #boutonB_F2
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #PLAYLIST
EndSelect
EndSelect
;-=====================================================
;- EVENEMENTS FENETRE F3
;-=====================================================
Case #F3 ; Fenetre 3
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #StringF3
Case #boutonF3 ; quitter
quitForm1=1
EndSelect
EndSelect
EndSelect
Until quitForm1=1
ta lib parait pas mal , cependant elle demanderai une doc ( ou une partie de html )Le Soldat Inconnu a écrit :moi, ça me semble bon comme ça
Il faut remplacer WaitWindowEvent() par WaitSkinWindowEvent(), il ne faut surtout pas mettre les 2
WaitSkinWindowEvent() fais comme WaitWindowEvent() sauf qu'il ajoute la gestion des gadgets skinnés