• Viernes 8 de Noviembre de 2024, 19:49

Autor Tema:  Re: GetOpenFileName , GetSaveFileName  (Leído 5383 veces)

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: GetOpenFileName , GetSaveFileName
« en: Jueves 31 de Julio de 2003, 09:38 »
0
Saludos a todos.

Usualmente utilizo las funciones 'GetOpenFileName' y 'GetSaveFileName' de las api para obtener un cuadro de diálogo donde el usuario pueda especificar un nombre de archivo que abrir o guardar.

Lo que no consigo es que aparezca en el cuadro de texto para el nombre del archivo un nombre que yo especifique por defecto.  No es que esto sea un problema, pero es un detalle que me gustaría resolver.
 
Gracias por la atención.

giomar

  • Miembro MUY activo
  • ***
  • Mensajes: 270
    • Ver Perfil
Re: GetOpenFileName , GetSaveFileName
« Respuesta #1 en: Martes 5 de Agosto de 2003, 19:45 »
0
Para aquellas aplicaciones donde quiero que se muestre una ventana Abrir o Guardar hago uso del control CommonDialog.
Ahora si deseas que aparesca el nombre de un archivo por defecto al llamar a la ventana Abrir, tienes que hacer uso de su propiedad FileName, por ejemplo
CommonDialog1.FileName = "C:WindowsEscritorioDocumento.txt"
Aqui se le indica la ruta del archivo que deseas que se muestre por defecto.
Luego se indica que tipo de ventana se deseas utilizar: CommonDialog1.ShowOpen (ventana abrir)
Para tener en cuenta:
Si deseas especificar que solo se muestren por ejemplo documentos Word  
ingresa la siguiente linea de codigo antes de llamar a la ventana: CommonDialog1.Filter = "todos los archivos de texto|*.doc"
he incluso puedes cambiar el titulo de la ventana: CommonDialog1.DialogTitle = "Nuevo titulo"
Entre otras cosas.
Ha me olvidaba para activar este control tienes que ir a la opción Componentes.. del menu Proyecto y en la ventana marcar la opción Microsoft Common Dialog Control 6.0 (SP3)
Bueno espero que te sirva de algo lo que te he comentado.
Un saludo...
<Giomar>
Giomar B.
Desarrollador Web Profesional


Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
GetOpenFileName , GetSaveFileName
« Respuesta #2 en: Miércoles 6 de Agosto de 2003, 08:18 »
0
Agradezco tus comentarios, pero utilizo normalmente estas apis para en muchos casos evitar el añadir ningún formulario al proyecto para usar un control CommonDialog. Incluso aunque use formularios, evito cargarlos con controles que no son visibles si tengo otra forma de hacer las cosas.

En el caso de estas apis, funcionan perfectamente para lo que busco, exceptuando lo del nombre de archivo por omisión (la vía de acceso por omisión sí me funciona).

Me consta que hay alguna forma de hacerlo, supongo que habrá que utilizar otra api.

En fin, gracias de todas formas.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: GetOpenFileName , GetSaveFileName
« Respuesta #3 en: Miércoles 18 de Febrero de 2004, 18:19 »
0
Saludos para tod@s.

Hace tiempo inicié este tema y por fin lo cierro...
El problema estaba en una error de codificación, que de tan evidente que era, se me escapaba, y es que a veces las tonterías más simples hacen que nos volvamos locos... Por si a alguien le interesa, aquí pongo el código que usaba pero ya corregido (el ejemplo es sólo de GetSaveFileName, el funcionamiento de GetOpenFileName es prácticamente el mismo por lo que lo omito):

