Code : Tout sélectionner
UseJPEGImageDecoder()
Enumeration
#Window1
#Window2
EndEnumeration
Enumeration
#Panel1
#Panel2
#Explorer
#ViewImage
#ImageTmp
#Image
EndEnumeration
Enumeration
#Kbd_Add ;Touche de racourci +
#Kbd_Subtract; Touche de racourci -
#Kbd_Esc ;Touche de racourci Escape
#Kbd_PgUp
#Kbd_PgDown
EndEnumeration
Global Zoom.f=1 ;Facteur de zoom
Global PosFichier ; Fichier dans l'ExplorerListGadget
Declare Pc_ChargerImage()
Declare Pc_AfficherImage()
Declare Pc_ZoomImage(Pas.f)
Declare Pc_ChangerImage(Pas.b)
OpenWindow(#Window1, 0, 0, 500,400, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
PanelGadget(#Panel1, 8, 8, 484, 384)
AddGadgetItem (#Panel1, -1, "L")
ExplorerListGadget(#Explorer, 10, 108, 460, 244, "*.jpg")
SetGadgetAttribute(#Explorer, #PB_Explorer_List,2)
AddGadgetItem (#Panel1, -1,"C")
PanelGadget (#Panel2, 10, 10, 460, 340)
AddGadgetItem(#Panel2, -1, "C")
AddGadgetItem(#Panel2, -1, "D")
CloseGadgetList()
AddGadgetItem (#Panel1, -1, "C")
CloseGadgetList()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu()
Case #Kbd_Add
Pc_ZoomImage(0.05)
Case #Kbd_Subtract
Pc_ZoomImage(-0.05)
Case #Kbd_PgUp
Pc_ChangerImage(-1)
Case #Kbd_PgDown
Pc_ChangerImage(1)
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Explorer ; Play
If EventType() = #PB_EventType_LeftDoubleClick
PosFichier=GetGadgetState(#Explorer)
Pc_ChargerImage()
EndIf
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window1
End
Case #Window2
CloseWindow(#Window2)
EndSelect
EndSelect
ForEver
Procedure Pc_ChangerImage(Pas.b)
If GetGadgetItemState(#Explorer,PosFichier+Pas)&1=#PB_Explorer_File
PosFichier+Pas
Pc_ChargerImage()
EndIf
EndProcedure
Procedure Pc_ChargerImage()
file$=GetGadgetText(#Explorer)+GetGadgetItemText(#Explorer,PosFichier)
If FileSize(file$)>0
If ReadFile(1, file$)
length = Lof(1) ; Lit la taille en octets du fichier
*MemoryID = AllocateMemory(length) ; alloue un bloc mémoire de la taille du fichier
If *MemoryID
ReadData(1, *MemoryID, length) ; Lit les données du fichier et les place dans le bloc mémoire
CloseFile(1)
Resultat = CatchImage(#ImageTmp, *MemoryID, length)
If Resultat<>0
CopyImage(#ImageTmp, #Image)
;Zoom à 100%
Zoom=1
Pc_AfficherImage()
ProcedureReturn #True
EndIf
EndIf
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Procedure Pc_ZoomImage(Pas.f)
CopyImage(#ImageTmp, #Image)
Zoom+Pas
SetWindowTitle(#Window2, "MutanteKey - Zoom "+Str(Zoom*100)+" %")
;Mise à jour de l'image dans son gadget
If Zoom>0.1
ResizeImage(#Image, ImageWidth(#Image)*Zoom, ImageHeight(#Image)*Zoom)
SetGadgetState(#ViewImage, ImageID(#Image))
ResizeWindow(#Window2, #PB_Ignore, #PB_Ignore, ImageWidth(#Image), ImageHeight(#Image))
Else
Zoom=0.1
EndIf
EndProcedure
Procedure Pc_AfficherImage()
If IsWindow(#Window2)=0
OpenWindow(#Window2, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "MutanteKey");, #PB_Window_BorderLess)
;On attache les touches de racourci à la fenetre de visualisation d'une image (#Window2)
AddKeyboardShortcut(#Window2, #PB_Shortcut_Add, #Kbd_Add)
AddKeyboardShortcut(#Window2, #PB_Shortcut_Subtract, #Kbd_Subtract)
AddKeyboardShortcut(#Window2, #PB_Shortcut_Escape, #Kbd_Esc)
AddKeyboardShortcut(#Window2, #PB_Shortcut_Prior, #Kbd_PgUp)
AddKeyboardShortcut(#Window2, #PB_Shortcut_Next, #Kbd_PgDown)
Else
ResizeWindow(#Window2,0,0,ImageWidth(#Image), ImageHeight(#Image))
EndIf
SetWindowTitle(#Window2, "MutanteKey - Zoom 100%")
ImageGadget(#ViewImage, 0,0,300,200,ImageID(#Image))
EndProcedure
Remarque : La gestion des évènements et les interactions avec un ExplorerListGadget sont très très limitées. Si tu souhaites "complexifier" tes actions, il faudra songer à utiliser plutôt un ListIconGadget...