问题标签 [livebindings]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Delphi LiveBindings:将组件属性绑定到 TEdit
想在 Delphi XE5 中使用 LiveBindings。我是新来的。
我有一个带有 TEdit 的 VCL TForm。
我在一个单独的单元中有一个组件:
现在我想将 MyProperty 绑定到 TEdit。
我通过右键单击 TEdit 并选择“视觉绑定”以及使用 LiveBindings 向导来尝试此操作。问题是 MyComponent 没有列在组件列表中。
包含 MyComponent 的单元在表单的 uses 子句中。
我究竟做错了什么?
谢谢!
delphi - 如何在 Delphi Live Bindings 中为绑定表达式添加范围?
我知道如何在表单上使用实时绑定来使用表达式将一个属性绑定到另一个属性。例如,将 TLabel 的 Caption 绑定到 TEdit 的 text 属性。
我知道如何使用 IScope、TNestedScope、TDictionaryScope 等创建新表达式。我可以添加自己的类并将它们称为脚本表达式。
我不知道的是,当我在做第一段中描述的事情时,如何获取我的新表达式范围并将其提供给我的 TBindingList 中的 TBindExpressions 以在表单上使用。
有人知道怎么做吗?我进行了调查,但找不到将 IScope 引用添加到 TBindingList 及其子组件可用的绑定表达式的方法。
delphi - 带有 LiveBindings 的自定义网格 - EBindCompError '没有可用的列表控件编辑器'
我正在设计我自己的 Delphi XE5 自定义网格。我对 VCL 不感兴趣,所以我只使用 FireMonkey。因为它必须是数据感知的,所以 LiveBindings 是必须的。任务很复杂,所以我会尝试只针对非常具体的问题提出问题。
一个前言。我发现 FireMonkey(就像旧的 VCL)有点难以扩展。它确实广泛使用接口,但仍有很多代码不可覆盖或引用私有成员。我发现自己不得不复制整个课程来改变 5-10 行行为。
我现在拥有的是(ME.Grid):
所有注册到 RegisterFmxClasses。TMEGrid 也注册了 RegisterComponents。
我也有(ME.Bind.Grid):
...后者在 RegisterLinkGridToDataSourceColumnFactory 中注册
所有这一切都以最小的实现。之后我将添加/更改行为。我现在的目标是在表单上放置一个 TMEGrid,放置一些数据集并让绑定对我的网格做一些事情。
我得到的(当应用程序启动时)是 EBindCompError '没有可用的列表控件编辑器'。
由于这在我从 TGrid 派生 TMEGrid 时起作用(由于其他原因,这是不可接受的),所以我检查了一下,发现 Bind.Editors 明确引用了 TGrid(而不是 TCustomGrid)。所以我写了我自己的(ME.Bind.Editors):
...后者在 RegisterBindEditorFactory 注册
但这似乎并没有改变什么。我仍然收到相同的错误消息。
有任何想法吗?
请记住,所有组件、工厂等......都在它们自己的包(MEComps)中。该项目只有一个带有网格和其他一些东西(导航器,一些按钮)的表单。
编辑:我想我找到了线索。我从测试项目中检查了我的源代码,我发现
代码行没有编译到项目中(我不能在那里设置断点)。显然它没有被拉入项目,这当然不是一个好兆头。所以我检查了使用对应单元的位置(FMX.Bind.Editors),我发现这个非常有趣的 BindCompFMXReg 单元,我没有对应的. 我会研究这个,看看我能不能到达某个地方。
delphi - 如何从代码中获取 ComboBox 的 SelectedValue?
我正在尝试构建类似TLookupComboBox
使用 LiveBindings 的东西。
我TComboBox
在 VCL 表单上放置了一个法线。我还有一个数据集,其中一些行包含两个字段id
和text
.
然后我使用 LiveBindings 编辑器创建一个TBindSourceDB
和一个TBindingsList
.
其中只有一个绑定:
如您所见,我对FillValueFieldName
和有不同的字段FillDisplayFieldName
。
LiveBindings 设计器如下所示:
ComboBox 填充了 field 中的值text
,所以我认为我设置正确。
我怎样才能得到SelectedValue
来自代码?
我可以直观地将值绑定到 aTLabel
然后我可以读取TLabel.Caption
,但肯定有更简单的方法吗?
PS:我不想将值存储在数据库中,否则我只会使用TDBLookupComboBox
.
编辑:我尝试使用 a TPrototypeBindSource
,但是没有明显的方法可以从代码中访问字段。我也尝试过将第二个TBindSourceDB
与 which 一起使用TClientDataSet
,但这感觉就像用大锤敲击坚果。
delphi - 如何创建包含通过 LiveBinding 连接到 FireMonkey 中的数据集的字段的面板列表?
德尔福 XE5 更新 2
我正在寻找具有相同布局(相同控件)的“面板”列表,并且每个面板都是为存在的 DataSet 的每条记录创建的。
我需要最好使用 LiveBindings。但如果那是不可能的,我想知道如何做面板列表的事情。
您可以在此图片下方的联系人列表中看到一个示例(标记为红色)
我记得在 Delphi 6 VCL 中我们有一个组件能够做到这一点,我们只需要在第一个面板上添加所需的 DBEdit 和其他 DB 控件,它就会相应地为表的每个记录创建一个面板。
delphi - 如何 LiveBind 具有自定义样式的 Firemonkey TListbox?
遵循“RAD Studio\12.0\Samples\FireMonkey\CustomListBox”中的 EMB 示例“自定义列表”
它通过代码演示了如何在 ListBox 上自定义项目。
通过代码在 TListBox 上插入一项:
我想专门使用 LiveBinding 来做同样的事情。
我可以成功展示样式并绑定一些项目:
还有一些 LiveBindings(使用原型):
这是来自 delphi 示例的自定义样式的一部分:
我的问题:
- 如何访问其他 3 个已定义的项目以填充数据?
- 如何从 Button 和 CheckBox 获取事件(都转到相同的事件处理程序)
- 我怎样才能使它在一个框架中工作?设计时没有可用的样书组件
奖金问题:)
是否可以使用专门针对这种需求的样书进行上述所有工作?(一个包含所有且仅包含 TListBoxItems Sytles 的样书?),所以不要弄乱表单定义的样书。
delphi - LiveBinding 值不能通过代码设置
有一个 TToolbar,它的值绑定到 TText.Text。
如果我更改 TToolbar 值,则 TText.Text 也会更改。到目前为止一切正常。
如果我手动设置 TToolbar 值,则 Binding 不会影响: TToolbar 值会更改,但 Text 不会。
有没有办法通过代码触发 LiveBinding?
当然,我可以手动设置 TToolbar.Value 和 TLabel.Text,如下面的代码中所述,但这意味着
- 由于设置 Label1.Text 的冗余代码容易失败
- 在更复杂的 LiveBinding 情况下不太舒服
示例 Delphi FMX 代码:
根据 Unit1.FMX:
delphi - 如何制作从 TBlob 到 TBitmap 的 LiveBinding 转换器
我的软件主要基于 Firemonkey TListView,它是根据 Delphi Samples 项目中的“SampleListViewMultiDetailAppearanceProject”定制的。
"C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\Object Pascal\Mobile Samples\User Interface\ListView\"
这是它的样子,使用 PrototypeBindSource:
每条记录显示 1 个图像和 4 个文本项。
我使用 TMS Aurelius 作为数据集,它连接到 BindSource。它是使用所有标准字段类型的 TDataset 后代。
它实现了内部的 TBlobField:
在 DataSet 上,这个字段被定义为“像”一个计算字段,因为它是一个基于实体的框架 (ORM),每条记录代表一个对象,但最后是相同的东西,检索到的数据是一个带有原始数据的字段。
我的意图是根据记录的某些状态设置从项目资源(项目->资源和图像)加载的不同图像。存储的图像是一个小的 PNG 图像 (48x48)。
要读取从资源中存储的 PNG 图像,我使用的是:
当实时绑定系统检索到 TBlobField 时,调用的函数是这样的:
FImage 是一个带有一些辅助功能的 TBlob 类型,但就像我说的那样,它是一个 TArray 并且没有任何类型的处理,只是一个容器。
所以,FImage 是直接转到 FMX TListView 的 TBitmap。
没有任何反应,没有图像显示。
我尝试了以下代码:
从与图像无关的其他类型的转换中获得此代码。但它显然是错误的,除了它编译的事实。
这段代码中的问题: - 它似乎被注册了,我放置了一个断点,并且 RegisterConversion 确实被执行了,但是在匿名过程中,里面的断点永远不会被执行。在创建任何包含 TLisviews 的框架之前,我在初始化部分注册了它。- 在匿名程序中,转换本身纯属虚构;因为我相信 Blob 存储为 png 并且输出应该是 fmx 位图。我不知道在那里写什么。
关于这个主题的文档很少,对我的理解没有帮助。
我想知道如何在这个过程中正确地制作序列:
- 我需要从 png 转换为位图吗?如何?
- 我需要注册转换适配器吗?如何?为什么不被解雇?
- 此转换适配器内的正确转换代码是什么?
或者
我看到 TDataset 上有一个 ftGraphic TField,我可以创建该类型的字段。但是有这样的问题: - 这种类型的预期 TField 返回是什么?- 我的代码在平台之间共享:VCL 和 FMX,以及 TBitMap 或 TGraphic 在两者上都不相同。这种共享是由一个没有作用域的 bpl 包进行的。这是必需的,因为我注册了其他 bpls 的冲突。我有一个共享的通用 bpl 和其他使用它的平台特定 bpl。
由于我还没有找到解决平台单元的这种 bpl 共享和不兼容的方法,我切换到第一个选项,尝试在数据库级别处理原始数据,并让转换发生在 livebinding 级别,已经在每个平台的域中
我完全不了解与图像相关的操作,特别是在转换和正确的对象创建方面,以避免内存泄漏。
重要提示:它也必须是跨平台的,因为 fmx 应用程序是在 android 上使用的。
delphi - XE6 IDE 中缺少 TBindScope
TBindScope 组件存在于 XE4 和 XE5 IDE 中,但在我的 XE6 工具面板中缺失。
该组件是否已弃用?
android - Delphi XE6 mobile:绑定TObject属性时如何获取分配给TListviewItem的TObject
我有以下内容:
我使用带有 TAdapterBindSource 和 TDataGeneratorAdapter 的 TMyList 将 TMyList 绑定到 TListview。好的,项目已正确显示。
当我在 TListview 的项目中单击时,在 OnItemClick 中,我需要知道 TListViewItem 分配了哪个 TMyObject 实例。
使用 TListViewItem.Index 不起作用,因为我的列表视图有标题项,然后索引值不对应。
单击列表视图项时,我需要获取 TMyObject 的属性值。
谢谢。