我使用Windows作为主视图在Delphi 10.1 Berlin中创建了一个应用程序。我在表单上删除了TListView,并使用新的Toggle设计模式对其进行了自定义。我添加了一个TImageObjectAppearance和几个TTextObjectAppearance项。我添加了代码来设置TImageObjectAppearance的图像,文本项具有各种字体大小和样式。我在表单上还有3个TImage组件,用于根据值分配给TImageObjectAppearance.Bitmap。
当我为Win32编译它并运行它时,eveything看起来很棒。位图图像基于TListView的每一行上的值显示。当我将Style切换到Android并将View切换到Android 10"平板电脑IDE会抛出此错误:
"无法将TAppearanceObjectItem分配给TAppearanceObjectItem。"
View仍然说Android 10"平板电脑,但窗体上的实际视图仍然是Windows窗体。所以我的第一个问题是错误到底是什么?我认为Delphi应该能够使用相同的代码编译到所有这些不同的目标/设备。这当然不会发生。但等等,还有更多...
所以我切换回Style:Windows和View:Master。我单击窗体上的TImageObjectAppearance项并按下Delete键,我收到此错误:
"无法从设计器中删除持久性引用。"
但是如果单击Structure窗口中的项目并按Delete,则删除就可以了。错误?我会这么说的。无论如何,还有更多。我从Structure窗口中删除了TImageObjectAppearance项,然后切换回Style:Android和View:Android 10"平板电脑,猜猜是什么......我得到了同样的错误。但是表单上没有TImageObjectAppearance!所以我完全删除了Windows中的TListView自定义项目使用Android 10"掌握主视图并重新开始。平板电脑视图我添加了所有自定义外观对象,包括TImageObjectAppearnce.But,当我为10" Android平板电脑并在我的Galaxy Tab S2上运行,1)没有图像出现。这是我写的设置图像的代码。 (表单上有3个TImage组件,用于TImageObjectAppearance项目。)此代码在编译Win32时工作正常。
function TdmVisual.AddOrUpdateItem(AItem: TListViewItem; AMGDL: Integer): TListViewItem;
var
LObject: TListItemImage;
begin
Result := AItem;
LObject := Result.Objects.FindObjectT<TListItemImage>('imgRating');
LObject.Bitmap := TBitmap.Create;
if AMGDL < 70 then
LObject.Bitmap.Assign(fmMain.iLow.Bitmap)
else if (AMGDL >= 70) and (AMGDL <= 130) then
LObject.Bitmap.Assign(fmMain.iGreen.Bitmap)
else if (AMGDL > 130) and (AMGDL <= 180) then
LObject.Bitmap.Assign(fmMain.iYellow.Bitmap)
else
LObject.Bitmap.Assign(fmMain.iRed.Bitmap);
end;
我的第二个(第3个或第4个)问题是为什么上面的代码在编译Android时不起作用,以及在代码中将图像分配给TImageObjectAppearance的正确方法是什么?
由于 -Barry
答案 0 :(得分:0)
这是一个错误
&#34;&#34;不能将TAppearanceObjectItem分配给TAppearanceObjectItem&#34;已在我们的质量门户网站中记录为错误:&#34;
https://community.embarcadero.com/forum/ui/1953-fmx-tlistview-switching-between-windows-android