Estoy tratando de crear un Previewlist donde agrego una imagen y un botón de eliminar encima en TFramedVertScrollbar con este código:

var
PreviewList: TFramedVertScrollBox;
i: integer;
...
procedure TDashboard.AddClick(Sender: TObject);
var
  sImg: TImage;
  sBtn: TButton;
  sbit: TBitmap;
begin
  sbit := TBitmap.Create;
  try
    with sbit do
    begin
      Width := Image1.Bitmap.Width;
      Height := Image1.Bitmap.Height;
      Assign(Image1.Bitmap);
    end;
    sImg := TImage.Create(PreviewList);
    with sImg do
    begin
      Align := TAlignLayout.Top;
      Position.X := i * Height;
      Height := 60;
      Margins.Bottom := 2;
      Bitmap.Assign(sbit);
      Parent := PreviewList;
      WrapMode := TImageWrapMode.Stretch;
      onClick := PreviewItemClick;
    end;
    sBtn := TButton.Create(sImg);
    with sBtn do
    begin
      StyleLookup := 'listboxdeleteitem';
      Position.X := sImg.Width - 25;
      Position.Y := 5;
      Width := 15;
      Height := 15;
      Text := 'X';
      Parent := sImg;
      onClick := PreviewItemClick;
    end;
    i := i + 1;
  finally
    sbit.Free;
    Image1.Bitmap.Assign(nil);
  end;
end;

La creación de PreviewItem funciona pero no se elimina, ya que al eliminar PreviewItem, la barra del sistema no responde (por ejemplo, no se puede mover, cerrar o hacer clic) o no toma eventos del mouse y tengo que hacer clic en otros componentes en el formulario para hacerlo Responde de nuevo.

Intenté dos versiones de PreviewListClick primero que se encuentran a continuación:

begin
 PreviewList.BeginUpdate;
 Obj := TButton(Sender).Parent;
 FreeAndNil(Obj); 
 PreviewList.EndUpdate;
end;

Lo anterior hace que SystemBar no responda, así que me gustó esto:

begin
 PreviewList.BeginUpdate;
 PreviewList.RemoveObject(TButton(Sender).Parent);
 PreviewList.EndUpdate;
end;

SystemBar responde en este caso y el elemento se elimina, pero hay un problema, después de hacer clic en el botón Eliminar de PreviewItem, los elementos de PreviewList no se actualizan.

Por ej. si hay cuatro elementos en la lista y si elimino el segundo, el elemento se elimina pero la lista no se actualiza, ya que la posición del segundo elemento aún se mantiene. ahora la PreviewList se ve así:

Item1<×BlankSPace<×Item2 Item3

¿Cómo agregar y eliminar elementos correctamente?

0
Winsye 16 nov. 2019 a las 22:32

1 respuesta

La mejor respuesta

Eliminar el objeto del contenido funcionó bien

PreviewList.Content.RemoveObject(TButton(Sender).Parent);

1
Winsye 16 nov. 2019 a las 20:46