Delphi FMX将图像从资源加载到listview对象会导致访问冲突
我有一个动态外观的TListview。我添加了一个图像对象,现在我正试图从资源中加载一个图像到这个图像对象上,但我一直遇到访问冲突 我的代码:Delphi FMX将图像从资源加载到listview对象会导致访问冲突,delphi,firemonkey,Delphi,Firemonkey,我有一个动态外观的TListview。我添加了一个图像对象,现在我正试图从资源中加载一个图像到这个图像对象上,但我一直遇到访问冲突 我的代码: procedure TfrmMain.btnAddPlayerClick(Sender: TObject); var ListItem: TListViewItem; imgBanned: TListItemImage; InStream: TResourceStream; begin InStream := TResourceStrea
procedure TfrmMain.btnAddPlayerClick(Sender: TObject);
var
ListItem: TListViewItem;
imgBanned: TListItemImage;
InStream: TResourceStream;
begin
InStream := TResourceStream.Create(HInstance, 'banned', RT_RCDATA);
lvPlayers.BeginUpdate;
try
ListItem := lvPlayers.Items.Add;
imgBanned := ListItem.Objects.FindObjectT<TListItemImage>('imgBanned');
imgBanned.Bitmap.LoadFromStream(InStream);
finally
lvPlayers.EndUpdate;
InStream.Free;
end;
end;
procedure TfrmMain.btnAddPlayerClick(发送方:TObject);
变量
ListItem:TListViewItem;
imgBanned:TListItemImage;
流内:TResourceStream;
开始
InStream:=TResourceStream.Create(HInstance,'banked',RT_RCDATA);
lvPlayers.BeginUpdate;
尝试
ListItem:=lvPlayers.Items.Add;
imgBanned:=ListItem.Objects.FindObject('imgBanned');
imgBanned.Bitmap.LoadFromStream(流内);
最后
lvPlayers.EndUpdate;
流内自由;
结束;
结束;
编辑:
调试后,我得到了以下信息,但我不知道这是什么意思。我看到它与GetFieldAddress有关,但我不确定这是什么
您需要创建自己的位图,然后将TImageListItem.bitmap设置为引用它,以便以编程方式加载图像 有关如何正确处理此问题,请查看TListViewItem.Bitmap属性的文档
您错过了开始更新/EndUpdate的try/finally。至于AV。做一些调试。这是你需要掌握的最重要的技能。逐步完成并检查所有变量。其中一个是零。在询问有关错误的问题时,请始终包含错误消息。你可能还不明白AV信息中的十六进制,但我们可以教你它的意思。哦,好的。谢谢我已经用调试信息更新了问题,并且我已经修复了beginupdate和endupdateWell,应该有两个嵌套的try/finally块再次调试。逐步检查代码,并在每行检查值。当您到达故障线路时,是否分配了
imgBanned
?是否已分配imgBanned.Bitmap
?使用断点、单步执行和检查值。这些都是你需要掌握的关键技术,它们是你的第二天性。好吧,看起来imgBanned被分配了位,但它没有得到位图:所以如果我是正确的,它试图加载一个不存在的图像?