Problème API GetOpenFileName
Le
le_troll
Bonjour,
Dans l'API GetOpenFileName (ouverture de la boîte de dialogue donc)
Ça marche si je choisis un fichier pour mettre dans une PictureBoxe, mais:
Si je ferme par la croix [X] rouge, ou <Annuler> ou <Alt+F4>, ben ça me
ferme l'appli, il doit y avoir des params de retour à rediriger pour éviter
ça, mais je ne sais pas lesquels, avez-vous une idée, voici le code (une
tartine cette API):
Dim cheficPH As String * 255
'
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
'
Private Enum OFN_Constants
OFN_ALLOWMULTISELECT = &H200
OFN_CREATEPROMPT = &H2000
OFN_DONTADDTORECENT = &H2000000
OFN_ENABLEHOOK = &H20
OFN_ENABLEINCLUDENOTIFY = &H400000
OFN_ENABLESIZING = &H800000
OFN_ENABLETEMPLATE = &H40
OFN_ENABLETEMPLATEHANDLE = &H80
OFN_EX_NOPLACESBAR = &H1
OFN_EXPLORER = &H80000
OFN_EXTENSIONDIFFERENT = &H400
OFN_FILEMUSTEXIST = &H1000
OFN_FORCESHOWHIDDEN = &H10000000
OFN_HIDEREADONLY = &H4
OFN_LONGNAMES = &H200000
OFN_NOCHANGEDIR = &H8
OFN_NODEREFERENCELINKS = &H100000
OFN_NOLONGNAMES = &H40000
OFN_NONETWORKBUTTON = &H20000
OFN_NOREADONLYRETURN = &H8000
OFN_NOTESTFILECREATE = &H10000
OFN_NOVALIDATE = &H100
OFN_OVERWRITEPROMPT = &H2
OFN_PATHMUSTEXIST = &H800
OFN_READONLY = &H1
OFN_SHAREAWARE = &H4000
OFN_SHAREFALLTHROUGH = 2
OFN_SHARENOWARN = 1
OFN_SHAREWARN = 0
OFN_SHOWHELP = &H10
OFN_USEMONIKERS = &H1000000
End Enum
'
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
'
Private Function OpenFileDialog(Optional DialogTitle As String, Optional
sFilter As String, Optional Flags As OFN_Constants, Optional InitialDir As
String, Optional hwndOwner As Long, Optional hInstance As Long) As String
Dim OFName As OPENFILENAME
'
OFName.lStructSize = Len(OFName)
OFName.hwndOwner = hwndOwner
OFName.hInstance = hInstance
OFName.lpstrFilter = "Fichiers jpg (*.jpg)" & vbNullChar & "*.jpg" &
vbNullChar & "Fichiers bitmap (*.bmp)" & vbNullChar & "*.bmp" & vbNullChar &
vbNullChar ' filtres fichiers
OFName.lpstrFile = Space$(254)
OFName.nMaxFile = 255
OFName.lpstrFileTitle = Space$(254)
OFName.nMaxFileTitle = 255
OFName.lpstrInitialDir = InitialDir
OFName.lpstrTitle = "Sélectionner votre image" ' titre
OFName.Flags = OFN_READONLY ' [X] lecture seule
If GetOpenFileName(OFName) Then: OpenFileDialog =
Trim$(OFName.lpstrFile)
'
cheficPH = OFName.lpstrFile
End Function
Sub Command3_Click() 'photo
Call OpenFileDialog 'APPEL
''' SI RETOUR ICI SANS CHARGEMENT PHOTO = FERME L'APPLI !!!
If Len(cheficPH) > 9 Then: Picture1.Picture = LoadPicture(cheficPH)
ChDrive App.Path
ChDir App.Path
End Sub
--
Merci, @+, bye, Joe : ng75@noos.fr
-
Avec une hache, celui qui tient le manche a toujours raison.
-
Dans l'API GetOpenFileName (ouverture de la boîte de dialogue donc)
Ça marche si je choisis un fichier pour mettre dans une PictureBoxe, mais:
Si je ferme par la croix [X] rouge, ou <Annuler> ou <Alt+F4>, ben ça me
ferme l'appli, il doit y avoir des params de retour à rediriger pour éviter
ça, mais je ne sais pas lesquels, avez-vous une idée, voici le code (une
tartine cette API):
Dim cheficPH As String * 255
'
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
'
Private Enum OFN_Constants
OFN_ALLOWMULTISELECT = &H200
OFN_CREATEPROMPT = &H2000
OFN_DONTADDTORECENT = &H2000000
OFN_ENABLEHOOK = &H20
OFN_ENABLEINCLUDENOTIFY = &H400000
OFN_ENABLESIZING = &H800000
OFN_ENABLETEMPLATE = &H40
OFN_ENABLETEMPLATEHANDLE = &H80
OFN_EX_NOPLACESBAR = &H1
OFN_EXPLORER = &H80000
OFN_EXTENSIONDIFFERENT = &H400
OFN_FILEMUSTEXIST = &H1000
OFN_FORCESHOWHIDDEN = &H10000000
OFN_HIDEREADONLY = &H4
OFN_LONGNAMES = &H200000
OFN_NOCHANGEDIR = &H8
OFN_NODEREFERENCELINKS = &H100000
OFN_NOLONGNAMES = &H40000
OFN_NONETWORKBUTTON = &H20000
OFN_NOREADONLYRETURN = &H8000
OFN_NOTESTFILECREATE = &H10000
OFN_NOVALIDATE = &H100
OFN_OVERWRITEPROMPT = &H2
OFN_PATHMUSTEXIST = &H800
OFN_READONLY = &H1
OFN_SHAREAWARE = &H4000
OFN_SHAREFALLTHROUGH = 2
OFN_SHARENOWARN = 1
OFN_SHAREWARN = 0
OFN_SHOWHELP = &H10
OFN_USEMONIKERS = &H1000000
End Enum
'
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
'
Private Function OpenFileDialog(Optional DialogTitle As String, Optional
sFilter As String, Optional Flags As OFN_Constants, Optional InitialDir As
String, Optional hwndOwner As Long, Optional hInstance As Long) As String
Dim OFName As OPENFILENAME
'
OFName.lStructSize = Len(OFName)
OFName.hwndOwner = hwndOwner
OFName.hInstance = hInstance
OFName.lpstrFilter = "Fichiers jpg (*.jpg)" & vbNullChar & "*.jpg" &
vbNullChar & "Fichiers bitmap (*.bmp)" & vbNullChar & "*.bmp" & vbNullChar &
vbNullChar ' filtres fichiers
OFName.lpstrFile = Space$(254)
OFName.nMaxFile = 255
OFName.lpstrFileTitle = Space$(254)
OFName.nMaxFileTitle = 255
OFName.lpstrInitialDir = InitialDir
OFName.lpstrTitle = "Sélectionner votre image" ' titre
OFName.Flags = OFN_READONLY ' [X] lecture seule
If GetOpenFileName(OFName) Then: OpenFileDialog =
Trim$(OFName.lpstrFile)
'
cheficPH = OFName.lpstrFile
End Function
Sub Command3_Click() 'photo
Call OpenFileDialog 'APPEL
''' SI RETOUR ICI SANS CHARGEMENT PHOTO = FERME L'APPLI !!!
If Len(cheficPH) > 9 Then: Picture1.Picture = LoadPicture(cheficPH)
ChDrive App.Path
ChDir App.Path
End Sub
--
Merci, @+, bye, Joe : ng75@noos.fr
-
Avec une hache, celui qui tient le manche a toujours raison.
-

Poser une question


Ce code semble être celui de la faq.
Il s'agit donc d'une fonction qui retourne une valeur (la variable cheficPH
est inutile)
Il suffit de stocker le résultat de la fonction et si ce résultat est une
chaine vide, on sait qu'on a annulé.
Note que la procédure à un paramètre permettant de passer des flags. aussi,
il est inutile de le hardcoder dans la fonction.
Dim strFichier As String
strFichier = OpenFileDialog(Paramètres, dont le flag)
If Len(strFichier) Then
'Traitement si fichier
Else
Unload Me
End If
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
"le_troll" news:OJPsA6r$
Merci, ça marche, en réponse, petite erreur je pense?
Le problème étant la fermeture de l'appli, ce n'est pas en retour
Unload Me
mais
"Load Me"
-- -----------------------------------
Merci, @+, bye, Joe :
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------
"François Picalausa" u$w0JVs$
cheficPH
aussi,