La boite selection de fichier
Page 1 sur 1
La boite selection de fichier
L'API windows propose en standard plusieurs boites de dialogue liées à un usage particulier. Nous disposons de 2 fonctions pour créer celles liées à la sélection des noms de fichiers : une pour le choix d'un fichier à ouvrir GetOpenFileNameA , l'autre pour le choix d'un fichier à écrire GetSaveFileNameA. Le bon coté c'est que les deux font appel à la même structure OPENFILENAME.
Dans le programme qui suit nous utiliserons les 2 fonctions et nous contenterons d'afficher les noms choisis dans la console.
Dans la partie .data, nous préparons le titre à afficher dans la boite et les critères de sélection des fichiers. Ici nous avons crée 2 options : tous les fichiers par le choix *.* et les fichiers assembleurs par le choix *.asm . Vous pouvez ajouter d'autres sélections ou n'en mettre aucune.
Pour les autres zones, les commentaires et la documentation sur Internet vous permettent de connaitre le contenu de chacune.
Pour la fonction écriture, le paramètre OFN_OVERWRITEPROMPT permet de confirmer l'écrasement du fichier si celui ci existe déjà.
Voici le code :
Dans le programme qui suit nous utiliserons les 2 fonctions et nous contenterons d'afficher les noms choisis dans la console.
Dans la partie .data, nous préparons le titre à afficher dans la boite et les critères de sélection des fichiers. Ici nous avons crée 2 options : tous les fichiers par le choix *.* et les fichiers assembleurs par le choix *.asm . Vous pouvez ajouter d'autres sélections ou n'en mettre aucune.
Pour les autres zones, les commentaires et la documentation sur Internet vous permettent de connaitre le contenu de chacune.
Pour la fonction écriture, le paramètre OFN_OVERWRITEPROMPT permet de confirmer l'écrasement du fichier si celui ci existe déjà.
Voici le code :
- Code:
;--choixFichier.asm programme 64 bits
; Fenêtre de Choix des fichiers
%include "../windowsinc64.inc"
;=======================================
; segment des données initialisées
;=======================================
segment .data
szMessFin db 10,13,"Fin du programme.",0
szRetourLigne db 10,13,0
szFilter db "Asm Files (*.asm)",0,"*.asm",0
db "All Files (*.*)",0,"*.*",0,0
szDefExt db "asm",0
szTitreChoix db "Choisir le fichier !",0
;instance de la structure des fichiers
ofna align 8
ofn:
istruc OPENFILENAME
at OPENFILENAME.nFilterIndex, dd 1h
at OPENFILENAME.nMaxFile, dd MAX_PATH
at OPENFILENAME.nMaxFileTitle, dd MAX_PATH
iend
LGOFN equ $ - ofn ;longueur de la structure ofn
;=======================================
; segment des données non initialisées
;=======================================
segment .bss
hMain resq 1
szFile resb MAX_PATH *2
szFileTitle resb MAX_PATH *2
szResult resb 100
;=======================================
; segment de code
;=======================================
segment .text
global Main
extern afferreur,affconsoleP,affmessage,saisieClavier
Main:
sub rsp, 8h ; alignement de la pile avant tout appel de procédure
sub rsp,20h
;recup handle de l'instance du programme
mov rcx,NULL
call GetModuleHandleA
mov r9,__LINE__ - 1
cmp eax,NULL
je .erreur
mov [hMain],rax
mov byte[szFile],0
;préparation pour la fenêtre de choix du fichier
mov dword[ofn+OPENFILENAME.lStructSize],LGOFN ; longueur de la structure
mov dword[ofn+OPENFILENAME.lpstrFilter],szFilter ; filtre des fichiers
mov dword[ofn+OPENFILENAME.lpstrFile],szFile ; buffer du nom complet du fichier
mov dword[ofn+OPENFILENAME.lpstrInitialDir],NULL ; pointeur vers un repertoire de départ
mov dword[ofn+OPENFILENAME.lpstrDefEx],szDefExt ; définition de l'extention
mov dword[ofn+OPENFILENAME.lpstrTitle],szTitreChoix ;titre de la fenetre
mov dword [ofn+OPENFILENAME.lpstrFileTitle],szFileTitle ; buffer du nom reduit du fichier
mov dword[ofn+OPENFILENAME.hwndOwner],NULL ; fenetre sans parent
mov dword [ofn+OPENFILENAME.Flags], OFN_PATHMUSTEXIST + OFN_FILEMUSTEXIST
mov rcx,ofn
call GetOpenFileNameA ; affichage fenetre de choix du fichier
mov r9,__LINE__
cmp rax,0
je .erreur
; preparer la commande de compilation
lea rax, [ofn+OPENFILENAME.lpstrFile] ; récuperation du nom complet du fichier choisi
;
;
push qword[rax] ; adresse du nom du fichier
call affconsoleP ; affichage dans la console
push szRetourLigne
call affconsoleP ; affichage dans la console
push szFile ; verification du buffer de reception
call affconsoleP
push szRetourLigne
call affconsoleP ; affichage dans la console
push szFileTitle ; verification du contenu
call affconsoleP
;
call saisieClavier ; pour pause
;choix du fichier pour ecriture
mov dword[ofn+OPENFILENAME.Flags],OFN_HIDEREADONLY + OFN_OVERWRITEPROMPT
mov rcx,ofn
call GetSaveFileNameA
mov r9,__LINE__
cmp rax,0
je .erreur
lea rax, [ofn+OPENFILENAME.lpstrFile] ; récuperation du nom complet du fichier choisi
push qword[rax] ; adresse du nom du fichier
call affconsoleP ; affichage dans la console
push szRetourLigne
call affconsoleP ; affichage dans la console
push szFile ; verification du buffer de reception
call affconsoleP
push szRetourLigne
call affconsoleP ; affichage dans la console
push szFileTitle ; verification du contenu
call affconsoleP
mov rax,0
jmp .main_fin
.erreur:
call afferreur
mov rax,1
jmp .fin
.main_fin:
push szMessFin
call affconsoleP
call saisieClavier
.fin:
mov rcx,rax ; code retour
call ExitProcess ; fin du programme
Sujets similaires
» La boite selection de couleurs
» La boite selection de polices
» La boite message
» Une boite de dialogue personnalisée
» La boite selection de polices
» La boite message
» Une boite de dialogue personnalisée
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|