Delphi 移动FireMonkey中的自定义样式

Delphi 移动FireMonkey中的自定义样式,delphi,styles,firemonkey,Delphi,Styles,Firemonkey,使用:Appmethod 1.14 我需要设计一个自定义样式的应用程序。将TStyleBook放置在表单上并双击它将打开样式设计器,但它是空的,因此我需要加载Appmethod/RAD Studio附带的*.fsf或*.Style文件之一。我想基于标准的Android和iOS设计(如果没有应用自定义样式,则IDE中使用的设计),但是在哪里可以找到样式文件?我的问题是:有一个“AndroidLight.fsf”文件,它看起来与IDE中的默认(硬编码?)Android设计完全一样。我可以修改它,它在

使用:Appmethod 1.14

我需要设计一个自定义样式的应用程序。将TStyleBook放置在表单上并双击它将打开样式设计器,但它是空的,因此我需要加载Appmethod/RAD Studio附带的*.fsf或*.Style文件之一。我想基于标准的Android和iOS设计(如果没有应用自定义样式,则IDE中使用的设计),但是在哪里可以找到样式文件?我的问题是:有一个“AndroidLight.fsf”文件,它看起来与IDE中的默认(硬编码?)Android设计完全一样。我可以修改它,它在Android中工作。这很好。但我不能在iOS上使用相同的样式(我需要在Android和iOS上使用一种样式),因为应用程序只是冻结(如果我使用TStyleBook)或向我显示无法从资源加载样式的错误(如果我将其添加为资源并从资源加载):

过程TUserDataForm.FormCreate(发送方:TObject);
变量
样式:TFMXObject;
开始
MainScroll:=VertScrollBox1;
{$IFDEF Android}
//工作
样式:=TStyleManager.LoadFromResource(HInstance,'DSRAndroidIOS',RT_RCDATA);
{$ENDIF}
{$IFDEF iOS}
//无法加载相同样式的文件
样式:=TStyleManager.LoadFromResource(HInstance,'DSRAndroidIOS',RT_RCDATA);
{$ENDIF}
如果样式为零,则
TStyleManager.SetStyle(风格);
结束;
我找不到Appmethod/RAD Studio附带的任何其他*.style或*.fsf文件,它看起来像IDE中的标准iOS 7设计。我可以尝试在设计的样式中添加我自己的样式部分,但是我如何知道使用哪些名称以及样式HIRACHY是如何构造的呢?在某些地方有概述吗

我在文件夹“C:\Program files(x86)\Embarcadero\Studio\14.0\bin\ios\”中找到了6个没有文件扩展名的文件。它们似乎是二进制样式的文件(用十六进制编辑器打开),但我无法在样式设计器中加载它们,错误:“读取TSubImage.SourceRect.LeftI时出错:属性SourceRect.LeftI不存在”(或类似-从德语翻译)


编辑:好的,我现在有样式了。我自己从一个以iOS为目标平台的已编译移动FireMonkey项目中提取了它们。为此使用了十六进制编辑器。但是我想知道这些样式是否存储在其他地方,也许?

您可以通过与Delphi捆绑的位图样式设计器获得原始样式。您可以在IDE的“工具”菜单上找到该链接


打开后,单击文件打开图标旁边的下拉列表。您将看到列出的可用样式。单击其中一个打开,然后选择文件|另存为并选择另存为类型:FireMonkey样式。

似乎就是这样。不幸的是。。。位图样式设计器在Windows 7中因应用程序崩溃而崩溃,报告“SHFolder.dll”导致该问题。典型的英巴卡德罗品质。。。因此,所有打开默认打开/保存对话框的操作都会导致工具崩溃。也导出图像(我需要的),因此无法获取样式。但是,至少,我现在知道在哪里可以买到它们。非常感谢。错误和不稳定性的数量令人难以置信。。。以防其他人与位图样式设计器(尤其是打开/保存对话框)发生永久性崩溃:在桌面上创建一个文件夹(或直接在根驱动器(例如C:\)上),然后将
BitmapStyleDesigner.exe
从“bin”目录复制到该文件夹中。看来,该工具与SHFolder.dll有一些问题,可能与路径有关。。。
procedure TUserDataForm.FormCreate(Sender: TObject);
var
  Style: TFMXObject;
begin
  MainScroll := VertScrollBox1;

  {$IFDEF Android}
    // works
    Style := TStyleManager.LoadFromResource(HInstance, 'DSRAndroidIOS', RT_RCDATA);
  {$ENDIF}
  {$IFDEF iOS}
    // Can't load same style file
    Style := TStyleManager.LoadFromResource(HInstance, 'DSRAndroidIOS', RT_RCDATA);
  {$ENDIF}
  if Style <> nil then
    TStyleManager.SetStyle(Style);
end;