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

Clearing an ImageObjectAppearance item from Dynamic Listview

首先是代码:

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 还是个新手,但是我学得很快,所以我洗耳恭听。

动态列表视图充满了可以select编辑和通过电子邮件发送的项目。我允许用户通过 mousedown 事件捕获的鼠标右键单击来 select 多个项目。 当用户右键单击一个项目时,我在动态列表视图中使用 TImageObjectAppearance 项目显示图像。如果用户右键单击当前显示图像的 selected 项目,我想清除图像,通知用户该项目已被取消 selected。我在 selecting 或 unselecting 时遍历所有项目,因为要循环的项目不多(少于 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;