Código: Text
  1.  
  2. Private Const OFN_READONLY = &H1
  3. Private Const OFN_OVERWRITEPROMPT = &H2
  4. Private Const OFN_HIDEREADONLY = &H4
  5. Private Const OFN_NOCHANGEDIR = &H8
  6. Private Const OFN_SHOWHELP = &H10
  7. Private Const OFN_ENABLEHOOK = &H20
  8. Private Const OFN_ENABLETEMPLATE = &H40
  9. Private Const OFN_ENABLETEMPLATEHANDLE = &H80
  10. Private Const OFN_NOVALIDATE = &H100
  11. Private Const OFN_ALLOWMULTISELECT = &H200
  12. Private Const OFN_EXTENSIONDIFFERENT = &H400
  13. Private Const OFN_PATHMUSTEXIST = &H800
  14. Private Const OFN_FILEMUSTEXIST = &H1000
  15. Private Const OFN_CREATEPROMPT = &H2000
  16. Private Const OFN_SHAREAWARE = &H4000
  17. Private Const OFN_NOREADONLYRETURN = &H8000
  18. Private Const OFN_NOTESTFILECREATE = &H10000
  19. Private Const OFN_SHAREFALLTHROUGH = 2
  20. Private Const OFN_SHARENOWARN = 1
  21. Private Const OFN_SHAREWARN = 0
  22. Private Type tagOPENFILENAME
  23.     lStructSize As Long
  24.     hwndOwner As Long
  25.     hInstance As Long
  26.     lpstrFilter As String
  27.     lpstrCustomFilter As String
  28.     nMaxCustFilter As Long
  29.     nFilterIndex As Long
  30.     lpstrFile As String
  31.     nMaxFile As Long
  32.     lpstrFileTitle As String
  33.     nMaxFileTitle As Long
  34.     lpstrInitialDir As String
  35.     lpstrTitle As String
  36.     flags As Long
  37.     nFileOffset As Integer
  38.     nFileExtension As Integer
  39.     lpstrDefExt As String
  40.     lCustData As Long
  41.     lpfnHook As Long
  42.     lpTemplateName As String
  43. End Type
  44. Private Declare Function GetSaveFileName Lib &#34;COMDLG32.DLL&#34; Alias &#34;GetSaveFileNameA&#34; (pOpenfilename As tagOPENFILENAME) As Long
  45.  
  46. Public Function GuardarArchivo( _
  47. Optional ByVal Hwnd As Long,  _
  48. Optional ByVal DftPath As String,  _
  49. Optional ByVal DftFile As String,  _
  50. Optional ByVal DftTitle As String,  _
  51. Optional ByVal DftExt As String, _
  52. Optional ByVal FilterIdx As Integer) As String
  53.    
  54.     On Error GoTo Err_GuardarArchivo
  55.  
  56.     Dim strFilter As String
  57.     strFilter = &#34;Todos los archivos (*.*)&#34; & Chr(0) & &#34;*.*&#34; & Chr(0) _
  58.     & &#34;Archivos de texto delimitado (*.csv)&#34; & Chr(0) & &#34;*.csv&#34; & Chr(0) _
  59.     & &#34;Archivos de intercambio de datos (*.dif)&#34; & Chr(0) & &#34;*.dif&#34; & Chr(0) _
  60.     & &#34;Archivos de texto (*.txt)&#34; & Chr(0) & &#34;*.txt&#34; & Chr(0) _
  61.     & &#34;Libros de microsoft excel (*.xls)&#34; & Chr(0) & &#34;*.xls&#34; & Chr(0)
  62.    
  63.     If Trim(DftExt) = &#34;&#34; Then DftExt = &#34;*.*&#34;
  64.     If Trim(DftTitle) = &#34;&#34; Then DftTitle  = &#34;Guardar archivo como&#34;
  65.     If Trim(DftPath) = &#34;&#34; Then   DftPath = App.Path
  66.     If Len(DftFile) &#60; 255 Then DftFile = DftFile & String(255 - Len(DftFile), &#34; &#34;)
  67.     If FilterIdx = 0 Then FilterIdx = 1
  68.    
  69.     Dim File As tagOPENFILENAME
  70.     With File
  71.         .lStructSize = Len(File)
  72.         .hwndOwner = Hwnd
  73.         .lpstrFilter = strFilter & Chr(0)
  74.         .nFilterIndex = FilterIdx
  75.         .nMaxFile = Len(DftFile) + 1
  76.         .lpstrFile = DftFile & Chr(0)
  77.         .nMaxFileTitle = Len(DftTitle) + 1
  78.         .lpstrFileTitle = DftTitle & Chr(0)
  79.         .lpstrTitle = DftTitle & Chr(0)
  80.         .lpstrInitialDir = DftPath & Chr(0)
  81.         .lpstrDefExt = DftExt & Chr(0)
  82.         .flags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT
  83.         .hInstance = App.hInstance
  84.         .lpfnHook = 0
  85.         .lpTemplateName = 0
  86.         .nFileOffset = 0
  87.         .lCustData = 0
  88.     End With
  89.        
  90.     Dim lngRc As Long
  91.     lngRc = GetSaveFileName(File)
  92.     If lngRc &#60;&#62; 0 Then
  93.         GuardarArchivo = Left(File.lpstrFile, InStr(1, File.lpstrFile, Chr(0)) - 1)
  94.     Else
  95.         GuardarArchivo = &#34;&#34;
  96.     End If
  97.    
  98.     Exit Function
  99.  
  100. Err_GuardarArchivo:
  101.     MsgBox &#34;Error seleccionando archivo.&#34; & String(2, vbCrLf) _
  102.     & &#34;(&#34; & Err.Number & &#34;) &#34; & Err.Description & &#34;.&#34; _
  103.     , vbCritical, &#34;Guardar archivo&#34;
  104.  
  105. End Function
  106.  
  107.  

