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

Problema muy dificil con CommonDialog

Estas en el tema de Problema muy dificil con CommonDialog en el foro de Visual Basic clásico en Foros del Web. Hola a todos: Tengo un problemilla con el CommonDialog "Guardar como", concretamente para los casos en los que se quiere guardar el archivo con un ...
  #1 (permalink)  
Antiguo 14/03/2008, 05:14
 
Fecha de Ingreso: enero-2008
Mensajes: 61
Antigüedad: 16 años, 3 meses
Puntos: 0
Problema muy dificil con CommonDialog

Hola a todos:
Tengo un problemilla con el CommonDialog "Guardar como", concretamente para los casos en los que se quiere guardar el archivo con un nombre ya existente de un directorio, y se presenta la pregunta de si se quiere reemplazar el archivo. El codigo es el siguiente:("controles" es el nombre del common)

Private Sub mnuFileSaveAs_Click()
Dim nombre As String

5 With Controles
.DialogTitle = "Guardar como"
.CancelError = False
.Filter = "Archivo de texto (*.txt)|*.txt"
.ShowSave
If .FileName = vbNullString Then
Exit Sub
Else
nombre = Dir(Left(.FileName, Len(.FileName) - Len(.FileTitle)))
Do While Len(nombre) > 0
If nombre = .FileTitle Then
If MsgBox("El archivo " & .FileTitle & " ya existe. Desea reemplazarlo?", vbQuestion + vbYesNo) = vbYes Then
Exit Do
Else
GoTo 5
End If
End If
nombre = Dir()
Loop
End If
direccion = .FileName
nombre_archivo = Left(.FileTitle, Len(.FileTitle) - 4)
End With
Guardar_datos (direccion)
End Sub

El problema es que no puedo identificar si el usuario a pinchado "Guardar", "Cancelar" o cierra la ventana. La parte:

If .FileName = vbNullString Then
Exit Sub

funciona perfectamente, y cuando el usuario quiere guardar con un nombre existente, el msgbox tambien funciona bien. Sin embargo, en el caso de que se escriba un nombre existente, pero, se pulsa "Cancelar" o quiera cerrar la ventana, en vez de ocultarla, se me muestra el msgbox. Por lo tanto, necesito identificar estos tres botones para ejecutar la parte del msgbox solo cuando el usuario pinche "Guardar".

No se, e intentado explicar mi problema lo mejor posible. Espero que si se ha entendido mi problema, me podais ayudar con la solucion que busco, o sino otro codigo que haga lo que me propongo.

Gracias de antemano

Agur.
  #2 (permalink)  
Antiguo 14/03/2008, 05:48
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Problema muy dificil con CommonDialog

Hola etxebe, no el problema no es dificil. Solamente tienes que cambiar esta linea

If .FileName = vbNullString Then

por esta otra

If .FileTitle = vbNullString Then
  #3 (permalink)  
Antiguo 14/03/2008, 06:43
 
Fecha de Ingreso: enero-2008
Mensajes: 61
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Problema muy dificil con CommonDialog

Me parece que no has entendido mi problema, Avellaneda, porque no va por ahi.
El problema es que aga lo que aga (Guardar, Cancelar o cerrar), el programa piensa siempre que quiero Guardar, y necesito que si se cierra la ventana, se oculte y punto. No se si me explico.
  #4 (permalink)  
Antiguo 14/03/2008, 07:31
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Re: Problema muy dificil con CommonDialog

Hola,por decirlo asi nomas,ahi tenes un "quilombo" de IFs,es eso seguro fijate que hace cada uno,pero estan uno adentro del otro y eso debe hacer que no haga lo que vos queres,para reconocer el boton cancelar tenes que poner la propiedad CancelError = True asi salta el error y lo podes captar con un simple On Error Goto ..... por el numero del error y ahi le decis que haga lo que vos quieras.y para reconocer si el archivo ya existe hay qeu pasarle flagas al commondialog no es asi nomas,el flag es cdlOFNOverwritePrompt te manda un mensaje si existe y si desea reemplazarlo...mejor leete como funciona el commondialog del guardar aca:

Control CommonDialog

igualmente yo no lo haria con el commondialog ,porque es necesario un ocx y es mejor hacerlo desde codigo con el api de windows,y no tendrias que llevar el ocx del commondialog tampoco.

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #5 (permalink)  
Antiguo 14/03/2008, 08:47
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Problema muy dificil con CommonDialog

Bueno, parece ser que el problema "muy dificil" es por exceso de código sin sentido.

Pon especial atención al resultado del MsgBox, ya que lo estás poniendo al revés.

Prueba con este código y después nos comentas si te funciona o no.

Código:
Private Sub mnuFileSaveAs_Click()
Dim nombre As String
With Controles
    .DialogTitle = "Guardar como"
    .CancelError = False
    .Filter = "Archivo de texto (*.txt)|*.txt"
    .ShowSave
    If .FileTitle = "" Or .FileName = "" Then Exit Sub
    nombre = .FileTitle
    If Len(Dir(nombre)) Then
        If MsgBox("El archivo " & nombre & " ya existe. Desea reemplazarlo?", vbQuestion + vbYesNo) = vbNo Then
            nombre = ""
            .FileName = ""
            Exit Sub
        End If
    End If
    direccion = .FileName
    nombre_archivo = Left(.FileTitle, Len(.FileTitle) - 4) ' esto sé para qué sirve
End With
Guardar_datos (direccion)
End Sub

Última edición por Avellaneda; 14/03/2008 a las 09:16
  #6 (permalink)  
Antiguo 14/03/2008, 09:34
 
Fecha de Ingreso: enero-2008
Mensajes: 61
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Problema muy dificil con CommonDialog

Avellaneda siento si has mal interpretado lo que decía("muy dificil" lo digo porque soy bastante novato y a veces las cosas mas simples me parecen imposibles). No pretendía crear conflictos, sino arreglar el problema. Gracias por las soluciones que me habéis dado. Al final, optaré por CancelError=true, ya que no tengo tiempo y como soy novato no me atrevo a empezar con las APIs en esta aplicacion porque tardaria bastante y si surge algun error no sabria solucionarlo.

Gracias por vuestro interes y ayuda

Agur.
  #7 (permalink)  
Antiguo 14/03/2008, 09:56
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Problema muy dificil con CommonDialog

No, no he interpretado mal lo de "muy dificil", unicamente lo entrecomillé para resaltar que no era una frase mía.

¿conflictos, quien ha creado conflictos? Estamos para ayudar (dentro de nuestros pobres conocimientos) a los que lo necesitan.

Y.. ánimo etxebe, que nadie nació sabiendo y los novatos terminan siendo expertos!

Agur.
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 11:14.