Programación General > Visual Basic 6.0 e inferiores

 Guardado Secuencial

(1/2) > >>

ijceba:
Saludos soy nuevo en VB y quisiera que me ayudaran con algo que de seguro para ustedes sera muy sencillo, tengo este codigo:

Private Sub Command1_Click()

Dim i%
Dim Result As Boolean
Dim FileName As String


Result = SapAcquisition1.Buffer.Save("F:datospbaprueba.jpg", "-format jpg", 0, 1)


End Sub

donde SapAcquisition1 es un componente de una camara que estoy utilizando, y esto lo que hace es que me guarda una imagen llamada prueba en jpg en la careta F:datospba ok.

Hasta ahi todo bien, ahora lo que quiero es que cuando yo le de click a este button me guarde en esa carpeta un archivo prueba1.jpg, y cuado le de de nuevo click me guarde otro si borrarme el anterior llamado prueba2.jpg, y asi la cantidad de veces que sea, de tal forma que yo pueda llegar a tener un archivo prueba1552.jpg si le di click 1552 veces.

Y otra cosa, me gustaria tambien que si yo cierro el programa, apago la maquina y en un mes lo buelo a abrir y le doy de nuevo click me guarde el que continuaria osea prueba1553.jpg

Esta un poco loca mi propuesta pero es de mucha importacia este programa para mi ojala me puedan ayudar

Gracias

Nebire:

--- Cita de: "ijceba" ---Saludos soy nuevo en VB ...seguro para ustedes sera muy sencillo, tengo este codigo:

Private Sub Command1_Click()
   Dim i%
   Dim Result As Boolean
   Dim FileName As String

    Result = SapAcquisition1.Buffer.Save("F:datospbaprueba.jpg", "-format jpg", 0, 1)
End Sub

...lo que quiero es que cuando yo le de click a este button me guarde en esa carpeta un archivo prueba1.jpg, ... asi la cantidad de veces que sea, de tal forma que yo pueda llegar a tener un archivo prueba1552.jpg si le di click 1552 veces.
..tambien si yo cierro el programa, apago la maquina y en un mes lo buelo a abrir y le doy de nuevo click me guarde el que continuaria osea prueba1553.jpg
Gracias
--- Fin de la cita ---

Efectivamente es muy simple....

Básicamente debes trasladar el código del botón a una función, para tenerlo más ordenado. La función debe recibir 3 ó 4 parámetros : ruta donde guardar, nombre del archivo, último nº usado y el formato con que se guardará.

El código sería algo parecido a: (las explicaciones al final... )


