【问题标题】:Preserve or save default values explicitly in RAD Studio IDE在 RAD Studio IDE 中显式保留或保存默认值
【发布时间】:2016-10-01 15:08:52
【问题描述】:

我正在按照示例在 Android 应用中加载自定义字体(Segoe UI):

True Type Font Iconography for Android and iOS Apps

我的问题是 IDE(RAD Studio 10.1 Berlin)没有将默认值保存到 FMX 文件(表单文件)。在设计时,默认字体似乎已经是“Segoe UI”,因此 IDE 在 Object Inspector 中仅显示 (Default),因此不会将该值存储到 FMX 表单文件中。 但是,Android中的默认字体是“Roboto”,而不是“Segoe UI”,而且应用确实在运行时使用“Roboto”作为默认字体。

因此,对象检查器中的默认值不会针对不同的目标平台保留。这很烦人!

这是 IDE 中的(逻辑)错误吗?如何禁用此 IDE 功能,或在 设计时 显式设置一个值(这也是 Windows 下 IDE 设计时的默认值)并为目标平台保留它(在此安卓)?

我尝试进入 FMX 表单文件的文本模式并手动设置值,但是当切换回设计模式时,IDE 将 Object Inspector 中的值再次更改回 (Default),然后返回再次文本模式,该行已被删除。我想/需要在设计时设置它,而不是运行时,但我做不到。

我还需要其他属性的默认值,而不仅仅是字体。

【问题讨论】:

  • 我不希望它,我将它用作自定义字体,就像我在第二句话中写的那样。
  • 如果你告诉我如何在运行时使用 FMX 加载自定义字体,我会非常高兴。我发现在设计时这样做很有用的原因是,我可以在为我的设备编译之前立即查看和测试它。
  • 是的,我问的是在对象检查器中设置属性。其中之一是font family。我知道如何在带有 FMX 的 Android 上使用自定义字体,并且我将 font family 属性明确设置为 Segoe UI。但是当我这样做时,IDE 会丢弃我的值,而是将其设置为 (Default)(它只是删除了我的显式设置)。但是Android的标准字体是Roboto,所以多亏了这个愚蠢的IDE,我无法在设计时为Android设置字体Segoe UI。看来我只能在运行时设置它 - 我不知道如何使用上面链接的教程在运行时设置它。
  • 我觉得你真的不明白我在写什么。我没有使用 VLC 或 Windows。我把我的陈述说得很清楚。如果您不知道我所描述的 IDE 的行为,请再次阅读并重现我所写的内容。
  • 如果有人反对我的问题,那么请写评论让我知道我做错了什么以及如何改进(因为我想要并且会改进)。否则,请不要投反对票 - 特别是如果您这样做是因为您出于任何原因不喜欢我的问题。我尽量做到具体。如果有人需要我提供更多信息,请询问。

标签: delphi firemonkey


【解决方案1】:

这是设计使然。属性的默认值不会保存在 DFM/FMX 文件中除非该属性通过property declaration 本身的nodefaultstored=true 指令明确请求它。保存默认值而不被要求会使 DFM/FMX 资源膨胀。

除非您派生新组件来覆盖其属性声明,否则您无法覆盖此行为。

您不能在设计时为每个平台指定不同的默认值。只有一个属性,并且只有一个默认值。如果您在运行时需要不同的每个平台值,则必须:

  1. 为每个平台创建单独的视图,并在每个视图中分配不同的属性值。

  2. 在运行时在代码中设置属性值,例如在表单的OnCreate 事件中。

【讨论】:

  • 所以再次为我澄清一下:这确实意味着在Android设计时无法在Android上设置字体Segoe UI
  • 那么RAD Studio的设计显然是坏了。不需要保存默认值,是的。但是 IDE 可以向对象检查器添加一个选项,以将值重置为默认值。这将是一个适当的行为。目前,IDE 禁止这样做,这不符合 RAD 概念。设计时编辑器是主要功能之一。我无法导出数百个组件。 #1:不能解决问题,因为它是 IDE 破坏的设计。与默认值相同的行为。 #2:不适用于链接的教程,除非你可以告诉我如何在运行时加载字体。
  • @StanE:如果您认为 RAD Studio 的设计有问题,请告诉 Embarcadero。在这里抱怨是不合适的,绝对不会改变任何事情。因为您不同意设计并不会使 Remy 的答案不正确。他已经回答了你提出的问题;您是否喜欢答案中提出的事实是无关紧要的。
  • @KenWhite 我在寻求解决方案,而不是抱怨。我不认为它坏了——它坏了。我也赞成雷米的回答,所以我不明白你为什么暗示我虽然他的回答不正确。我在哪里写的?如果这就是你们在这里用-2 否决我的问题的原因,那么您显然不明白投票系统在stackoverflow 上是如何工作的。投票是针对内容进行的,而不是因为您喜欢或不喜欢它。孩子们......再次:我的问题有 2 票反对。有人可以解释一下我最初的问题有什么问题吗?
  • 如果 TFont.FamilyName 属性的设计时值与 TPlatform.GetDefaultFontFamilyName 匹配,则不会将其保存在 DFM/FMX 文件中。每个平台都有不同的TPlatform 实现,其中Segoe UI 是仅在Windows Vista 及更高版本上的默认设置。您可能希望添加到项目中的每个目标平台在设计时都使用不同的TPlatform 实现,但情况可能并非如此,因为 IDE 本身仅在 Windows 上运行。要在非 Windows 平台上使用 Segoe UI,请在 XP 上编译项目(默认为 Tahoma),或者在运行时在代码中设置字体。
【解决方案2】:

您的问题的第三种解决方案可能是使用样式来定义组件的默认字体。这样字体不是由 DFM 定义的,而是由样式本身定义的。

如果您在开始使用样式之前没有使用过样式,可能会有些困难。但是一旦你掌握了它,你就会看到样式可以提供的巨大优势,尤其是在具有大量表单的项目中,因为你只需要更改样式,并且更改会影响使用该特定样式的每个组件。

说到样式,您确定您还没有使用它们,并且样式可能会覆盖您的字体设置,这可能解释了为什么其他人的建议不起作用?

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多