Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: E N T E R en Marzo 14, 2011, 03:39:03 pm
-
La verdad no se como seria el titulo lo puse así por que la mayoría pregunta de esa forma. Lo que hace este código es guardar en la BD el nombre de la imagen de acuerdo al CODIGO Y NOMBRE DEL ARTICULO. Yo digo que este es la forma mas fácil y mas rápido así no crece tanto la bd.
(http://s2.subirimagenes.com/imagen/previo/thump_6110087formarticulos.png)
(http://s2.subirimagenes.com/imagen/previo/thump_6110359formarticulosalta.png)
Aca el Source
http://www.mediafire.com/?fsq2vqv3mrl8chl
-
Bien. lo que haces con la foto es hacer una copia en tu carpeta Imagenes con el nombre asignado. Esta bueno aunque por el momento hago lo mismo pero por afuera (por ahorrarme unas cuantas lineas de código jeje), es decir, le enseño al cliente que lo haga a nivel de Explorador de Windows, cuando tenga un software que masifique entonces tomare la forma que lo haces porque me parece mas adecuada.
Saliendo del tema:
Una recomendación, veo que pusiste Pictures y dentro el textbox, es claro que lo haces para darle un efecto visual mas agradable y estoy de acuerdo con ello. Pero, te recomiendo que no uses controles Pictures sino controles Images y lograras el mismo efecto, la diferencia es que cada control picture te consume mucho mas memoria que un control Image (hay quien dice que consume como 10 veces mas) y si solo es para darle ese efecto realmente no vale la pena.
No te comento sobre el uso de los Pictures que simulan formularios porque imagino que eso falta trabajar ya que pones alli el control de minimizar, maximizar y cerrar y solo están dibujados. Pero ten cuidado que cuando abres el Picture formulario el usuario todavia tendria acceso a los controles que lo rodean y puedes tener una funcionalidad inesperada.
Saludos
-
No te comento sobre el uso de los Pictures que simulan formularios porque imagino que eso falta trabajar ya que pones alli el control de minimizar, maximizar y cerrar y solo están dibujados. Pero ten cuidado que cuando abres el Picture formulario el usuario todavia tendria acceso a los controles que lo rodean y puedes tener una funcionalidad inesperada.
Gracias por las recomendaciones YvanB lo tomare en cuenta pero como dices ahí hay a tras de todo un Picture que se llama picBloque que cuando le llamas a las ventanas simuladas se bloquea todo y no se puede volver atrás. podes probar lo uso así para evitar escribir millones de cmdguardar.enabled = false cmdeditar.enabled = false, etc....
-
De acuerdo, solo para meter un poco mas de leña jeje
1.- No es necesario hacer por cada control un .enabled = false, solo haces algo similar a (checar detalles y ajustar):
Dim xCtrl As Control
For Each xCtrl In Me.Controls
If TypeOf xCtrl Is CommandButton Then
xCtrl.Enabled = False
End If
Next
2.- Sin embargo tampoco usaría esto porque estaría cargando igual muchos controles dentro de un pic que solo lo usare cada vez que lo invoque, preferiria usar un nuevo form para agregar un producto nuevo y llamarlo así: frmNuevoProd.Show 1
De esta forma, el "1" hace que quede inaccesible el formulario anterior hasta que no cerremos el frmNuevoProd.
Solo son sugerencias, igual si la forma que lo haces te resulta mas cómodo y eres mas eficiente y productivo desarrollando asi entonces dale con todo y sobre esa forma ajustamos mas.
Un abrazo.
-
frmNuevoProd.Show 1 esto no me lo sabia y si cada día se aprende algo jejejeje
De esta forma, el "1" hace que quede inaccesible el formulario anterior hasta que no cerremos el frmNuevoProd.
-
Al principio yo pensaba lo mismo y trabajaba asi desde hace mucho tiempo, ssccaann y otros grandes programadores me asesoraron para que lo hiciera asi.
Pero encontre una forma muy facil y de pocos recursos a la base de datos. Lo primero que hay que hacer es aprender a trabajar con los archivos temporales y poder eliminarlos. yo cargo la imagen dentro de un picture box o imagebox a preferencia es lo mismo.... y empleo este codigo para poder mostrarlo en el control.
Sub Centrar_Imagen(Objeto As Object, Path_Imagen As String)
On Error GoTo ErrSub
Dim Pos_x As Single 'Posición horizontal de la imagen
Dim Pos_y As Single 'Posición vertical de la imagen
Dim Ancho_IMG As Single 'Ancho de la imagen
Dim Alto_IMG As Single 'Alto de la imagen
Dim Ancho_Obj As Single 'Ancho en Pixeles del objeto contenedor
Dim Alto_Obj As Single 'Alto en Pixeles del objeto contenedor
Dim old_Scale As Single 'Para lamacenar el ScaleMode del objeto
Static old_Path As String
If old_Path <> Path_Imagen Then
Set Pic = LoadPicture(Path_Imagen)
End If
With Objeto
.AutoRedraw = True
.Cls
old_Scale = .ScaleMode
.ScaleMode = vbPixels
'Pasa el ancho y alto de la imagen a Pixeles
Ancho_IMG = .ScaleX(Pic.Width, vbHimetric, vbPixels)
Alto_IMG = .ScaleY(Pic.Height, vbHimetric, vbPixels)
Ancho_Obj = .ScaleWidth
Alto_Obj = .ScaleHeight
If Ancho_IMG > Ancho_Obj Then
Alto_IMG = Alto_IMG * Ancho_Obj / Ancho_IMG
Ancho_IMG = Ancho_Obj
End If
If Alto_IMG > Alto_Obj Then
Ancho_IMG = Ancho_IMG * Alto_Obj / Alto_IMG
Alto_IMG = Alto_Obj
End If
' Posición X e Y donde dibujar con PaintPicture
Pos_x = (Ancho_Obj - Ancho_IMG) / 2
Pos_y = (Alto_Obj - Alto_IMG) / 2
End With
'Dibuja la imagen
Objeto.PaintPicture Pic, Pos_x, Pos_y, Ancho_IMG, Alto_IMG
'Restaura el ScaleMode
Objeto.ScaleMode = old_Scale
old_Path = Path_Imagen
Exit Sub
'Error
ErrSub:
MsgBox Err.Description, vbCritical
End Sub
eso se coloca en un modulo y se llama de la siguiente forma
'cd es el comandialog
CD.ShowOpen
Centrar_Imagen Picture1, CD.FileName
a si que me queda la imagen dibujada en el picturebox para despues poder guardarla a un archivo temporal rediriguido al app.path de la siguiente forma
Set Imagen = Picture1.Image
SavePicture Imagen, App.Path & "\imagen.jpg"
Set Imagen = Nothing
ExportImagen App.Path & "\imagen.jpg", categorias!Imagen
y el exportimagen es el siguiente
Public Function ExportImagen(urlimg As String, Item As ADODB.Field)
On Error GoTo errimg
Dim Stream As ADODB.Stream
Set Stream = New ADODB.Stream
Stream.Type = adTypeBinary
Stream.Open
Stream.LoadFromFile urlimg
Item.Value = Stream.Read
Exit Function
errimg:
End Function
con eso se guarda en un campo BLOB o un OLEDB y lo encrypta como binario y despues lo recupera con otro modulito... esto genera una pic mas pequeña de lo que deberia ser y con una buena calidad.... aparte de eso.... no carga demasiado la base de datos.