从动态列表视图中清除ImageObjectAppearance项



首先是代码:

procedure TfrmJob.lvServiceReportsMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var
i: Integer;
rct: TRectF;
begin
if Button = TMouseButton.mbRight then
for i := 0 to lvServiceReports.Items.Count-1 do
Begin
rct := lvServiceReports.GetItemRect(i);
if ( rct.Bottom >= Y) and (Y >= rct.Top ) then
if lvServiceReports.Items[i].Data['Image6'].IsEmpty
then lvServiceReports.Items[i].Data['Image6'] := imgEmailSelect.Bitmap
else ;//lvServiceReports.Items[i].Data['Image6'] := ??
end;
end;

我还是一个从VCL到Firemonkey的新手,然而,我学得相当快,所以正如俗话所说,我洗耳洗耳。

动态列表视图充满了可以选择和通过电子邮件发送的项目。我使用户能够选择多个项目通过鼠标右键点击捕获的mousedown事件的方式。当用户右键单击一个项目时,我在动态列表视图中使用TImageObjectAppearance项目显示一个图像。如果用户右键单击当前选中的项目并显示图像,我想清除该图像,通知用户该项目已被取消选中。在选择或取消选择时,我遍历所有项,因为要循环的项不多(小于100)。

我的问题是我如何去清除图像从TImageObjectAppearance (lvServiceReports.Items[I]。上面代码中的Data['Image6']是我想要清除的图像)

使用动态列表视图,您可以访问对象并强制转换它们。FMX的TListview有一个方法使它变得简单和容易。

在你的例子中,我会使用:

lvServiceReports.Items[i].Objects.FindObjectT<TListItemImage>('Image6').Bitmap := nil;

这将清除图像。

如果你想分配另一个图像,请确保重新创建它:

lvServiceReports.Items[i].Objects.FindObjectT<TListItemImage>('Image6').Bitmap := TBitmap.Create;

最新更新