Un petit code récupéré ad hoc sur une de mes applis qui créé un MessageRequester custom avec jusqu'à trois boutons pour les principales options de choix manquantes dans PB par rapport à Windows. L'affichage et la gestion de deux CheckBox est également possible.
Il peut être adapté pour d'autres usages (Changement du texte des boutons, rajout de gadgets, etc.)
4 exemples d'utilisations sont fournis.
J'ai fait des tests et j'espère simplement ne pas avoir induit de bogues en découpant le code qui était intégré dans mon source un peu différemment.
Code : Tout sélectionner
EnableExplicit
;{ ════ PLUGINS ════
UsePNGImageDecoder()
;}
;{ ════ ENUMERATIONS ════
Runtime Enumeration FenetresFilles 50
#FEN_BOITEMESSAGE
EndEnumeration
Runtime Enumeration GadgetsFenFilles 100 ; Gadgets fenêtres filles
#GAD_FBM_IM_IMAGE ; Gadgets fenêtre boîte message
#GAD_FBM_BT_OPTION1
#GAD_FBM_BT_OPTION2
#GAD_FBM_BT_BOUTON3
#GAD_FBM_BT_BOUTON2
#GAD_FBM_BT_BOUTON1
EndEnumeration
Enumeration MenusRaccourcis ; Menus & raccourcis-clavier
#RACCOURCI_FBM_ENTREE ; ENTRÉE
#RACCOURCI_FBM_OK ; O
#RACCOURCI_FBM_ALTOK ; ALT+O
#RACCOURCI_FBM_OUI ; O
#RACCOURCI_FBM_ALTOUI ; ALT+O
#RACCOURCI_FBM_NON ; N
#RACCOURCI_FBM_ALTNON ; ALT+N
#RACCOURCI_FBM_ANNULER ; A
#RACCOURCI_FBM_ALTANNULER ; ALT+A
#RACCOURCI_FBM_REESSAYER ; R
#RACCOURCI_FBM_ALTREESSAYER ; ALT+R
#RACCOURCI_FBM_IGNORER ; I
#RACCOURCI_FBM_ALTIGNORER ; ALT+I
#RACCOURCI_FBM_CONTINUER ; C
#RACCOURCI_FBM_ALTCONTINUER ; ALT+C
#RACCOURCI_FBM_ESCAPE ; ESCAPE
EndEnumeration
Enumeration DialoguesXML
#XML
#XML_FENBOITEMSG
EndEnumeration
Enumeration XML
#XML_BOITEMSG
EndEnumeration
Enumeration Images
#IMG_RESSOURCES
#IMG_BM_ERREUR
#IMG_BM_QUESTION
#IMG_BM_ATTENTION
#IMG_BM_INFORMATION
#IMG_BM_OK
EndEnumeration
;}
;{ ════ STRUCTURES ════
Structure PARAMBOITEMSG
Titre.s
Message.s
Options.a
BoutonDefaut.a
ValeurEchap.a
Option1.a
Option1Texte.s
Option2.a
Option2Texte.s
Gadget.l
FenetreParente.u
ValeurRetour.a
EndStructure
;}
;{ ════ CONSTANTES ════
;{ ════ CONSTANTES BOUTONS MESSAGEREQUESTER ════
#PB_MessageRequester_Ok2Cancel=#MB_OKCANCEL ; 1
#PB_MessageRequester_AbortRetryIgnore=#MB_ABORTRETRYIGNORE ; 2
#PB_MessageRequester_RetryCancel=#MB_RETRYCANCEL ; 5
#PB_MessageRequester_CancelRetry2Continue=6 ; 6
;}
;{ ════ CONSTANTES ICONES MESSAGEREQUESTER ════
#PB_MessageRequester_Question=#MB_ICONQUESTION ; 32
#PB_MessageRequester_Check=80 ; 80
;}
;{ ════ CONSTANTES REPONSES MESSAGEREQUESTER ════
#PB_MessageRequester_Ok2=1 ; 1
#PB_MessageRequester_Abort=3 ; 3
#PB_MessageRequester_Retry=4 ; 4
#PB_MessageRequester_Ignore=5 ; 5
#PB_MessageRequester_Retry2=10 ; 10
#PB_MessageRequester_Continue=11 ; 11
;}
;}
;{ ════ VARIABLES GLOBALES ════
Global.PARAMBOITEMSG ParamBoiteMsg
;}
;{ ════ MAPS ════
Global NewMap TextesGadgets.s() ;{
TextesGadgets("BT-BM"+Str(#PB_MessageRequester_Ok))="&Ok,"+Str(#PB_MessageRequester_Ok)
TextesGadgets("BT-BM"+Str(#PB_MessageRequester_Ok2Cancel))="&Ok,&Annuler,"+Str(#PB_MessageRequester_Ok2)+","+Str(#PB_MessageRequester_Cancel)
TextesGadgets("BT-BM"+Str(#PB_MessageRequester_AbortRetryIgnore))="&Abandonner,&Réessayer,&Ignorer,"+Str(#Pb_MessageRequester_Abort)+","+Str(#PB_MessageRequester_Retry)+","+Str(#PB_MessageRequester_Ignore)
TextesGadgets("BT-BM"+Str(#PB_MessageRequester_YesNoCancel))="&Oui,&Non,&Annuler,"+Str(#PB_MessageRequester_Yes)+","+Str(#PB_MessageRequester_No)+","+Str(#PB_MessageRequester_Cancel)
TextesGadgets("BT-BM"+Str(#PB_MessageRequester_YesNo))="&Oui,&Non,"+Str(#PB_MessageRequester_Yes)+","+Str(#PB_MessageRequester_No)
TextesGadgets("BT-BM"+Str(#PB_MessageRequester_RetryCancel))="&Réessayer,&Annuler,"+Str(#PB_MessageRequester_Retry)+","+Str(#PB_MessageRequester_Cancel)
TextesGadgets("BT-BM"+Str(#PB_MessageRequester_CancelRetry2Continue))="&Annuler,&Réessayer,&Continuer,"+Str(#PB_MessageRequester_Cancel)+","+Str(#PB_MessageRequester_Retry2)+","+Str(#PB_MessageRequester_Continue)
;}
;}
;-══════════════════════════════════════════════════════════════════════════════════════════════════════
; Découpage des images affichées dans la boîte de message
Procedure Pc_Decoupage_ImagesGadgets()
Protected.a Compteur
CatchImage(#IMG_RESSOURCES,?Image_BM_Debut,?Image_BM_Fin-?Image_BM_Debut)
For Compteur=0 To 4
GrabImage(#IMG_RESSOURCES,#IMG_BM_ERREUR+Compteur,Compteur*48,0,48,48)
Next
FreeImage(#IMG_RESSOURCES)
EndProcedure
; Ouverture dialogues XML
Procedure.a Fc_Fenetres_OuvertureDialogueXML(ArgArbreXML.u,ArgDialogueXML.u,ArgChaineXML.s,ArgNomFenetre.s,ArgIdFenetreParente.i=0)
Protected.i NoDialogue
If ArgChaineXML
If ParseXML(ArgArbreXML,ArgChaineXML)
If XMLStatus(ArgArbreXML)=#PB_XML_Success
If CreateDialog(ArgDialogueXML)
If ArgIdFenetreParente<>0
NoDialogue=OpenXMLDialog(ArgDialogueXML,ArgArbreXML,ArgNomFenetre,0,0,0,0,ArgIdFenetreParente)
Else
NoDialogue=OpenXMLDialog(ArgDialogueXML,ArgArbreXML,ArgNomFenetre,0,0,0,0)
EndIf
If NoDialogue
ProcedureReturn #True
Else
Debug " Erreur : "+DialogError(ArgDialogueXML)
EndIf
FreeDialog(ArgDialogueXML)
EndIf
FreeXML(ArgArbreXML)
Else
Debug " Ligne : "+Str(XMLErrorLine(ArgArbreXML))+" Colonne : "+Str(XMLErrorPosition(ArgArbreXML))
Debug " No erreur : "+XMLStatus(ArgArbreXML)+" "+XMLError(ArgArbreXML)
;Debug ComposeXML(ArgArbreXML)
EndIf
Else
Debug " Ligne : "+Str(XMLErrorLine(ArgArbreXML))+" Colonne : "+Str(XMLErrorPosition(ArgArbreXML))
Debug " No erreur : "+XMLStatus(ArgArbreXML)+" "+XMLError(ArgArbreXML)
;Debug ComposeXML(ArgArbreXML)
EndIf
EndIf
EndProcedure
; Gestion fermeture boîte de message
Procedure Pc_FenBoiteMessage_Traitement(ArgAction.a)
ClearStructure(@ParamBoiteMsg,PARAMBOITEMSG)
With ParamBoiteMsg
If IsGadget(#GAD_FBM_BT_OPTION1):\Option1=GetGadgetState(#GAD_FBM_BT_OPTION1):EndIf
If IsGadget(#GAD_FBM_BT_OPTION2):\Option2=GetGadgetState(#GAD_FBM_BT_OPTION2):EndIf
\ValeurRetour=ArgAction
EndWith
ProcedureReturn #True
EndProcedure
; Gestion raccourcis boîte de message
Procedure.b Fc_FenBoiteMessage_TraitementRaccourci(ArgAction.u)
Protected.u ValeurGadget
Protected.a ValeurRetour=#True
If ArgAction=#RACCOURCI_FBM_ENTREE
If GetActiveGadget()<0:ProcedureReturn:EndIf
ValeurGadget=GetGadgetData(GetActiveGadget())
If ValeurGadget=0:ProcedureReturn:EndIf
Else
Select ArgAction
Case #RACCOURCI_FBM_OK,#RACCOURCI_FBM_ALTOK:ValeurGadget=#PB_MessageRequester_Ok
Case #RACCOURCI_FBM_OUI,#RACCOURCI_FBM_ALTOUI:ValeurGadget=#PB_MessageRequester_Yes
Case #RACCOURCI_FBM_NON,#RACCOURCI_FBM_ALTNON:ValeurGadget=#PB_MessageRequester_No
Case #RACCOURCI_FBM_ANNULER,#RACCOURCI_FBM_ALTANNULER:ValeurGadget=#PB_MessageRequester_Cancel
Case #RACCOURCI_FBM_REESSAYER,#RACCOURCI_FBM_ALTREESSAYER:ValeurGadget=#PB_MessageRequester_Retry
Case #RACCOURCI_FBM_IGNORER,#RACCOURCI_FBM_ALTIGNORER:ValeurGadget=#PB_MessageRequester_Ignore
Case #RACCOURCI_FBM_CONTINUER,#RACCOURCI_FBM_ALTCONTINUER:ValeurGadget=#PB_MessageRequester_Continue
EndSelect
EndIf
Pc_FenBoiteMessage_Traitement(ValeurGadget)
ProcedureReturn ValeurRetour
EndProcedure
; Gestion évènements boîte de message
Procedure Pc_FenBoiteMessage_GestionEvenements()
Protected.l Evenmt,TypeEvenmt,NoFenetre,NoGadget,EvenmtMenu
Repeat
Evenmt=WaitWindowEvent()
NoFenetre=EventWindow()
TypeEvenmt=EventType()
Select NoFenetre
Case #FEN_BOITEMESSAGE ;{
Select Evenmt
Case #PB_Event_CloseWindow ;{
ParamBoiteMsg\ValeurRetour=ParamBoiteMsg\ValeurEchap
Break ;}
Case #PB_Event_Menu ;{
EvenmtMenu=EventMenu()
Select EvenmtMenu
Case #RACCOURCI_FBM_ESCAPE,#RACCOURCI_FBM_ANNULER,#RACCOURCI_FBM_ALTANNULER ;{
ParamBoiteMsg\ValeurRetour=ParamBoiteMsg\ValeurEchap
Break ;}
Case #RACCOURCI_FBM_ENTREE,#RACCOURCI_FBM_OK,#RACCOURCI_FBM_ALTOK,#RACCOURCI_FBM_OUI,#RACCOURCI_FBM_ALTOUI,#RACCOURCI_FBM_NON,#RACCOURCI_FBM_ALTNON,#RACCOURCI_FBM_ANNULER,#RACCOURCI_FBM_ALTANNULER,#RACCOURCI_FBM_REESSAYER,#RACCOURCI_FBM_ALTREESSAYER,#RACCOURCI_FBM_IGNORER,#RACCOURCI_FBM_ALTIGNORER,#RACCOURCI_FBM_CONTINUER,#RACCOURCI_FBM_ALTCONTINUER ;{
If Fc_FenBoiteMessage_TraitementRaccourci(EvenmtMenu):Break:EndIf ;}
EndSelect ;}
Case #PB_Event_Gadget ;{
NoGadget=EventGadget()
Select NoGadget
Case #GAD_FBM_BT_BOUTON1,#GAD_FBM_BT_BOUTON2,#GAD_FBM_BT_BOUTON3 ;{
Pc_FenBoiteMessage_Traitement(GetGadgetData(NoGadget))
Break;}
EndSelect ;}
EndSelect ;}
EndSelect
ForEver
If NoFenetre=#FEN_BOITEMESSAGE
If IsXML(#XML_BOITEMSG)
If IsDialog(#XML_FENBOITEMSG)
RemoveKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_All)
FreeDialog(#XML_FENBOITEMSG)
EndIf
FreeXML(#XML_BOITEMSG)
EndIf
EndIf
EndProcedure
; Définition UI fenêtre Boîte de dialogue Message
Procedure.a Fc_FenBoiteMessage_Affichage()
Protected.a Boutons,NbBoutons,NbLignes,Compteur
Protected.b Image
Protected.s ChaineXML
With ParamBoiteMsg
Image=(\Options>>3<<3)/16-1
Debug image
NbLignes=CountString(\Message,Chr(10))+1
Boutons=\Options-\Options>>3<<3
Select Boutons
Case #PB_MessageRequester_Ok2Cancel,#PB_MessageRequester_YesNo,#PB_MessageRequester_RetryCancel
NbBoutons=2
Case #PB_MessageRequester_AbortRetryIgnore,#PB_MessageRequester_YesNoCancel,#PB_MessageRequester_CancelRetry2Continue
NbBoutons=3
Default
NbBoutons=1
EndSelect
ChaineXML="<?xml version='1.0' encoding='UTF-8'?>"+Chr(10)+ ;{
"<dialogs>"+Chr(10)+
" <window id='#FEN_BOITEMESSAGE' name='FEN_BOITEMESSAGE' text='"+EscapeString(\Titre,#PB_String_EscapeXML)+"' margin='top:20,left:24,right:24,bottom:16' height='160' width='600' minwidth='auto' minheight='auto' maxwidth='auto' maxheight='auto' flags='#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered'>"+Chr(10)+
" <vbox spacing='0' expand='item:1'>"+Chr(10)+
" <vbox>"+Chr(10)+
" <hbox spacing='4' expand='item:3'>"+Chr(10)
If Image>=0
ChaineXML+" <vbox spacing='0' expand='no' align='top'>"+Chr(10)
If NbLignes>2
ChaineXML+" <singlebox expand='no' align='top,left'/>"+Chr(10)
EndIf
ChaineXML+" <image id='#GAD_FBM_IM_IMAGE' name='GAD_FBM_IM_IMAGE' width='50' height='50'/>"+Chr(10)+
" </vbox>"+Chr(10)+
" <singlebox margin='top:8,right:24' expand='no'/>"+Chr(10)
EndIf
ChaineXML+" <vbox align='' spacing='0' expand='no'>"+Chr(10)
For Compteur=1 To NbLignes
ChaineXML+" <text id='#Pb_Any' name='GAD_FBM_LIB_MESSAGE"+Str(Compteur)+"' text='"+EscapeString(StringField(\Message,Compteur,Chr(10)),#PB_String_EscapeXML)+"'/>"+Chr(10)
Next
ChaineXML+" </vbox>"+Chr(10)+
" </hbox>"+Chr(10)+
" </vbox>"+Chr(10)+
" <singlebox height='0' expand='no' align='left'/>"+Chr(10)
If \Option1Texte+\Option2Texte
ChaineXML+" <vbox expand='no'>"+Chr(10)+
" <hbox spacing='8' expand='no'>"+Chr(10)+
" <singlebox height='0' expand='no' align='left'/>"+Chr(10)+
" <vbox align='' expand='no'>"+Chr(10)
If \Option1Texte:ChaineXML+" <checkbox id='#GAD_FBM_BT_OPTION1' name='GAD_FBM_BT_OPTION1' text='"+EscapeString(\Option1Texte,#PB_String_EscapeXML)+"'/>"+Chr(10):EndIf
If \Option2Texte:ChaineXML+" <checkbox id='#GAD_FBM_BT_OPTION2' name='GAD_FBM_BT_OPTION2' text='"+EscapeString(\Option2Texte,#PB_String_EscapeXML)+"'/>"+Chr(10):EndIf
ChaineXML+" </vbox>"+Chr(10)+
" </hbox>"+Chr(10)+
" <singlebox height='32' expand='no'/>"+Chr(10)+
" </vbox>"+Chr(10)
EndIf
ChaineXML+" <vbox align='' expand='no'>"+Chr(10)+
" <hbox align='"
If NbBoutons=1
ChaineXML+"center"
Else
ChaineXML+"right"
EndIf
ChaineXML+"' expand='no'>"+Chr(10)
For Compteur=1 To NbBoutons
ChaineXML+" <button id='#GAD_FBM_BT_BOUTON"+Str(Compteur)+"' name='GAD_FBM_BT_BOUTON"+Str(Compteur)+"' text='"+EscapeString(StringField(TextesGadgets("BT-BM"+Str(Boutons)),Compteur,","),#PB_String_EscapeXML)+"' width='120'/>"+Chr(10)
Next
ChaineXML+" </hbox>"+Chr(10)+
" </vbox>"+Chr(10)+
" </vbox>"+Chr(10)+
" </window>"+Chr(10)+
"</dialogs>" ;}
EndWith
If Fc_Fenetres_OuvertureDialogueXML(#XML_BOITEMSG,#XML_FENBOITEMSG,ChaineXML,"FEN_BOITEMESSAGE",ParamBoiteMsg\FenetreParente)
If IsGadget(#GAD_FBM_IM_IMAGE):SetGadgetState(#GAD_FBM_IM_IMAGE,ImageID(#IMG_BM_ERREUR+Image)):EndIf
If IsGadget(#GAD_FBM_BT_OPTION1):SetGadgetState(#GAD_FBM_BT_OPTION1,ParamBoiteMsg\Option1):EndIf
If IsGadget(#GAD_FBM_BT_OPTION2):SetGadgetState(#GAD_FBM_BT_OPTION2,ParamBoiteMsg\Option2):EndIf
For Compteur=NbBoutons To 1 Step-1
SetGadgetData(DialogGadget(#XML_FENBOITEMSG,"GAD_FBM_BT_BOUTON"+Str(Compteur)),Val(StringField(TextesGadgets("BT-BM"+Str(Boutons)),NbBoutons+Compteur,",")))
Next
SetActiveGadget(DialogGadget(#XML_FENBOITEMSG,"GAD_FBM_BT_BOUTON"+Str(ParamBoiteMsg\BoutonDefaut)))
;{ **** RACCOURCIS ****
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Return,#RACCOURCI_FBM_ENTREE)
If Boutons=#PB_MessageRequester_Ok Or Boutons=#PB_MessageRequester_Ok2Cancel
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_O,#RACCOURCI_FBM_OK)
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Alt|#PB_Shortcut_O,#RACCOURCI_FBM_ALTOK)
EndIf
If Boutons=#PB_MessageRequester_YesNo Or Boutons=#PB_MessageRequester_YesNoCancel
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_O,#RACCOURCI_FBM_OUI)
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Alt|#PB_Shortcut_O,#RACCOURCI_FBM_ALTOUI)
EndIf
If Boutons=#PB_MessageRequester_YesNo Or Boutons=#PB_MessageRequester_YesNoCancel
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_N,#RACCOURCI_FBM_NON)
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Alt|#PB_Shortcut_N,#RACCOURCI_FBM_ALTNON)
EndIf
If Boutons=#PB_MessageRequester_Ok2Cancel Or Boutons=#PB_MessageRequester_YesNoCancel Or Boutons=#PB_MessageRequester_RetryCancel Or Boutons=#PB_MessageRequester_CancelRetry2Continue Or Boutons=#PB_MessageRequester_AbortRetryIgnore
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_A,#RACCOURCI_FBM_ANNULER)
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Alt|#PB_Shortcut_A,#RACCOURCI_FBM_ALTANNULER)
EndIf
If Boutons=#PB_MessageRequester_RetryCancel Or Boutons=#PB_MessageRequester_CancelRetry2Continue
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_R,#RACCOURCI_FBM_REESSAYER)
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Alt|#PB_Shortcut_R,#RACCOURCI_FBM_ALTREESSAYER)
EndIf
If Boutons=#PB_MessageRequester_CancelRetry2Continue
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_C,#RACCOURCI_FBM_CONTINUER)
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Alt|#PB_Shortcut_C,#RACCOURCI_FBM_ALTCONTINUER)
EndIf
If Boutons=#PB_MessageRequester_AbortRetryIgnore
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_I,#RACCOURCI_FBM_IGNORER)
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Alt|#PB_Shortcut_I,#RACCOURCI_FBM_ALTIGNORER)
EndIf
AddKeyboardShortcut(DialogWindow(#XML_FENBOITEMSG),#PB_Shortcut_Escape,#RACCOURCI_FBM_ESCAPE) ;}
Pc_FenBoiteMessage_GestionEvenements()
;ProcedureReturn #True
EndIf
EndProcedure
;-
; Définition paramètres et appel fenêtre Boîte de dialogue Message
Procedure.a Fc_Affichage_BoiteMessage(ArgTitre.s,ArgMessage.s,ArgOptions.a=#PB_MessageRequester_Ok,ArgBoutonDefaut.a=1,ArgValeurEchap.a=0,ArgOption1Texte.s="",ArgOption1.a=0,ArgOption2Texte.s="",ArgOption2.a=0)
ClearStructure(@ParamBoiteMsg,PARAMBOITEMSG)
With ParamBoiteMsg
\Titre=ArgTitre
\Message=ArgMessage
\Options=ArgOptions
\BoutonDefaut=ArgBoutonDefaut
\ValeurEchap=ArgValeurEchap
\Option1Texte=ArgOption1Texte
\Option1=ArgOption1
\Option2Texte=ArgOption2Texte
\Option2=ArgOption2
\ValeurRetour=#PB_MessageRequester_Cancel
Fc_FenBoiteMessage_Affichage()
ProcedureReturn \ValeurRetour
EndWith
EndProcedure
;-══════════════════════════════════════════════════════════════════════════════════════════════════════
Pc_Decoupage_ImagesGadgets()
Debug Fc_Affichage_BoiteMessage("Exemple 1","Ceci est une boite simple sans image !")
Debug Fc_Affichage_BoiteMessage("Exemple 2","Ceci est une boite simple avec image !",#PB_MessageRequester_Error)
Debug Fc_Affichage_BoiteMessage("Exemple 3","Vous-vous vraiment quitter ?",#PB_MessageRequester_YesNo|#PB_MessageRequester_Question)
Debug Fc_Affichage_BoiteMessage("Exemple 4","Continuer ?",#PB_MessageRequester_YesNoCancel|#PB_MessageRequester_Warning,2,#PB_MessageRequester_Cancel,"Mémoriser le choix",#True)
DataSection
Image_BM_Debut: ;{
Data.q $0A1A0A0D474E5089,$524448490D000000,$30000000F0000000,$F7BD2F0000000608,$5845742E00000026,$6F69746165724374,$7300656D6954206E,$C3642034202E6D61
Data.q $31323032202E63A9,$323A36313A323220,$E0303031302B2033,$7407000000087D32,$17040CE507454D49,$00003C82BCD41C01,$0000735948700900,$7801232E0000232E
Data.q $6704000000763FA5,$0B8FB10000414D41,$49381000000561FC,$7B9DEDDA78544144,$DDEEEFC71DC5558C,$242EEC29B1F1165D,$AD48D4B12B4D256D,$ADAAD1A3FD6D8088
Data.q $D05910595489F05D,$6207D7468B515656,$5AE0ACBCB0AF4695,$C46CAB0456BE0B51,$34D496C98B5A282D,$A349A1B62B724369,$EF9D30D2686A6CD0,$798F3DCE73B3999C
Data.q $F601BE49DE8FBB9D,$FEE7DFDBF0EE73DE,$A55CB9399BF37E66,$5A55A55A55A55A55,$1B6369DCF6D30DA5,$4554BD540AA85AA8,$EFE056BF9152122A,$F7C2768B7EEC186D
Data.q $7AA81550B5503596,$AD7F22A424548AA9,$B6D51FFA643BDFC0,$0FBAA76AA44DC92C,$6EE1B524FEEC1F7F,$A16AA06B9B5C2FFF,$4848A91552F5502A,$FBF077BF815AFE45
Data.q $6FA006EAA56C214F,$7F24694FF6471E4E,$1C89A73A1C89BB3E,$F0D7867E101CD19D,$075B6B8D4397BC1E,$65BAA95A09D4FFAB,$ECD46483C1FFA947,$B351A02BA6BDA902
Data.q $AE153B08ADAFA31E,$14EC0A35C7FEB41D,$F760CB52445423AA,$AD8429FDBB86DC2B,$C8E71763A832DD54,$F0A0EEF1A4725BB8,$BF96D71A8216BC33,$238FA72BE2DC1CFF
Data.q $5CDE9CFF246CDF7D,$3DC5AE0D709A6C02,$0E3B847FDB2E7478,$EEA49DE17D1F96FB,$6B9255E0BF24B58A,$B927BF586969EFDF,$2EEA4DDF9F94079B,$F287472E5DAF4B5F
Data.q $6808B5851A6222FF,$CFC601C4C8986C0F,$CFEDFC373F5BFF06,$E80A7CEC765165C1,$B0991CF3FCD239ED,$CD4072FD08C9EB89,$D14AD77997A0510F,$F550A6C853FEFB39
Data.q $6D0DA4D5BE8FBA01,$233E1F720E2F709C,$3EAA14F25FD3FEAB,$17D69A90771738E6,$CE0A38E0387CC3A9,$BAE6A407D0A7EBE3,$7091C21D45F4646D,$ADA428D2AFFACCEF
Data.q $DDFC7206BEE7B600,$F880BC62FDF699F3,$853FB770DBECC1BE,$051177031F550A6C,$9EBEBC22AD04A571,$1F42D7BD00FCD4F0,$DAB053FE9B3BDC64,$61B815D810C5EC31
Data.q $F3819EDD687CDEE1,$934FB9DAFC6F8BB4,$DAAC8F3B5A1F2DDC,$ABFEF38223929FAB,$C774FE7431584434,$BFF4977CEFC01ED9,$F0A2B0647C004D39,$DC445DAB053FB770
Data.q $95E1ED9B7C287BA6,$3FEDBB22205778D5,$E723634985EBAA05,$33E167C0CF85AEB6,$DD555F98974F3A1D,$03E4FD30F3B9C7B4,$D6734F3CB6F6D552,$0AE22C5613C6D57F
Data.q $710145FE3FF68578,$40A7F6EE1AFDDCA1,$F03175F8EDF98975,$F7BD03699787326E,$D201FF4DD93CC0EA,$0A9AE79A338FAF8E,$1E70B10174CF859F,$79DB4F7E6EAAB3CC
Data.q $4DE92D5532770BF2,$BE375523BF4F1E74,$72C43B2CEB2EEA43,$E85E006E75DFEDF4,$011AD2DB6499EED8,$AAFED6CBF572C4F1,$B9E62F017F6566F0,$57801C6EF097400C
Data.q $F104756EE3105F08,$9879D96212EBC060,$120965600F3828E3,$09A67AD970BAAF3E,$F9A1B21A21B3772D,$9E4DD30F3A4677EB,$AE244BB285310DCA,$B427EF581D0AF0C2
Data.q $5E03FB1327D1CBBA,$B0140574E76A0EFC,$77801FEDAEBC0C79,$210DAE46F361E3B3,$18A1E6310D64F7AD,$387CC432BC060ECA,$E7552E7310273DAD,$11E8FFD49D7C2FC9
Data.q $7BCBED64A3DB6E72,$A3B70919F1FF5FC9,$D393F6BB2D939FFD,$BBE375520E64AEE7,$89CE9944E113CE91,$9EDEC7B08B2F9AF9,$02F56DCAF4300B19,$E5FDAE93ECB3F3E2
Data.q $53CE76ADC3600BC8,$66F398BFB0BAF0CA,$D620237868C6EF0A,$ABCE659736CF3FEB,$1CECE52D89E62732,$1B61C52E737A76CF,$0695123FBEDAFFDE,$7D2FEA4ADAAD1790
Data.q $497BC5AAA079D624,$28ECB32C9CFE25FD,$C22627EBBE8B2A22,$6F700124D5FC1D0B,$566C3CBFB131FD56,$6CF3FB1B5E053802,$E0559B0EC68F9B33,$42F0F18DDE05227D
Data.q $AB10F9B43ED0D7E3,$FFCDB29273960FFB,$B2B7D79FF234E0BA,$4ECF17B955016D3F,$3A9DB21F503869F7,$78510DC392FC1309,$1EFF0703920E1FEF,$39467EC8D6863209
Data.q $D86EAA99F7C6EE4F,$FDCAA3B2C05F464D,$35911200A48869D7,$F3B4C3BF7BE3DE0D,$BFB130EE2D3313AE,$1B5E0158054DD73C,$84D8E119073963FB,$F0A055C75DE03955
Data.q $828F3A949896F3CE,$BFDFF70126C9AC0A,$D6206D3F8A8CC47C,$1E70556E275F17B9,$AF00C8552F680914,$8BCE63261B17667C,$D08E1DFE26CC8B28,$B5423CE711CE1C00
Data.q $BAFFB52051166D57,$C0AAB2223014910D,$C3B8BF4CE97E1D0B,$06B00CAFED4C7F75,$4BEA1A45E7F626BC,$57AB7804E699AA45,$E5E14BEB07DA91D7,$41FF74E147EE5C6A
Data.q $DCA5A20691525455,$4EF70D15E196214C,$88A81C14DF40F62A,$40182FC1E75D0122,$15D86FAB680C0E62,$21856C48DFE1B218,$0F3AC477F3F3FBC6,$3029CC5245F792D3
Data.q $B4DEF256090DA281,$73DC4324C39DF6A0,$00F429DD3880836F,$9DFAEAD2A07FB236,$E08D3B05F959580C,$51A450A2AA3FB5D5,$EBC4F783C1BBC896,$0E20C19E9793264E
Data.q $9FFB923D8BC42BC3,$F4D885D3C0E37D16,$549BFB7C5851691E,$3EE66B9A643AE0F8,$80C1D82FCCED9B1B,$496CD735C2E61B95,$51E756EE66A81E74,$12CCF97E1E4C9458
Data.q $74FE018501CBE980,$AFEC6C3B8BCE59FB,$45FDAAAF0BA454B3,$0637034AB0AE35F4,$FBFE8E473CF767DE,$4576A479E7719928,$9B18510A1D4DC434,$D7B680159C9F500B
Data.q $6375038263E86FA2,$DBAEF1CC3CE265EE,$DB8632B9E13CEA96,$C4F7A78F3925A218,$5469DF0E12C9CC5C,$6AADF68601557D12,$DE197F6369625A76,$4D3CBE13DABE0440
Data.q $EE6017363FB555E1,$C41268E4FD786E5B,$96F9FF7470B9FD6B,$A36D10132365E540,$CE110DD233C6FA37,$DD4F38185B2FE0D3,$BE0187F37D284F95,$079C8700D1ABFD7D
Data.q $88AB014446BD9BAA,$C0199A7378DA2817,$1455337FFA4DBE7B,$BFB5B0EE2DB11C77,$C9181CC96E01791C,$04B7CFECD3780B42,$990CAAF03A46CB7A,$09C7751E0195E015
Data.q $FFA952B2D242F025,$63CED9F9B62E8F60,$56F886F4317480E3,$AD511EC2070896C4,$97BCFCB6C3BA2D5D,$FE7E77F86E59E659,$497DAFE503CEA96B,$19325037F6559038
Data.q $78530089AC02B091,$AB6144553BAC0E85,$02D8058FF6971382,$BB5ABA3DF3FB34DE,$5BFADE195E455C8A,$03EFDD350BC244C7,$51B26F68D83FEA5C,$4A4B4AF0574C0541
Data.q $E74CEF46C2070885,$7C390ACC3E97F55C,$8DEB021CCE7FF7A3,$903B89EC5B93CE69,$C88238DA2F323D71,$12C02268017D1519,$B1293BA6B7B1D0BC,$06B004AAC07F6974
Data.q $8AEDED1BE7F669BC,$03885785B5C01234,$EE1B032D383FEA5C,$1784BA80C283976D,$45EA0708D7D11F42,$AAE7AAA2F05640E1,$4EECDD6FF992AE8E,$117181617881E765
Data.q $23C1B45519325F85,$F4FE857821C02C6C,$5FDA5C3B8BAC57E4,$D38FEC9378036009,$9B55BC0286E15832,$0BC3B2DAE9EE48EB,$689613DFD28EC2F1,$AF097540E2AF2A6C
Data.q $4E22A0708C559954,$71119F645E0AC872,$B3F7D984C7714345,$C3F40E61E7550142,$5E1B49F893978D87,$BABCEBB199EEE4C9,$A589759E73DF1F00,$926F086C02A7FB4B
Data.q $E05433538344B1FD,$8C6DBFA91276D31D,$7C1E6CBC25D990D2,$AA2E43921272CC53,$7D085784BAC0C2AA,$91564AF47620708D,$7335D0077F178657,$523EDB5C9E72D19E
Data.q $3804338C3626E57B,$F803D65D942368BA,$614559A75D83A63C,$24DE02D8044FF697,$AEF06ADDD604B3FB,$232E201E07BD637B,$8C3799FC6CAD28BC,$ABC15D8824E004CE
Data.q $301BCEB1781BB00E,$8F386B3A1FD7873C,$F578219325B1C00D,$3D4F5BFE3DE0F600,$FED2E1DC5C629EF7,$3FDA99D52E2B0091,$803E88057808E012,$B0047FFBC319C432
Data.q $319C6708CE28BC3D,$C03EE012D781B66C,$0755E11393D7E875,$8C3385F8742F0838,$8760195FDA5D2C4B,$DD1AAC9438012FF6,$4FA04971BC59227E,$7845620078F91C9F
Data.q $E01CCDE00C6B890F,$4583E153768431A1,$52A2F39B214B797F,$E014C79D8D5BC7EB,$2E00D57818C992C8,$C546B1C1F7A85785,$FB63B004AFED2E1D,$8E775736C88E0007
Data.q $B10A96D6BFB64062,$00D3780D4E02BC12,$81398F59AC49FE1E,$9CE9B38CE1BDEB17,$64C9495624932C37,$F50BC3C700E9BC02,$FB4BA58951B67EBF,$5624FDFD819C02A7
Data.q $C4325D67755152C2,$A535A69BC1E8C6CB,$15A465808D624A4A,$92225840E16B6A4E,$B7279D6DE18A2FA3,$232D680FC5D03A88,$E094E395DE8DA289,$69EBC32700F1A405
Data.q $7614769348F7D926,$BFBFB2338058FF6D,$4386BD51A852948C,$749ED798B1083DBC,$D9780B5E73C929CD,$46469197E28B5999,$5C903878C2838721,$6A3CB5463A1381B0
Data.q $C94947214E903CED,$7BC0A700A9BC02A4,$6C8D33D6392677BC,$23FDB5C3B8AF59BB,$C287217EFED0CE01,$27E8EDFF10717401,$250BC1999DFEC764,$DDF9CA528C8C7215
Data.q $2FC8D82CE05ABBD6,$73F279D2C161BF9A,$809209C4A52AD45F,$B0089BC2AA4A2708,$AB597ED60742BC02,$6F760193FDB5D2C4,$C37864A1F294BF7F,$EDE1958821A5DCF3
Data.q $591491DA5780D2E4,$D6BE5C333632394A,$93CE66C0325A4B7A,$795AB59BA92EF45B,$9433DDAB9CE04333,$14446F08380335E1,$01E3FDB5C5CE3D4E,$989E033362FEC6CE
Data.q $76F04AC40AAF0690,$99BB1E8E610BC3AA,$B72E13B6023C4381,$B5C3F0E79A8A4FDE,$3B67481E7732073C,$EAF05AA9E4C940E1,$AFAEC1D0AF0A5C03,$C03C7FB2B8771569
Data.q $AF00A84EDFDFDAD9,$55A4D2F1FAA33D38,$7814E00633AAC262,$7807213B6939F0D9,$DCB5EBEF0FE86C64,$79CCD50FCDFB6E0C,$EC71B45CBF43795E,$0F1C01EAF05A19AD
Data.q $4B94A30FB419A7AF,$EC8CE0153FD95D2C,$765E0D407FE86FEF,$E4C5F6FB71048DFC,$C3AA76F0EA8ACFE3,$C4467563A52E258B,$F11BC05B18C83A91,$D879D0D0ED6F4B68
Data.q $0A3E5E51EFF7FFB7,$928E002BC26A4C94,$55A1BE17E1D0BC2E,$6C670089FEC2E1DC,$05783542CEA4767F,$1C68E31015CB58C0,$C6A9756824D77825,$6478070EA470AF5E
Data.q $DE459B8036C76A1C,$53CE86C0192A13A8,$AF026BE8A326C57B,$1D3D42BC0A9152EA,$F0091FEC2E9625EA,$F185117F62CB9B95,$55D007C37834A2AC,$6DE18EF8CDBCEA17
Data.q $08F10E3B50E343BC,$C98E567B39765638,$5AA9E745600959B0,$F1B45FA9AC75A3D0,$3D604726F0C699D2,$81B6F0A34DBF8F78,$257F6B61DC52AC28,$563BD8873FB23380
Data.q $9D551591BC3AB576,$96563CD2AF36F0F6,$9EC15F760E423C03,$D558054DE73BA395,$83A501C28AF61679,$22AC1B7BC992FDC5,$9D215E1F581CFC6F,$919C02A7FB5B0EE2
Data.q $D9D9DD83FD8025FD,$C2FD47F8EF0483D0,$E323C439DD83BD0D,$12AC276A75972AD1,$6A45B2D09E745601,$D5967EDD068F03FF,$42F0C6A9E01A39B0,$7FB1B4B14EF43BFD
Data.q $F662023FD919C022,$02BC0995439C1568,$8F6646CB837838D2,$489D93370F3119E6,$1E7332C49B1CDB21,$B66AAD5CE7FBFEA5,$A7AF0C9C03EAF39E,$511EB41363FF64E9
Data.q $AC0676EB7CFF6A6A,$063FDA99EDBCFCAC,$AD5DE14EC430AEE2,$8F2661427BF0EF04,$32ABB3E4C8C3C517,$07780336C3122A58,$A5613AC738DF264A,$535DB1D0BC1AB007
Data.q $2155FDBC872C4A4D,$647961904BADF066,$CC46D15E0CECD878,$4E047031592FBE03,$29739E47A0B3CE16,$3CDB30C368B63FF7,$4CBC0D901A9AB890,$7ED25F9D0393A7BB
Data.q $1FF35A7FB750E944,$0ACA2ACF6396DDF0,$C7DBAF39A4AC245E,$86C992648A1E62D2,$579CD1B36CF15507,$5749190C9CD889C1,$D4ED9E0AA5E1F185,$8DA2E5264A05739A
Data.q $53A42BC0A9152F32,$9CC4DAAFEDD431DC,$BC35C8AB3C611918,$AD379CE59E68A96C,$8A9364D61F74ECF1,$3EDE75F17B85743D,$3ED1D9E36EB36C9D,$B86DC7B0751748E6
Data.q $5BDF840245E2B0A8,$43BE881BEE62FFAB,$3A355F53E0E85E18,$ECF1A75FDA287A4B,$05CDBD0BC68B1F74,$1069178AC2A2F0B6,$541437EFFACCEF7E,$64D93EA1D00A2AA0
Data.q $A8B7072D706B8C7E,$A28362F1AAE1A452,$EB7E871FB1380888,$2FC6FA4B3CC16AEC,$F9E87C0048F33E9A,$4996D0E85E02C3C9,$C6937F6AA1E8C3DA,$8C7E6322228A3D8B
Data.q $EE79B1157675D743,$6CB869172A2DC440,$0FCDB17B0C6EE41C,$E32B9A8FB86C6043,$09025BE1EF0D7867,$523B8DE71DFCB6BF,$36A70D3CC6699CB7,$BF3499F85915E8E0
Data.q $8579511C75B6EA12,$A23AAB2B950E3421,$FFD59644A4AA7274,$BB9071A6DFD8287D,$066A7193CC448439,$5BF3499F8591BE8E,$56F8DC370141EEA1,$3C1969C7B46C16C4
Data.q $7F02B5FC8A9092A2,$2B7C68B9E22793AF,$43A22BDE94DF0B5C,$59D7BF815AFE4548,$BA7E32661E1445FF,$115BE36DBFB350C4,$0E747EBD00A1F85B,$990EF7F02B5FC8AA
Data.q $55A55A55A55A57FE,$7B1FFB6E9A55A55A,$00E9F0480D7ED469,$AE444E4549000000
Data.b $42,$60,$82
Image_BM_Fin: ;}
EndDataSection ;1
N'hésitez pas à plier le code dans un premier temps pour voir plus facilement comment il est structuré (Les procédures sont appelées du bas vers le haut, donc pas besoin de Declare)