2

我有一个继承自TGrid被调用的自定义网格控件TFmGrid。此控件在 Rad Studio 10 Seattle Update One 中运行良好。TFmGrid我最近升级到 10.1 Berlin 并开始注意到在我运行应用程序和设计器时在我的控件上显示此错误消息:

尚未为类 TFmGrid 注册 TStyledPresentationProxy 的后代。也许有必要将 FMX.Grid.Style 模块添加到使用部分

下图显示了错误消息如何显示在我的网格控件上:

在此处输入图像描述

我首先按照消息的建议进行操作,然后添加#include <FMX.Grid.Style.hpp>到我的TFmGrid控件的头文件中,但这似乎什么也没做。

因此,就尝试注册后裔而言,TStyledPresentationProxy我不确定从哪里开始。我找到了有关以下方法的文档

尝试使用指定名称或控件类和控件类型的指定组合注册表示代理类。

所以我假设我需要使用这个方法或至少类似的东西,但我不明白我应该如何调用这个方法。

但随之而来的问题是我在哪里调用这段代码?

我的自定义控件在其命名空间中有一个名为的方法Register(),我相信它是在创建控件时由 IDE 自动生成的:

namespace Fmgridu
{
    void __fastcall PACKAGE Register()
    {
        TComponentClass classes[1] = {__classid(TFmGrid)};
        RegisterComponents(L"Kalos FM Controls", classes, 0);
    }
}  

我需要在那里打电话登记一个后裔TStyledPresentationProxy吗?解决这个问题的正确方法是什么?

4

2 回答 2

4

只需覆盖TfmGrid中的虚拟方法DefinePresentationName并返回网格的表示名称名称:

function TfmGrid.DefinePresentationName: string;
begin
  Result := 'Grid-' + GetPresentationSuffix;
end;

Fm 通过字符串名称注册演示文稿并为其使用类名,因此如果您创建新组件(基于已存在)您会自动更改类名,因此系统无法为您找到演示文稿。有两种解决方案:

  1. 说你将使用来自 TGrid (DefinePresentationName) 的演示文稿
  2. 为您的班级注册现有的演示文稿(查看 FMX.Grid.Style.pas 的初始化部分)

PS 一年前,我在FireMonkey 控件开发的通用 eNew 方法“控制 - 模型 - 演示”中写了一篇关于它的文章。Part 1希望对你有帮助

于 2016-05-20T12:49:08.573 回答
0

很简单:只需将“样书”组件放入您的表单

于 2020-09-14T11:38:27.960 回答