Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Abrir/Guardar/Guardar como desde Menu Contextual

Estas en el tema de Abrir/Guardar/Guardar como desde Menu Contextual en el foro de Visual Basic clásico en Foros del Web. Buenas. Tengo creada una aplicación. Guardo y abro archivos sin problemas. Lo que quiero es que al darle a guardar, si aun no está guardado ...
  #1 (permalink)  
Antiguo 12/09/2011, 10:42
 
Fecha de Ingreso: abril-2007
Mensajes: 99
Antigüedad: 17 años
Puntos: 0
Abrir/Guardar/Guardar como desde Menu Contextual

Buenas. Tengo creada una aplicación. Guardo y abro archivos sin problemas. Lo que quiero es que al darle a guardar, si aun no está guardado el archivo salga el diálogo tipo "Guardar como", y si ya está guardado, que con solo darle a guardar se guarde sin tener que decirle otra vez donde está el archivo.

Código:
'CODIGO PARA ABRIR ARCHIVO

Private Sub AbrirPresupuesto_Click()
Dim OFName As OPENFILENAME
Dim RutaArchivo As String
Dim Variable
       
    With OFName
        .lStructSize = Len(OFName)
        'Establecemos el hwnd del form
        .hwndOwner = Me.hWnd
        'Establecemos el numero de instancia de la aplicacion
        .hInstance = App.hInstance
        'Establecemos el filtro de archivos a mostrar, _
         en este caso txt y todos los ficheros
        .lpstrFilter = "Archivos de texto (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + _
                       "Todos los archivos (*.*)" + Chr$(0) + "*.*" + Chr$(0)
        'Acá debemos crear un buffer para el archivo
        .lpstrFile = Space$(254)
        'Establecemos el tamaño maximo retornado
        .nMaxFile = 255
        'Creamos un buffer para el titulo del archivo
        .lpstrFileTitle = Space$(254)
        'Establecemos el tamaño maximo retornado
        .nMaxFileTitle = 255
        'Establecemos el directorio por defecto que mostrará el dialogo
        '.lpstrInitialDir = "C:\"
        'El title
        .lpstrTitle = "Abrir archivos"
        'Flasgs que detereminan caracteristicas del dialogo
        .flags = 0
    End With
       
    
    'Abrimos el cuadro de diálogo pasándole _
     a GetOpenFileName la estructura anterior
    If GetOpenFileName(OFName) Then
        RutaArchivo = Trim$(OFName.lpstrFile)
        
            Open RutaArchivo For Input As #1
                        
            Dim linea As String, Total As String
            List1.Clear
            Do Until EOF(1)
            Line Input #1, linea
                List1.AddItem linea
            Loop
            
            Close #1
    SaveSetting "RutaArchivo", "Valores", "Path", txtruta.Text
    SaveSetting "NombreArchivo", "Valores", "Path", txtarchivo.Text

    Close #1
    

    End If
    

    
End Sub
Código:
'CÓDIGO "GUARDAR COMO"

Private Sub guardar_como_Click()
Dim sFile As String

'TareasPendientes: Agregar código 'mnuFileSaveAs_Click'.
'MsgBox "Agregar código 'mnuFileSaveAs_Click'."
With dlgCommonDialog
.DialogTitle = "Guardar"
.CancelError = False
'Pendiente: establecer los indicadores y atributos del control common dialog
.Filter = "Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*"

.ShowSave
If Len(.FileName) = 0 Then
Exit Sub
End If
sFile = .FileName
End With


Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
    
' Comprobar archivo
If fso.FileExists(sFile) = "Verdadero" Then
    If MsgBox("El archivo ya existe. ¿Desea reemplazarlo?", vbExclamation + vbYesNo, "Reemplazar Archivo") = vbYes Then
GoTo Sigueeee
End If
End If

Sigueeee:


Dim canalLibre As Integer
'Obtenemos un canal libre que nos dará
'el sistema oparativo para poder operar
canalLibre = FreeFile
' Abrimos el fichero en el canal dado
Open sFile For Output As #canalLibre

    
'Escribimos el contenido del TextBox al fichero
        Print #canalLibre, var1
        Print #canalLibre, var2
        
                
Close #canalLibre

SaveSetting "RutaArchivo", "Valores", "Path", txtruta.Text
SaveSetting "NombreArchivo", "Valores", "Path", txtarchivo.Text


