- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设计自己的 Delphi XE5 自定义网格。我对 VCL 不感兴趣,所以我只使用 FireMonkey。由于它必须具有数据感知能力,因此 LiveBindings 是必须的。这项任务很复杂,所以我会尝试只询问非常具体的问题。
前言。我发现 FireMonkey(就像旧的 VCL 一样)有点难以扩展。它确实广泛使用接口(interface),但仍然有很多代码不可重写或引用私有(private)成员。我发现自己必须复制整个类才能更改 5-10 行行为。
我现在拥有的是(ME.Grid):
TCustomGrid -> TMECustomGrid -> TMEGrid (my custom grid)
TColumn -> TMEColumn -> TMExxxColumn (specific custom column classes)
Txxx -> TMExxxCell (specific custom grid cell classes)
全部通过RegisterFmxClasses注册。 TMEGrid 也已向 RegisterComponents 注册。
我还有(ME.Bind.Grid):
TMELinkGridColumnDescription = Class(TLinkGridColumnDescription)
TMELinkGridToDataSourceControlManager = Class(TInterfacedObject,
ILinkGridToDataSourceControlManager)
TMELinkGridToDataSourceColumnFactory = Class(TLinkGridToDataSourceColumnFactory)
...后者已向 RegisterLinkGridToDataSourceColumnFactory 注册
所有这一切都只需最少的实现。之后我将添加/更改行为。我现在的目标是在表单上放置一个 TMEGrid,放置一些数据集并让绑定(bind)对我的网格执行某些操作。
我得到的(当应用程序启动时)是 EBindCompError '没有可用的列表控件编辑器'。
由于当我从 TGrid 派生 TMEGrid 时这有效(由于其他原因这是 Not Acceptable ),所以我检查了一下,发现 Bind.Editors 显式引用了 TGrid(而不是 TCustomGrid)。所以我写了自己的(ME.Bind.Editors):
TMEBindListGridEditor = Class(TBindListEditorCommon,
IBindListVirtualEditor,
IBindGridEditor,
IBindListVirtualEditorScope)
TMEBindGridEditorFactory = Class(TBindEditorFactory)
...后者已向 RegisterBindEditorFactory 注册
但这似乎并没有改变任何事情。我仍然收到相同的错误消息。
有什么想法吗?
请记住,所有组件、工厂等......都在它们自己的包(MEComps)中。该项目只有一个带有网格和其他一些东西(导航器,一些按钮)的表单。
编辑:我想我找到了线索。我从测试项目中检查了我的源代码,发现
RegisterBindEditorFactory([TMEBindGridEditorFactory]);
代码行未编译到项目中(我不能在那里放置断点)。显然它没有被纳入该项目,这当然不是一个好兆头。因此,我检查了使用对应单元(FMX.Bind.Editors)的位置,我发现了这个非常有趣的 BindCompFMXReg 单元,但我没有等效的单元。我会研究这个,看看是否能有所进展。
最佳答案
首先我很抱歉,我是巴西人,我不会说英语,所以我使用了谷歌翻译:)-,但我想帮助你......
我也遇到了同样的问题,我创建了一个动态构造查询和列的网格,但是为了激活这个网格,生成了错误 EBindCompError。
发生这种情况的原因是 LiveBindigs 结构需要一个与设计时使用的类型相同的编辑器。
我查看了 Delphi 代码,找到了一个适合我的案例的简单解决方案,该解决方案也适合您的案例。
我导入了库 Fmx.Bind.Editors 并声明了一个 TBindListGridEditor 类型的变量,并在我的 Grid 的 Create 方法中创建了该变量,如下例:
MyUnit unit;
interface
uses
Fmx.Bind.Editors ...
type
TMyGrid = class (TGrid)
private
FBindingEditor: TBindListGridEditor;
public
constructor Create (AOwner: TComponent); override;
end;
Implementation
constructor TFBGrid.Create (AOwner: TComponent);
begin
inherited Create (AOwner);
FBindingEditor: = TBindListGridEditor.Create (Self);
end;
end.
我已经帮你了。
关于delphi - 带有 LiveBindings 的自定义网格 - EBindCompError 'No list control editor available',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23246951/
我不明白 LiveBinding 的目的。我想知道LiveBinding在哪些情况下最有值(value)。 Embarcadero 的手册对此进行了描述:“LiveBindings 是 RAD Stu
在 Delphi XE2 LiveBindings 中,我需要将任何类型的 VCL 控件绑定(bind)到任意(非组件)对象上的任何类型的属性。我可以单向地做到这一点。但我需要双向进行。 假设我想将
我正在开发我的第一个适用于 Windows 和 MacOSX 的多平台应用程序。我决定使用 SQLite 和 StringGrid 来检查连接性。通过查看 Delphi 10.0 附带的 SQLite
我刚刚发现了 Delphi 的实时绑定(bind)。并创建了我的第一个组件来处理变频器的控制字。该组件本身似乎在表单设计器中测试它效果很好。但是,编译和运行应用程序不起作用。来自 livbinding
我一直在尝试找到一种通用方法来通知 UI 控件列表中的更改。例如,当一个对象添加到列表中时,我希望它自动添加到列表框中。如果从列表中删除一个对象,我希望它自动从列表框中删除。 不幸的是,Delphi
是否可以在控件之间进行 LiveBinding,即获取 2 个编辑框并将其内容添加到一个标签中。我确信是这样,我只是不知道从哪里开始 谢谢 最佳答案 查看示例。 SVN 存储库 URL:https:/
我有一个包含两个组合框的表单,两个组合框都包含相同的项目列表,并且需要彼此保持完美同步。 (它们代表 TPageControl 的两个不同选项卡上的相同选项列表。) 为了实现此目的,我设置了一个 Li
我的目标是拥有一个包含多个列的 TGrid,通过 LiveBindings 连接到 TClientDataSet。其中一列的类型为 TProgressColumn。 网格显示数据,但进度栏列不显示任何
我正在尝试使用 LiveBindings 来格式化数字,以便在 FireMonkey 表单上的 TEdit 中显示。 我正在尝试使用绑定(bind)的 CustomFormat 中的 Format 方
这是事实还是它使用了一些仅在 XE2 中可用的编译器技术? 我只想将 TEdit.Text 属性绑定(bind)(双向)到在代码中返回字符串的对象函数(我不需要设计器组件或表达式求值器).. 谢谢!
我有一个 TDataSource,它由绑定(bind)到 TStringGrid 的 TClientDataset 支持。我通过右键单击网格,选择“链接到数据库数据源...”,然后选择数据源来完成此操
我有以下示例代码集,如何使用 LiveBindings 将 Data 列表元素绑定(bind)到 TStringGrid。我需要双向更新,以便当网格中的列发生更改时,它可以更新底层 TPerson。
我的软件很大程度上基于 Firemonkey TListView,它是根据 Delphi Samples 项目中的“SampleListViewMultiDetailAppearanceProject
我想指定 LinkControlToDate.CustomFormat := 'IfThen(%s=0, '''', FormatDateTime(''ddddd'', %s))' 用于 TLinkC
我正在使用带有 SP1 的 Delphi XE3。我创建了一个 FireMonkey 桌面应用程序,并在主窗体上放置了 TSpinBox 和 TTrackBar。我现在已经使用 Visual Live
我有一个 TTrackBar 和一个 TMediaPlayer,我正在寻找一种使用 LiveBindigs 功能根据 TMediaPlayer 位置更改 TTrackBar 位置的方法。 问题是,TM
我正在设计自己的 Delphi XE5 自定义网格。我对 VCL 不感兴趣,所以我只使用 FireMonkey。由于它必须具有数据感知能力,因此 LiveBindings 是必须的。这项任务很复杂,所
我是一名优秀的程序员,十分优秀!