--- Código: Visual Basic --- ' a nivel de formulario proveemos la siguiente variables: public type InfoDatos     Ruta as string     Nombre as string     ImgIndex as long     end typeconst Config= "Config.ini"public ImgSalva as infoDatos ' carga el fichero que tiene la configuración del programa, si no existe se creaPrivate Sub Form_Load()   Dim f As Integer   Dim fichero As String    On Local Error GoTo errorAbrirConfig      fichero = App.Path & "" & Config    f = FreeFile     ' abrimos el archivo config    Open fichero For Binary As #f      ' leemos los datos del config       Get #f, 1, ImgSalva     ' aseguramos que tiene valores válidos     Call Verificar_ValoresCorrectos       ' por si corregimos valores no válidos los volvemos a guardar        Put #f, 1, ImgSalva    ' cerramos el archivo    Close f     ' verter los valores de la estructura a unos controles en el formulario, la ruta sería mejor ponerla en dirbox y drive y el nombre en un textbox y el index en un label o textbox....    ' TxtIndex.Text = ImgSalva.ImgIndex    ' TxtRuta.Text = ImgSalva.Ruta    ' TxtNombre.Text = ImgSalva.Nombre        Exit Sub errorAbrirConfig:    Close f    Call Guardar_Config    MsgBox "Ocurrió un problema al tratar de guardar el archivo config (la ruta es accesible?, de sololectura ?)" & Err.Description, vbCritical, "Error de lectura"    End  ' si no tenemos los datos adecuados finalizamos el programa.End Sub '  guardamos la configuración actual antes de salirPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)    Call Guardar_ConfigEnd Sub '  botón guardar imagen/es de la cámara, si se precisa se podría poner un bucle iterativo que recorriera todas las imágenes que tenga el  'buffer' de la cámara... Private Sub Command1_Click()    Dim k As Long     ' es posible que exista una propiedad count quepueda usarse en un bucle, estos detalles son específicos y hay que referirse a la documentación del control    ' for k= 0 to SapAcquisition1.Buffer.count        If Salvar_Imagen(ImgSalva.Ruta, ImgSalva.Nombre, ImgSalva.ImgIndex) = False Then            Beep  ' ...     código adicional cuando  falló        Else            '...   código adicional cuando  todo fue bien        End If        ' si hay una propiedad count, es posible que deba apuntarse a la siguiente imagen, tal vez un SapAcquisition1.Buffer.next        ' o tal vez SapAcquisition1.Buffer.Select(k)        ' o tal vez sea uno de los parçametros de la propia función salvar: SapAcquisition1.Buffer.save(,,,,K), en este caso debería pasarse también el parámetro k a la función.    ' nextEnd Sub ' intenta guardar una imagen, procedente de un buffer en la cámara a un archivo en la ruta especificada en el formato indicado.Private Function Salvar_Imagen(ByVal Ruta As String, ByVal Nombre As String, ByRef UltimoIndex As Long, Optional Formato As SapAcquisitionFormts = SAP_FORMAT_JPG) As Boolean    Dim FileName As String     On Local Error GoTo ErrorGuardar        FileName = Ruta & "" & Nombre & (UltimoIndex + 1) & CorresponderExtension(Formato)        ' para pruebas  con y sin dicho control, activar una línea y desactivar la otra        Salvar_Imagen = SapAcquisition1.Buffer.Save(FileName,Formato,0,1)          'Salvar_Imagen = True    ' False        If Salvar_Imagen = True Then            UltimoIndex = UltimoIndex + 1  ' el parámetro se pasó por referencia, por tanto se actualiza...        End IfErrorGuardar:End Function ' dado un formato se devuelve la extensión que le corresponde...Private Function CorresponderExtension(ByVal Formato As SapAcquisitionFormts) As String    Dim ext As String     Select Case Formato        Case SAP_FORMAT_JPG            ext = ".JPG"        Case SAP_FORMAT_BMP            ext = ".BMP"        Case SAP_FORMAT_PNG            ext = ".PNG"        Case SAP_FORMAT_GIF            ext = ".GIF"        Case Else            ext = ".Imagen_formato_no_determinado"    End Select    CorresponderExtension = extEnd Function ' guardamos la configuración actual Private Sub Guardar_Config()   Dim f As Integer   Dim fichero As String    On Local Error GoTo errorAbrirConfig     fichero = App.Path & "" & Config     f = FreeFile     Call Verificar_ValoresCorrectos    ' abrimos el archivo config    Open fichero For Binary As #f        '  guardamos configuración actual        Put #f, 1, ImgSalva    ' cerramos el archivo    Close f    Exit Sub errorAbrirConfig:     Close f     MsgBox "Ocurrió un problema al tratar de guardar el archivo config (la ruta es accesible?, de sololectura ?)" & vbCrLf & Err.DescriptionEnd Sub '  sin embargo esto no restituye estos mismos datos a los controles ya queda como trabajo para ti...Private Sub Verificar_ValoresCorrectos()    If ImgSalva.Ruta = "" Then ImgSalva.Ruta = App.Path    If ImgSalva.Nombre = "" Then ImgSalva.Nombre = "Prueba"    If ImgSalva.ImgIndex < 1 Then ImgSalva.ImgIndex = 1End Sub   
De entrada la configuración que ha de permanecer entre sesiones se guarda en un simple fichero llamado config.ini que se localiza en la misma carpeta en la que está ala aplicación (app.path)
Cuando se arranca el formulario, se lee dicha configuración, si no existe el archivo se crea, y si existe pero tiene datos no válidos garantiza datos válidos, sisucede un error al tratar de leer y rescribir la configuración la aplicación se finaliza, esto lo podrás cambiar a tu gusto...

Tras leer la configuración esta se almacena en una estructura, cuando se invoca a la función de guardar imágenes, se utilizan los valores de la estructura.
Estos valores deberían poderse cambiar desde la interfaz cambiando cuando interese la ruta, el nombre para el archivo y si se desea el índice de la imagen, usando para ellos los controles necesarios... quizás un menú y un pequeño formulario de entrada de datos, al cargarse el formulario se escribirían los datos de la estructura en los controles, si se pulsa un botón cambiar, recogería dichos datos en la estructura e invocaría a la función de guardar el archivo config, si se cierra el formulario sin pulsar dicho botón se descaratarían los cambios.... antes de guardar los datos en la estructura habría que validar (evento validate) que los valores tienen valores correctos...

En la función de guardar la imagen se envían los parámetros actuales de la estructura (de configuración), el numero que se une al nombre del fichero, sólo se actualiza cuando tuvo éxito guardar la imagen.