End Sub
Código:
Private Sub Form_Load()



txtruta.Text = GetSetting("RutaArchivo", "Valores", "Path", "NO_HAY_PATH")
txtarchivo.Text = GetSetting("NombreArchivo", "Valores", "Path", "NO_HAY_PATH")

End Sub

Última edición por oskarrr; 14/09/2011 a las 05:34
  #2 (permalink)  
Antiguo 15/09/2011, 15:15
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Abrir/Guardar/Guardar como desde Menu Contextual

Hola!!
Al momento de guardar pregunta lo siguiente:

Código vb:
Ver original
  1. '
  2.   IF LEN(DIR(RUTA_ARCHIVO))=0 THEN
  3.       'NO EXISTE, MOSTRAR GUARDAR COMO...
  4.      Commondialog.ShowSave
  5.    ELSE
  6.       'EXISTE GUARDAR NORMALMENTE
  7.      'TU CODIGO DE GUARDAR
  8.      'TU CODIGO DE GUARDAR
  9.      'TU CODIGO DE GUARDAR
  10.   END IF
  #3 (permalink)  
Antiguo 16/09/2011, 00:11
 
Fecha de Ingreso: abril-2007
Mensajes: 99
Antigüedad: 17 años
Puntos: 0
Respuesta: Abrir/Guardar/Guardar como desde Menu Contextual

Gracias. Lo había solucionado de manera menos profesional, pero funcionaba.

Código:
Declaro Guardado As Boolean '0 no está guardado. 1 está guardado.
Guardado=0

MenuGuardarComo
     Si fue bien -> Guardado=1

MenuGuardar
    If guardado=1
         muestro meno guardar como
    else
          oculto el menú de guardar y guardo directamente.
    end if
Ahora me surge otra pregunta. Para no tener que repetir las instrucciones de guardar en dos sitios (en el menú de guardar y en el menú de guardar como), sería posible hacer un goto entre sub, o alguna otra idea.

Gracias por tu ayuda Lokoman.
  #4 (permalink)  
Antiguo 16/09/2011, 06:56
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Abrir/Guardar/Guardar como desde Menu Contextual

Chequea este codigo a ver si te sirve:

Código vb:
Ver original
  1. Private Sub Guardar_Como_Click()
  2. 'CÓDIGO "GUARDAR COMO"
  3.   DIM sFile AS STRING
  4.  
  5.    With dlgCommonDialog
  6.       .DialogTitle = "Guardar"
  7.       .CancelError = False
  8.       .Filter = "Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*"
  9.       .ShowSave
  10.    
  11.       If Len(.FileName) = 0 Then   Exit Sub
  12.  
  13.       sFile = .FileName
  14.    End With
  15.  
  16. 'LLAMADA AL SUB GUARDAR_DATOS
  17.   GUARDAR_DATOS SFILE
  18.  
  19. 'LIMPIAR LA VARIABLE SFILE
  20.   sFile = EMPTY
  21. End Sub
  22.  
  23.  
  24. '----------------------------------------------------------------
  25.  
  26.  
  27. Private Sub Guardar_Click()
  28. 'CÓDIGO "GUARDAR"
  29.  
  30.    Dim fso As Object
  31.    Set fso = CreateObject("Scripting.FileSystemObject")
  32.    
  33. ' Comprobar archivo
  34.   If fso.FileExists( txtarchivo.Text) = "Verdadero" Then
  35.       If MsgBox("El archivo ya existe. ¿Desea reemplazarlo?", vbExclamation + vbYesNo, "Reemplazar Archivo") = vbYes Then
  36. 'LLAMADA AL SUB GUARDAR_DATOS
  37.         GUARDAR_DATOS txtarchivo.Text
  38.       End If
  39.    End If
  40. End Sub
  41.  
  42.  
  43. '----------------------------------------------------------------
  44.  
  45.  
  46. SUB GUARDAR_DATOS(strARCHIVO AS STRING)
  47.    Dim canalLibre As Integer
  48.  
  49.    IF strARCHIVO <>EMPTY THEN
  50.       canalLibre = FreeFile
  51.  
  52.       Open strARCHIVO For Output As #canalLibre
  53.          Print #canalLibre, var1
  54.          Print #canalLibre, var2
  55.       Close #canalLibre
  56.  
  57.       SaveSetting "RutaArchivo", "Valores", "Path", txtruta.Text
  58.       SaveSetting "NombreArchivo", "Valores", "Path", txtarchivo.Text
  59.    END IF
  60. END SUB
  #5 (permalink)  
