Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como declarar Clases que almacenen imagenes (https://www.clubdelphi.com/foros/showthread.php?t=35295)

morfeo21 06-09-2006 17:54:05

como declarar Clases que almacenen imagenes
 
hola a todos. estoy realizando la creacion de una interfaz en delphi el cual almacena informacion en una tabla de bd interbase. La tabla la e llamado articuloImagen y en su estructura tiene un campo de tipo blob ,algo asi:

Código SQL [-]
CREATE TABLE ARTICULOIMAGEN
(
  "TIPINV"  INTEGER NOT NULL,
  "CODART"  VARCHAR(40) NOT NULL,
  "CODIMG"  INTEGER NOT NULL,
  "DIRIMG"  VARCHAR(150),
  "IMAGEN"  BLOB SUB_TYPE 0 SEGMENT SIZE 80,
  "FORMATO"  VARCHAR(3),
)

lo particular en esto es que en la interfaz , utilizo componentes standar ; que luego los verifico bajandolo hacia una clase , que mantiene la misma estructura , pero el problema es que no se como declarar en mi clase el cambo imagen. lo que he hecho no me a resultado. alguien sabe como poder realizar esto?

Código Delphi [-]
Tart_imagen  = Class
  Private
    ptipinv    :integer;
    pcodart    :string;
    pcodimg    :integer;
    pdirimg    :string;
    pimagen    :TBlobData;
    pformato   :Variant;
  Public
    Property tipinv  :integer   read ptipinv write ptipinv;
    Property codart  :string   read pcodart write pcodart;
    Property codimg  :integer   read pcodimg write pcodimg;
    Property dirimg  :string   read pdirimg write pdirimg;
    Property imagen  :tblobdata   read pimagen write pimagen;
    Property formato :string   read pformato write pformato;
   Constructor Create;
   procedure   Clear;
  end;

constructor Tart_imagen.Create;
begin
  inherited;
  Clear;
end;

procedure Tart_imagen.Clear;
begin
  tipinv:=0;
  codart:='';
  codimg:=0;
  dirimg:='';
  imagen:=nil;
  formato:='';
end;

function GetArticulo_imagen(Conexion:TADOConnection;Articulo_imagen:Tart_imagen):boolean;
var
  sw             : Boolean;
  PArtImagen   : TADODataSet;
begin
  Sw:=False;
  PArtImagen := TADODataSet.Create(nil);
  PArtImagen.Connection:=Conexion;
  PArtImagen.CommandText:=' Select   tipinv,codart,codimg,dirimg,imagen,formato'+
                          ' from art_imagen '+
                          ' where tipinv = : p01 and Codart = : p02 and Codimg = : p03 ';
  PArtImagen.Parameters.ParamByName('p01').Value:=Articulo_imagen.tipinv;
  PArtImagen.Parameters.ParamByName('p02').Value:=Articulo_imagen.codart;
  PArtImagen.Parameters.ParamByName('p03').Value:=Articulo_imagen.codimg;
  PArtImagen.Open;
  PArtImagen.First;
  if not(PArtImagen.Eof) then
   begin
     Articulo_imagen.tipinv :=PArtImagen.FieldByName('tipinv').Value;
     Articulo_imagen.codart :=PArtImagen.FieldByName('codart').Value;
     Articulo_imagen.codimg :=PArtImagen.FieldByName('codesp').Value;
     Articulo_imagen.dirimg :=PArtImagen.FieldByName('dirimg').Value;
     Articulo_imagen.imagen :=PArtImagen.FieldByName('imagen').Value;
     Articulo_imagen.formato :=PArtImagen.FieldByName('formato').Value;
     SW:=True;
   end;
  PArtImagen.Close;
  PArtImagen.Free;
  Result:=sw;
end;

nota : si me dieran alguna recomendacion adicional, se los agradeceria mucho. gracias:o

chalitox 06-09-2006 21:18:12

a ver si entendi? -> Vos lo que queres hacer es traer una imagen de la DB y tenerla en una clase.

Jonnathan 06-09-2006 21:20:41

Hola morfeo21, hace un tiempo vi un componente donde almacenaban una imagen de una base de datos en un campo de tipo TPicture. Para asignarlo sería algo como:
Código Delphi [-]... Private ptipinv :integer; pcodart :string; pcodimg :integer; pdirimg :string; pimagen :TPicture; pformato :Variant; ... Property imagen :tPicture read pimagen write pimagen; ... //Mas abajo a la hora de asignarlo if not(PArtImagen.Eof) then begin Articulo_imagen.tipinv := PArtImagen.FieldByName('tipinv').Value; Articulo_imagen.codart := PArtImagen.FieldByName('codart').Value; Articulo_imagen.codimg := PArtImagen.FieldByName('codesp').Value; Articulo_imagen.dirimg := PArtImagen.FieldByName('dirimg').Value; Articulo_imagen.imagen.Assign(PArtImagen.FieldByName('imagen').Value); Articulo_imagen.formato :=PArtImagen.FieldByName('formato').Value; SW:=True; end;

Tambien tendrías que crear y destruir ese objeto TPicture junto con tu componente. Pruébalo a ver si te funciona asi.

Jonnathan 06-09-2006 21:26:24

Perdon por el mensaje repetido y el mal formato, creo que tengo problemas con mi navegador, si algún moderador lo puede arreglar... :(

jachguate 06-09-2006 21:38:29

Podes borrarlos vos mismo... le das en Editar, y luego Borrar.

Saludos.

;)

bismarck_sierra 07-09-2006 00:31:56

Que tal

Te paso unas modificaciones, con esto te debe funcionar, haber que tal te parece.

Código Delphi [-]
Tart_imagen  = Class
  Private
    ptipinv    :integer;
    pcodart    :string;
    pcodimg    :integer;
    pdirimg    :string;
    pformato   :Variant;
    strImagen: TMemoryStream;
  Public
    Property tipinv  :integer   read ptipinv write ptipinv;
    Property codart  :string   read pcodart write pcodart;
    Property codimg  :integer   read pcodimg write pcodimg;
    Property dirimg  :string   read pdirimg write pdirimg;
    Property imagen  :tblobdata   read pimagen write pimagen;
    Property formato :string   read pformato write pformato;
    property Imagen: TMemoryStream read strImagen write strImagen;
   Constructor Create;
   procedure   Clear;
  end;

constructor Tart_imagen.Create;
begin
  inherited;
  strImagen:= TMemoryStream.Create;
  Clear;
end;

procedure Tart_imagen.Clear;
begin
  tipinv:=0;
  codart:='';
  codimg:=0;
  dirimg:='';
  imagen:=nil;
  formato:='';
  strImagen.Clear;
end;

function GetArticulo_imagen(Conexion:TADOConnection;Articulo_imagen:Tart_imagen):boolean;
var
  sw             : Boolean;
  PArtImagen   : TADODataSet;
  fldCampo: TField;
begin
  Sw:=False;
  PArtImagen := TADODataSet.Create(nil);
  PArtImagen.Connection:=Conexion;
  PArtImagen.CommandText:=' Select   tipinv,codart,codimg,dirimg,imagen,formato'+
                          ' from art_imagen '+
                          ' where tipinv = : p01 and Codart = : p02 and Codimg = : p03 ';
  PArtImagen.Parameters.ParamByName('p01').Value:=Articulo_imagen.tipinv;
  PArtImagen.Parameters.ParamByName('p02').Value:=Articulo_imagen.codart;
  PArtImagen.Parameters.ParamByName('p03').Value:=Articulo_imagen.codimg;
  PArtImagen.Open;
  PArtImagen.First;
  if not(PArtImagen.Eof) then
   begin
     Articulo_imagen.tipinv :=PArtImagen.FieldByName('tipinv').Value;
     Articulo_imagen.codart :=PArtImagen.FieldByName('codart').Value;
     Articulo_imagen.codimg :=PArtImagen.FieldByName('codesp').Value;
     Articulo_imagen.dirimg :=PArtImagen.FieldByName('dirimg').Value;
     Articulo_imagen.formato :=PArtImagen.FieldByName('formato').Value;
    fldCampo:= FieldByName('imagen');
    Articulo_imagen.strImagen:= CreateBlobStream(fldCampo, bmRead);
     SW:=True;
   end;
  PArtImagen.Close;
  PArtImagen.Free;
  Result:=sw;
end;

morfeo21 08-09-2006 16:43:58

Gracias por la pronta respuesta por parte de todos Uds. se los agradesco mucho. Realizare las pruebas pertinentes ahora mismo


La franja horaria es GMT +2. Ahora son las 16:47:48.

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