Como curiosidad: la línea que provocaba que no apareciese el archivo por defecto era esta:
Código: Text
  1.  
  2.    .lpstrFile = Chr(0) & DftFile & Chr(0)
  3.  
  4.  
El fallo es evidente, ¿no?

Espero que a alguien esto le sea útil.
Abur.

Asa

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: GetOpenFileName , GetSaveFileName
« Respuesta #4 en: Miércoles 8 de Diciembre de 2004, 13:37 »
0
Y alguien sabe la funcion que en vez de ofrecer coger un archivo, se pueda escojer un directorio?

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: GetOpenFileName , GetSaveFileName
« Respuesta #5 en: Miércoles 8 de Diciembre de 2004, 17:04 »
0
GRACIAS POR LA INFORMACION Brroz
ES DE MUCHA AYUDA PARA TODOS
El pasado son solo recuerdos, el futuro son solo sueños

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: GetOpenFileName , GetSaveFileName
« Respuesta #6 en: Jueves 9 de Diciembre de 2004, 14:45 »
0
Para Asa (y a quien interes, por supuesto):

Puedes obtener un cuadro de diálogo para seleccionar una carpeta mediante este código:

Código: Text
  1.  
  2. Option Explicit
  3.  
  4. Private Type BROWSEINFO
  5.     hOwner As Long
  6.     pidlRoot As Long
  7.     pszDisplayName As String
  8.     lpszTitle As String
  9.    ulFlags As Long
  10.    lpfn As Long
  11.    lParam As Long
  12.    iImage As Long
  13. End Type
  14. Private Declare Function SHGetPathFromIDList Lib &#34;shell32.dll&#34; Alias &#34;SHGetPathFromIDListA&#34; (ByVal pidl As Long, ByVal pszPath As String) As Long
  15. Private Declare Function SHBrowseForFolder Lib &#34;shell32.dll&#34; Alias &#34;SHBrowseForFolderA&#34; (lpBrowseInfo As BROWSEINFO) As Long
  16.  
  17. Public Function SeleccionarPath(Byval HWnd as long, Byal Titulo as strinh) As string
  18.  
  19.    Dim bInf As BROWSEINFO
  20.    Dim lRc As Long
  21.    Dim lPathID As Long
  22.    Dim sPath As String
  23.    
  24.    If Titulo = &#34;&#34; Then Titulo = &#34;Recuperar vía de acceso&#34;
  25.    bInf.hOwner = hWnd
  26.    bInf.lpszTitle = Titulo
  27.    bInf.ulFlags = BIF_RETURNONLYFSDIRS
  28.    lngPathID = SHBrowseForFolder(bInf)
  29.    sPath = String(512, Chr(0))
  30.    lRc = SHGetPathFromIDList(lPathID, sPath)
  31.    If lRc &#62; 0 Then SeleccionarPath = Left(sPath, InStr(1, sPath, Chr(0)) - 1)
  32.  
  33. End Function
  34.  
  35.  

Abur.