Antiguo 19/09/2011, 04:07
 
Fecha de Ingreso: abril-2007
Mensajes: 99
Antigüedad: 17 años
Puntos: 0
Respuesta: Abrir/Guardar/Guardar como desde Menu Contextual

He usado la llamada al sub que me has puesto que no sabía como hacerlo y la he adaptado al código que tenía, porque lo que yo quiero es que al darle a "Guardar", si el archivo ya ha sido guardado, lo sobreescriba sin preguntar, y que al darle a "Guardar como" ya si abra el cuadro de diálogo de guardar. Pego el código utilizado por si a alguien le vale.

Y una vez más, gracias Lokoman. Me gustaría enviarte la aplicación que estoy haciendo para que le eches un vistazo aunque aun no esté acabada del todo, ya que me has ayudado muchas veces y sin tu ayuda y la de todos los del foro no se si hubiera sido capaz de sacarla adelante.

Código:
'CODIGO "GUARDAR"

Private Sub GuardarPresupuesto_Click()

Dim sFile As String
Dim fso As Object
Dim canalLibre As Integer
    
If guardar = 0 Then 'Archivo todavía no guardado
        
With dlgCommonDialog
.DialogTitle = "Guardar"
.CancelError = False
'Pendiente: establecer los indicadores y atributos del control common dialog
.Filter = "Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*"

.ShowSave
If Len(.FileName) = 0 Then
Exit Sub
End If
sFile = .FileName
End With




Set fso = CreateObject("Scripting.FileSystemObject")
    

    ' Comprobar archivo
    If fso.FileExists(sFile) = "Verdadero" Then
        If MsgBox("El archivo ya existe. ¿Desea reemplazarlo?", vbExclamation + vbYesNo, "Reemplazar Archivo") = vbYes Then
                'LLAMADA AL SUB GUARDAR_DATOS
                GUARDAR_DATOS sFile
        End If
    End If
End If



If guardar = 1 Then 'Archivo ya guardado
        
       'LLAMADA AL SUB GUARDAR_DATOS
        GUARDAR_DATOS NombreArchivo
   
End If
          

End Sub
Código:
'CÓDIGO "GUARDAR_COMO"

Private Sub guardar_como_Click()

Dim sFile As String

With dlgCommonDialog
.DialogTitle = "Guardar"
.CancelError = False
'Pendiente: establecer los indicadores y atributos del control common dialog
.Filter = "Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*"

.ShowSave
If Len(.FileName) = 0 Then
Exit Sub
End If
sFile = .FileName
End With



Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
    

    ' Comprobar archivo
    If fso.FileExists(sFile) = "Verdadero" Then
        If MsgBox("El archivo ya existe. ¿Desea reemplazarlo?", vbExclamation + vbYesNo, "Reemplazar Archivo") = vbYes Then
            'LLAMADA AL SUB GUARDAR_DATOS
            GUARDAR_DATOS sFile
        End If
    Else
        GUARDAR_DATOS sFile
    End If


  
End Sub
Código:
'SUB GUARDAR DATOS

Sub GUARDAR_DATOS(sFile As String)
   Dim canalLibre As Integer
    
   
      canalLibre = FreeFile
    
      Open sFile For Output As #canalLibre
         Print #canalLibre, TIpoTrabajo
         Print #canalLibre, Cantidad_TextBox
         Print #canalLibre, TipoPapel
      Close #canalLibre
 
        guardar = 1
        NombreArchivo = sFile
      SaveSetting "RutaArchivo", "Valores", "Path", txtruta.Text
      SaveSetting "NombreArchivo", "Valores", "Path", txtarchivo.Text

End Sub
Código:
'A COLOCAR EN EL FORM LOAD

Private Sub Form_Load()



txtruta.Text = GetSetting("RutaArchivo", "Valores", "Path", "NO_HAY_PATH")
txtarchivo.Text = GetSetting("NombreArchivo", "Valores", "Path", "NO_HAY_PATH")
guardar = 0 '0 sin guardar previamente. 1 guardado

End Sub
  #6 (permalink)  
Antiguo 19/09/2011, 10:32
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Abrir/Guardar/Guardar como desde Menu Contextual

Un placer ayudarte en lo posible

Etiquetas: contextual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:39.