PDA

Ver la Versión Completa : Problemas para eliminar imagenes de un ImageList


camiz
24-04-2014, 22:34:16
nuevamente por aquí necesitando ayuda, tengo un problema con un TImageList.
lo que sucede es que el TImageList me sirve para cargar imágenes desde una base de datos para posteriormente mostrar las imágenes en un TListView, hasta aquí todo bien : guardo la imagen en la base de datos, lo cargo en el TImageList y lo muestro en un TListView correcto.
el problema surge cuando hago el procedimiento otra vez ya no me muestra la imagen correcta.

he revisado todo en busca del error y creo que lo encontré en el TImageList, sucede que cada vez que se ejecuta ejecuta el código va aumentando las imágenes en el TImageList y esto hace mostrar erróneamente la imagen incorrecta.

creo que la solución seria antes de cargar al TImageList eliminar las imágenes, pero he probado con estos código y ninguno funciona.
ImageList1.Clear;
ImageList1.Items.Clear;

hay otra manera de limpiar un TImageList;
aquí el código que utilizo para cargar imágenes
var
i, X, Y: Integer;
it: TListItem;
B: TBitmap;
P: TPNGObject;
begin
with frmConeccion.Iconos_V do
begin
frmIconos.LvIconos.Clear;
SQL.Clear;
SQL.Text := 'select * from img order by idimg asc';
Active := True;
First;
ListView1.Clear;
for i:= 0 to RecordCount -1 do
begin
P:= TPNGObject.Create;
B:= TBitmap.Create;
try
P.Assign(TBlobField(FieldByName('IMAGEN')));
B.Width:= P.Width;
B.Height:= P.Height;
B.PixelFormat:= pf32bit;
B.SetSize(B.Width, B.Height);
for Y := 0 to B.Height - 1 do
for X := 0 to B.Width - 1 do
B.Canvas.Pixels[X, Y]:= $00FFFFFF;
B.Canvas.Pen.Color := clRed;
B.Canvas.Rectangle(20, 20, 60, 60);
P.Draw(B.Canvas, Rect(0, 0, P.Width, P.Height));
ImageList1.Add(B, B);
finally
P.Free;
B.Free;
end;
Next;
end;
Active := False;
end;

ecfisa
24-04-2014, 23:48:55
Hola camiz.

Con:
ImageList1.Clear;
definitivamente estas limpiando todas las imágenes del TImageList. Muy probablemente ese efecto que mencionas se debe a que también tendrías que hacerlo con el TListView al volver a cargar los datos:
ListView1.Clear;
.

Saludos :)

camiz
25-04-2014, 00:09:04
ecfisa gracias por responder,

discúlpame, olvide comentar que estoy utilizando el componente TsAlphaImageList de AlphaControls v 8. lo uso por que es mas versátil se puede cargar imágenes de cualquier tamaño, y para mostrarlo lo deseado solo se configura en el tamaño que se desea usar y ya esta y lo mejor que es mas fácil obtener imágenes con fondo transparente con este.

pero en este componente no funciona.

sAlphaImageList1.Clear;

camiz
25-04-2014, 03:55:58
bueno encontré la solución lo dejo por si ha alguien le hace falta

en un TImageList o en otros, funciona perfecto asi
ImageList1.Clear;

en un componente sAlphaImageList funciona asi
sAlphaImageList1.Clear;
sAlphaImageList1.Items.Clear;
sAlphaImageList1.AcBeginUpdate;

solucionado.

ecfisa
25-04-2014, 05:19:45
Me alegro que lo hayas solucionado ^\||/

Saludos :)