Programación General > Visual Basic 6.0 e inferiores
Re: GetOpenFileName , GetSaveFileName
Brroz:
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:
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>
Brroz:
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:
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 --- Private Const OFN_READONLY = &H1Private Const OFN_OVERWRITEPROMPT = &H2Private Const OFN_HIDEREADONLY = &H4Private Const OFN_NOCHANGEDIR = &H8Private Const OFN_SHOWHELP = &H10Private Const OFN_ENABLEHOOK = &H20Private Const OFN_ENABLETEMPLATE = &H40Private Const OFN_ENABLETEMPLATEHANDLE = &H80Private Const OFN_NOVALIDATE = &H100Private Const OFN_ALLOWMULTISELECT = &H200Private Const OFN_EXTENSIONDIFFERENT = &H400Private Const OFN_PATHMUSTEXIST = &H800Private Const OFN_FILEMUSTEXIST = &H1000Private Const OFN_CREATEPROMPT = &H2000Private Const OFN_SHAREAWARE = &H4000Private Const OFN_NOREADONLYRETURN = &H8000Private Const OFN_NOTESTFILECREATE = &H10000Private Const OFN_SHAREFALLTHROUGH = 2Private Const OFN_SHARENOWARN = 1Private Const OFN_SHAREWARN = 0Private Type tagOPENFILENAME 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 StringEnd TypePrivate Declare Function GetSaveFileName Lib "COMDLG32.DLL" Alias "GetSaveFileNameA" (pOpenfilename As tagOPENFILENAME) As Long Public Function GuardarArchivo( _Optional ByVal Hwnd As Long, _Optional ByVal DftPath As String, _Optional ByVal DftFile As String, _Optional ByVal DftTitle As String, _Optional ByVal DftExt As String, _Optional ByVal FilterIdx As Integer) As String On Error GoTo Err_GuardarArchivo Dim strFilter As String strFilter = "Todos los archivos (*.*)" & Chr(0) & "*.*" & Chr(0) _ & "Archivos de texto delimitado (*.csv)" & Chr(0) & "*.csv" & Chr(0) _ & "Archivos de intercambio de datos (*.dif)" & Chr(0) & "*.dif" & Chr(0) _ & "Archivos de texto (*.txt)" & Chr(0) & "*.txt" & Chr(0) _ & "Libros de microsoft excel (*.xls)" & Chr(0) & "*.xls" & Chr(0) If Trim(DftExt) = "" Then DftExt = "*.*" If Trim(DftTitle) = "" Then DftTitle = "Guardar archivo como" If Trim(DftPath) = "" Then DftPath = App.Path If Len(DftFile) < 255 Then DftFile = DftFile & String(255 - Len(DftFile), " ") If FilterIdx = 0 Then FilterIdx = 1 Dim File As tagOPENFILENAME With File .lStructSize = Len(File) .hwndOwner = Hwnd .lpstrFilter = strFilter & Chr(0) .nFilterIndex = FilterIdx .nMaxFile = Len(DftFile) + 1 .lpstrFile = DftFile & Chr(0) .nMaxFileTitle = Len(DftTitle) + 1 .lpstrFileTitle = DftTitle & Chr(0) .lpstrTitle = DftTitle & Chr(0) .lpstrInitialDir = DftPath & Chr(0) .lpstrDefExt = DftExt & Chr(0) .flags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT .hInstance = App.hInstance .lpfnHook = 0 .lpTemplateName = 0 .nFileOffset = 0 .lCustData = 0 End With Dim lngRc As Long lngRc = GetSaveFileName(File) If lngRc <> 0 Then GuardarArchivo = Left(File.lpstrFile, InStr(1, File.lpstrFile, Chr(0)) - 1) Else GuardarArchivo = "" End If Exit Function Err_GuardarArchivo: MsgBox "Error seleccionando archivo." & String(2, vbCrLf) _ & "(" & Err.Number & ") " & Err.Description & "." _ , vbCritical, "Guardar archivo" End Function
Como curiosidad: la línea que provocaba que no apareciese el archivo por defecto era esta:
--- Código: Text --- .lpstrFile = Chr(0) & DftFile & Chr(0) El fallo es evidente, ¿no?
Espero que a alguien esto le sea útil.
Abur.
Asa:
Y alguien sabe la funcion que en vez de ofrecer coger un archivo, se pueda escojer un directorio?
Navegación
[#] Página Siguiente
Ir a la versión completa