正确地从 TFramedVertScrollBar 中删除项目?
Removing Items from TFramedVertScrollBar Correctly?
我正在尝试创建一个 Previewlist
,其中我使用以下代码在 TFramedVertScrollbar
中添加一个图像和一个删除按钮:
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;
PreviewItem 的创建有效但无法删除,因为在删除 PreviewItem 时 SystemBar 不响应(例如无法移动或关闭或单击)或不接受鼠标事件,我必须单击中的其他组件使其再次响应的表单。
我首先尝试了两个版本的 PreviewListClick,如下所示:
begin
PreviewList.BeginUpdate;
Obj := TButton(Sender).Parent;
FreeAndNil(Obj);
PreviewList.EndUpdate;
end;
上面的内容使 SystemBar 没有响应,所以我这样做了:
begin
PreviewList.BeginUpdate;
PreviewList.RemoveObject(TButton(Sender).Parent);
PreviewList.EndUpdate;
end;
在这种情况下,SystemBar 正在响应并删除了项目,但有一个问题,在单击 PreviewItem 的删除按钮后,PreviewList 项目没有更新。
例如。如果列表中有四个项目,如果我删除第二个项目,则项目将被删除,但列表不会更新,因为第二个项目的位置仍然保留。现在 PreviewList 看起来像这样:
Item1->BlankSPAce->Item2->Item3
如何正确添加和删除项目?
从内容中删除对象工作正常
PreviewList.Content.RemoveObject(TButton(Sender).Parent);
我正在尝试创建一个 Previewlist
,其中我使用以下代码在 TFramedVertScrollbar
中添加一个图像和一个删除按钮:
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;
PreviewItem 的创建有效但无法删除,因为在删除 PreviewItem 时 SystemBar 不响应(例如无法移动或关闭或单击)或不接受鼠标事件,我必须单击中的其他组件使其再次响应的表单。
我首先尝试了两个版本的 PreviewListClick,如下所示:
begin
PreviewList.BeginUpdate;
Obj := TButton(Sender).Parent;
FreeAndNil(Obj);
PreviewList.EndUpdate;
end;
上面的内容使 SystemBar 没有响应,所以我这样做了:
begin
PreviewList.BeginUpdate;
PreviewList.RemoveObject(TButton(Sender).Parent);
PreviewList.EndUpdate;
end;
在这种情况下,SystemBar 正在响应并删除了项目,但有一个问题,在单击 PreviewItem 的删除按钮后,PreviewList 项目没有更新。
例如。如果列表中有四个项目,如果我删除第二个项目,则项目将被删除,但列表不会更新,因为第二个项目的位置仍然保留。现在 PreviewList 看起来像这样:
Item1->BlankSPAce->Item2->Item3
如何正确添加和删除项目?
从内容中删除对象工作正常
PreviewList.Content.RemoveObject(TButton(Sender).Parent);