Importante: el formato que recibe la función no es real es decir se ha simulado una enumeración que se supone que tiene el control 'sapAdqui... ', es decir deberás localizar dicha enumeración si existe, y sustituirla por lo que yo he puesto, si no existe una enumeración pero utiliza valores tu mismo podrás crear una enumeración... si tratas de usar la enumeración que yo he 'supuesto' salvo pura casualidad te saldrá un error de objeto no encontrado....  para simular esta enumeración puede utilizarse el siguiente código de ejemplo añadido al código de arriba, y activando y desactivando las líneas oportunas en la función de salvar_imagen... que in situ se comenta.


--- Código: Visual Basic --- ' ejemplo para simular una posible enumeración de formatos... si se tiene el control debe usarse la enumeración correcta y los valores adecuados...Public Enum SapAcquisitionFormts    SAP_FORMAT_JPG = 0    SAP_FORMAT_BMP = 1    SAP_FORMAT_PNG = 2    SAP_FORMAT_GIF = 3End Enum  
La función que trata la extensión del archivo deberá igualmente atenerse a las indicaciones que señalan en el párrafo anterior...

Adicionalmente podrías incluir el formato a la estructura de configuración....
Desconozco el significado de los últimos parámetros de la función (aunque supongo que podrían ser para otras opciones, como por ejemplo definir la calidad para guardar la imagen,etc...), que utlizas para salvar la imagen para cualquier duda al respecto tendrás que dirigirte a la documentación del propio control....

p.d.: el código está hecho 'al vuelo' por lo que es posible que haya algún pequeño error, si sucede así, y no lo descubres informa del error...

saludos.

ijceba:
Saludos tu progrma esta de lo mas completo te agrdesco tu tiempo y quisiera pedirte mas ayuda, me marca un error en esta liena:

Private Function Salvar_Imagen(ByVal Ruta As String, ByVal Nombre As String, ByRef UltimoIndex As Long, Optional Formato As SapAcquisitionFormts = SAP_FORMAT_JPG) As Boolean

y el error dice:

Error de compilacion:
No se ha definido el tipo definido por el usuario

y otra cosa unicamente tengo que agregar tres txt y un button vdd?...

Nebire:

--- Cita de: "ijceba" --- me marca un error en esta liena:
Private Function Salvar_Imagen(ByVal Ruta As String, ByVal Nombre As String, ByRef UltimoIndex As Long, Optional Formato As SapAcquisitionFormts = SAP_FORMAT_JPG) As Boolean

No se ha definido el tipo definido por el usuario

--- Fin de la cita ---
Eso no es un error es una 'ignorancia'... piensa.. yo no tengo el control ese 'sapAdquisition...' como no lo tengo ignoro cuales son los métodos y propiedades que pueda tener, haciendo uso de la lógica ayudado por un poco de imaginación, ASUMO que debe tener una enumeración que refleje los formatos. Pero esto, como digo, yo lo ignoro, porque eso es específico de ese control 'sapadquisition...' como comprenderás yo no voy a conocer al detalle los miles de controles que hay en el mercado de las cámaras de fotos, la enumeración de formatos debes buscarla tú en la documentación de ese control.

Yo he SIMULADO (lo puedo poner más grande, pero el problema supongo que no es de vista sino de comprensión) un probable nombre que podría tener la enumeración. dicho de otro modo: esta enumeración 'SapAcquisitionFormts' probablemente no exista pero la que exista debe ser bastante semejante y las contantes como:  'SAP_FORMAT_JPG' probablemente tampoco existan ni se correspondan con el valor que yo les dí. Un arquitecto conoce todos los elementos de un baño y sabe como funcionan, lo que no va a saber un arquitecto es como están distribuidos en tu casa ni de qué color o marca son, eso sólo lo sabes tú que eres quien tiene el control 'sapadquisition...loquesea'...

.. capische ???


--- Cita de: "ijceba" --- y otra cosa unicamente tengo que agregar tres txt y un button vdd?...
--- Fin de la cita ---
Si no quieres hacer nada más, eso sería todo... sin embargo en vez de usar controles textbox, como te indicaba en  comentarios en el mensaje anterior sería más acorde usar un control Drive y un control DirListbox para proveer más cómodamente la ruta, para el nombre y el número si basta con un textbox... pero vamos eso va en el criterio de cada uno.

ijceba:
Nebire te felicito por tu excelente aporte, ya resolvi mis dudas y con tu codigo de base hice las modificaciones para sacar el mio con las caracteristicas de mi contro, muchas gracias por ayudarme.

Ahora tengo otra inquietud que me gustaria ver si me puedes resolver, ahora no quiero que lo guarde como imagen1.*, imagen2.* sino imagen00001.*,
imagen00002.* etc...

Gracias por su tiempo

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa