チュートリアルを参考作ってみた。
次に、時計を表示するソース。比較のためにポーリング処理で上記のソースのプロパティを使って
タイムスタンプを更新する処理もあります。
処理としては、時刻が更新されると、登録した通知先(作った例場合はフォーム)の
表示を更新する処理になっています。
以下ソース
まずは、時計のソース、タイマーを使って定周期で時刻を更新し、登録先の
更新通知を行っています。
また、変更通知先を登録する処理を書いています。
- unit Unit4;
- interface
- uses
- System.SysUtils, System.Classes,Vcl.ExtCtrls, Data.Bind.EngExt,
- Vcl.Bind.DBEngExt, System.Rtti, System.Bindings.Outputs, Vcl.Bind.Editors,
- Data.Bind.Components,
- System.Bindings.EvalProtocol,
- System.Bindings.Expression,
- System.Bindings.ObjEval,
- System.Bindings.Helper;
- type
- TDataModule4 = class(TDataModule)
- FTimer: TTimer;
- procedure FTimerTimer(Sender: TObject);
- procedure DataModuleCreate(Sender: TObject);
- procedure DataModuleDestroy(Sender: TObject);
- private
- { Private 宣言 }
- FNowString : String;
- BindingExpression1: TBindingExpression;
- public
- procedure AddBindingList(const InputScopes: array of IScope; const BindExprStr: string; const OutputScopes: array of IScope; const OutputExpr: string);
- published
- { Public 宣言 }
- property NowString : String read FNowString;
- end;
- var
- DataModule4: TDataModule4;
- implementation
- {%CLASSGROUP 'Vcl.Controls.TControl'}
- uses Unit1;
- {$R *.dfm}
- procedure TDataModule4.AddBindingList(const InputScopes: array of IScope;
- const BindExprStr: string; const OutputScopes: array of IScope;
- const OutputExpr: string);
- begin
- BindingExpression1 := TBindings.CreateManagedBinding(
- InputScopes,
- BindExprStr,
- OutputScopes,
- OutputExpr,
- nil);
- end;
- procedure TDataModule4.DataModuleCreate(Sender: TObject);
- begin
- //BindScope1.Active := true;
- end;
- procedure TDataModule4.DataModuleDestroy(Sender: TObject);
- begin
- //BindScope1.Active := false;
- end;
- procedure TDataModule4.FTimerTimer(Sender: TObject);
- begin
- FNowString := DateTimeToStr(Now);
- TBindings.Notify(Self, 'NowString');
- end;
- end.
次に、時計を表示するソース。比較のためにポーリング処理で上記のソースのプロパティを使って
タイムスタンプを更新する処理もあります。
- unit Unit1;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
- Data.Bind.EngExt, Vcl.Bind.DBEngExt, System.Rtti, System.Bindings.Outputs,
- Unit4,
- System.Bindings.Expression,
- System.Bindings.ObjEval,
- System.Bindings.Helper,
- Vcl.Bind.Editors, Data.Bind.Components;
- type
- TForm1 = class(TForm)
- Label1: TLabel;
- Label3: TLabel;
- Timer1: TTimer;
- Label2: TLabel;
- Label4: TLabel;
- procedure Timer1Timer(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- private
- { Private 宣言 }
- FSakaClock : TDataModule4;
- public
- { Public 宣言 }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- //FSakaClock.Free;
- FSakaClock.Free;
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- FSakaClock := TDataModule4.Create(Self);
- FSakaClock.AddBindingList(
- { inputs }
- [TBindings.CreateAssociationScope([
- Associate(FSakaClock, 'I1')
- ])],
- 'I1.NowString',
- { outputs }
- [TBindings.CreateAssociationScope([
- Associate(Label3, 'O1')
- ])],
- 'O1.Caption');
- //FSakaClock := TSakaClock.Create(Self);
- end;
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- Label1.Caption := FSakaClock.NowString;
- end;
- end.