- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将 Synedit 双向绑定(bind)到数据库中的“文本”列。它适用于备忘录组件,但对于 Synedit 或 Richedit 仅创建单向绑定(bind)。值是从数据库同步的,但我不知道如何从 Synedit 更新回数据库。
我尝试在 Livebound 设计器中简单连接字段,如图所示,但我陷入了文档中。
当我离开编辑器时,我需要自动同步数据库字段,就像它与 Memo 组件一起使用一样。
最佳答案
TSynMemo 的行为与 TMemo 不同的原因是它“开箱即用”,不支持 LiveBindings 观察者
LB 工作所必需的。克服这个问题的方法是派生一个 TSynMemo确实支持 LB 观察者并使用它的后代。
幸运的是,有一个Embarcadero wiki entry它解释了如何将 LB 观察器添加到缺少它们的组件中。在此基础上,经过一些准备工作,示例代码应该执行您想要的操作:
在新表单上,放置 TClientDataSet、TDataSource、TDBGrid 和 TDNavigator,并以通常的方式将它们链接起来。使用 TClientDataSet 是为了允许一个完全独立的示例项目。 注意如果您想使用FireDAC。您同样可以使用 TFDMemTable 代替 TClientDataSet;下面的步骤和代码是相同的,并且我已经测试过这个 FD 替代方案是否有效。
在 TClientDataSet 上设置 ID、Name(String(20))和 Memo 字段,如代码所示
添加通过 TDataSource 连接到备注字段的 TBSynEdit。这样做的目的是为了表明我们接下来要添加的实时绑定(bind) TSynMemo 以相同的方式执行
将 TSynMemo、TMemo、TBindingList、TBindSourceDB 和 TBindNavigator 添加到表单
使用快速绑定(bind)弹出窗口添加 TLinkControlToFields 以链接 TSynEdit 和 TMemo到 ClientDataSet 的 Memo 字段
在可视化 LB 设计器中将 BindSourceDB 的 *
属性连接到 TBindNavigator 的 *
属性。
现在,将以下代码添加到表单中。无需注册我们的 TSynMemo后代作为组件并将其安装在IDE中,代码声明它在表单单元中作为 Interposer 类
。它实现了所有观察者方法这似乎是实时绑定(bind) TSynMemo 所必需的。
代码
type
TSynMemo = class(SynMemo.TSynMemo)
private
procedure ObserverToggle(const AObserver: IObserver; const Value: Boolean);
protected
procedure DoChange; override;
function CanObserve(const ID: Integer): Boolean; override; { declaration is in System.Classes }
procedure ObserverAdded(const ID: Integer; const Observer: IObserver); override; { declaration is in System.Classes }
end;
TForm2 = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
SynMemo1: TSynMemo;
ClientDataSet1ID: TIntegerField;
ClientDataSet1Name: TStringField;
ClientDataSet1Memo: TMemoField;
BindingsList1: TBindingsList;
BindNavigator1: TBindNavigator;
Memo1: TMemo;
BindSourceDB1: TBindSourceDB;
LinkControlToField1: TLinkControlToField;
LinkControlToField2: TLinkControlToField;
DBSynEdit1: TDBSynEdit;
procedure FormCreate(Sender: TObject);
public
end;
[...]implementation[...]
function TSynMemo.CanObserve(const ID: Integer): Boolean;
{ Controls which implement observers always override TComponent.CanObserve(const ID: Integer). }
{ This method identifies the type of observers supported by TObservableTrackbar. }
begin
case ID of
TObserverMapping.EditLinkID, { EditLinkID is the observer that is used for control-to-field links }
TObserverMapping.ControlValueID:
Result := True;
else
Result := False;
end;
end;
procedure TSynMemo.DoChange;
begin
inherited;
TLinkObservers.ControlChanged(Self);
end;
procedure TSynMemo.ObserverAdded(const ID: Integer; const Observer: IObserver);
begin
if ID = TObserverMapping.EditLinkID then
Observer.OnObserverToggle := ObserverToggle;
end;
procedure TSynMemo.ObserverToggle(const AObserver: IObserver; const Value: Boolean);
var
LEditLinkObserver: IEditLinkObserver;
begin
EXIT; // do nothing
end;
const
sDfm = 'DFM';
procedure TForm2.FormCreate(Sender: TObject);
begin
ClientDataSet1.IndexFieldNames := 'ID';
ClientDataSet1.CreateDataSet;
ClientDataSet1.InsertRecord([1, 'Row1', 'Memo1']);
ClientDataSet1.InsertRecord([2, 'Row2', 'Memo two']);
end;
initialization
Data.Bind.Components.RegisterObservableMember(TArray<TClass>.Create(
TSynMemo
),
'Lines.Text', sDfm);
finalization
Data.Bind.Components.UnregisterObservableMember(TArray<TClass>.Create(TSynMemo));
end.
关于Delphi Synedit 双向绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57535630/
我在Delphi上相对较新,但是在安装SynEdit组件后,还不能创建自己的荧光笔。我已经用我的突出显示配置生成了.pas。我尝试了所有我知道的方法。但是我不能使用生成的文件来突出显示。谁能帮我? 我
我正在寻找一些论坛/邮件列表,在哪里可以找到活跃的 SynEdit 用户社区? SourceForge 上的官方论坛看起来已经死了... 最佳答案 尝试Unicode SynEdit ,这是 SynE
使用:Delphi XE2,Windows VCL 表单应用程序,32 位 我正在使用 SynEdit 控件来显示文本。我已经在使用 TSynHTMLSyn 语法荧光笔和控件来正确突出显示 HTML
我在表单上有一个 TSynEdit 控件,我想从 TVirtualStringTree 中拖放焦点节点文本。我希望它的行为方式与您在 TSynEdit 控件中拖放突出显示的文本时的行为方式相同: 当您
我正在使用 Delphi 中的 TSynEdit 开发 Sql 编辑器。我在荧光笔和自动完成的表名中有我的对象名称(表、存储过程、域等),它们以蓝色显示并带有下划线,这就是我想要的,但我想知道是否可以
我最近下载了 SynEdit,我想知道如何启用行编号(就像在 Lazarus 中一样)? 我在互联网上没有找到任何东西。 提前致谢。 最佳答案 基于code found here尝试使用: SynEd
我已经有一段时间没有使用 synEdit 了,但是今天我发现我需要一个好的编辑器来支持脚本的表单。当我去下载 synEdit(我的思绪已经卡住为“确定的事情”)时,我发现原作者已经放弃了它。我知道 F
是否有与 firemonkey 一起使用的 synedit 软件包(或有人正在开发它)? 据我所知,之前有一个 VGScene 端口(请参阅: this site ),但它似乎已被删除。 另请参阅th
我需要将 Synedit 双向绑定(bind)到数据库中的“文本”列。它适用于备忘录组件,但对于 Synedit 或 Richedit 仅创建单向绑定(bind)。值是从数据库同步的,但我不知道如何从
我有 20 个不同的单词。如何在 SynEdit 中以不同颜色突出显示包含这些单词的行?如果无法突出显示行,则只需突出显示单词即可。 非常感谢!!!! 最佳答案 要突出显示一行,您必须使用 OnSpe
我正在使用Unicode SynEdit,(理论上)它具有基本的文件/流编码检测功能。在我尝试打开由我的PHP脚本生成的文件之前,它运行良好。我正在谈论的文件被UniSynEdit检测为utf8,没有
我正在使用 RemObjects(优秀)中的 PascalScript 和 SynEdit 编辑器创建内置脚本引擎。使用 PascalScript 附带的 IDE 示例和 SynEdit 中的 IDE
我正在考虑为 Delphi SynEdit 项目做出贡献,为 Health Level 7 (HL7) v2 消息传递标准提供语法荧光笔。我没有从头开始创建荧光笔的经验,并且我偶然发现了两个与现有荧光
我决定齐心协力,取得优秀DWScript (Delph Web Script DWS)使用 SynEdit 集成到简单的 IDE 中。 DWScript 目前正在agressively develop
我正在尝试将 SynEdit 安装到新升级的 Delphi 10.1 Berlin Starter Update 1 中,但它不起作用。其他人似乎也遇到这个问题,但我不知道如何解决。 https://
我是一名优秀的程序员,十分优秀!