Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2007
Avatar de Anunakis
Anunakis Anunakis is offline
Miembro
 
Registrado: abr 2004
Posts: 37
Poder: 0
Anunakis Va por buen camino
Question Cargar en un TImagen que está en otro modulo

Hola a todos,

os comento mi problema haber si me podeis ayudar:

tengo una funcion en el modulo de datos que carga una imagen de la base de datos, os pongo el codigo:
Código Delphi [-]
function TMMaestros.CargarFoto(Tabla, CodTabla, Titulo: String): TGraphic;
var
StrSQL: String;
Grafico : TGraphic;
Stream : TStream;
begin
Result := nil;
Tabla := Trim(UpperCase(Tabla));
CodTabla := Trim(CodTabla);
Titulo := Trim(Titulo);
StrSQL := 'SELECT * FROM Archivos '+
'WHERE Tabla = "'+Tabla+'"'+
' AND CodTabla = "'+CodTabla+'"'+
' AND Titulo = "'+Titulo+'"';
Funciones.AbrirQuery(Archivos,StrSQL);
if Archivos.RecordCount = 0 then
begin
StrSQL := 'SELECT * FROM Archivos '+
'WHERE Tabla = "CLIENTES"'+
' AND CodTabla = "BLANCO"'+
' AND Titulo = "FOTO"';
Funciones.AbrirQuery(Archivos,StrSQL);
end;
if Archivos.RecordCount > 0 then
begin
// CARGAR LOGO EN IMAGEN
try
Stream := Archivos.CreateBlobStream(ArchivosArchivo,bmRead);
if ExtractFileExt(ArchivosNombre.AsString) = '.bmp' then
Grafico := TBitmap.Create
else
if ExtractFileExt(ArchivosNombre.AsString) = '.jpg' then
Grafico := TJPEGImage.Create;
Grafico.LoadFromStream(Stream);
Result := Grafico;
Grafico.free;
Stream.Free;
except
Grafico.free;
Stream.free;
end;
end
else
Result := nil;
end;
Y despues lo que quiero hacer es desde un FormCliente cargar esa imagen que me devuelve la funcion en un TImagen, lo hago asi:
Código Delphi [-]
try
Foto.Picture.Graphic := MMaestros.CargarFoto('CLIENTES',MMaestros.Clientes.FieldByName('CodCliente').AsString,'FOTO');
except
end;
El error que me da es una violacion de acceso. Delphi 7 contra Access.

En cambio si meto la funcion en el mismo formulario y modifico este trozo de codigo si funciona la funcion:
Código Delphi [-]
// CARGAR LOGO EN IMAGEN
try
Stream := MMaestros.Archivos.CreateBlobStream(MMaestros.ArchivosArchivo,bmRead);
if ExtractFileExt(MMaestros.ArchivosNombre.AsString) = '.bmp' then
Grafico := TBitmap.Create;
Grafico.LoadFromStream(Stream);
Foto.Picture.Graphic := Grafico;
Grafico.free;
Stream.Free;
except
Grafico.free;
Stream.free;
end;

Gracias de antemano
__________________
Un buen programador no se mide por los programas que hace, sino por lo que ayuda a los demás programadores.
Responder Con Cita
  #2  
Antiguo 11-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
No hay que olvidar que en el fondo los objetos no son mas que punteros. Así cuando asignas un objeto a otro, lo que haces es que ambos punteros pasan a apuntar al mismo objeto. Es decir, cuando tu haces esto:
Código Delphi [-]
Result := Grafico;
Grafico.free;
Result pasa a apuntar a un objeto que ya no existe.

Una posible solución es pasar el TImage como parámetro de la función. Algo así:
Código Delphi [-]
procedure TMMaestros.CargarFoto(Tabla, CodTabla, Titulo: String; Imagen: TImage);

// ......


// CARGAR LOGO EN IMAGEN
try
Stream := Archivos.CreateBlobStream(ArchivosArchivo,bmRead);
if ExtractFileExt(ArchivosNombre.AsString) = '.bmp' then
Grafico := TBitmap.Create
else
if ExtractFileExt(ArchivosNombre.AsString) = '.jpg' then
Grafico := TJPEGImage.Create;
Grafico.LoadFromStream(Stream);
Imagen.Picture.Graphic:= Grafico;
Grafico.free;
Stream.Free;
except
Grafico.free;
Stream.free;
end;
Responder Con Cita
  #3  
Antiguo 12-02-2007
Avatar de Anunakis
Anunakis Anunakis is offline
Miembro
 
Registrado: abr 2004
Posts: 37
Poder: 0
Anunakis Va por buen camino
Muchas gracias, va perfecto, no habia caido en ese detalle, gracias de nuevo.
__________________
Un buen programador no se mide por los programas que hace, sino por lo que ayuda a los demás programadores.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dibujar sobre Timagen eljose Gráficos 7 13-12-2006 12:01:58
Cargar un archivo cuyo path está en un memo barrauda Varios 4 22-12-2005 23:10:56
error al cargar una imagen .jpg en un timagen soyhugo Varios 5 31-05-2004 19:36:19
Saber si un Tabla(dataset) esta siendo usado por otro componente cacuna OOP 3 26-05-2004 19:21:43


La franja horaria es GMT +2. Ahora son las 20:01:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi