• Delphi XE2 之 FireMonkey 入门(23)



    准备用 TBindingsList 重做上一个例子.

    可以先把 TBindingsList 理解为是一组绑定表达式(TBindExpression)的集合;
    官方应该是提倡在设计时完成 TBindExpression 的建立与参数设置, 但我觉得看运行时的代码会更容易理解.

    1、先在窗体上添加 TrackBar1、Edit1、Label1、BindingsList1;
    2、激活窗体和 TrackBar1 的默认事件;
    3、然后将通过代码把 TrackBar1.Value 分别绑定到 Edit1.Text、Label1.Text, (这里把 TrackBar1 做源控件, 把 Edit1、Label1 做目标控件).

    unit Unit1;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, Data.Bind.EngExt,
      Fmx.Bind.DBEngExt, Data.Bind.Components, FMX.Edit;
    
    type
      TForm1 = class(TForm)
        TrackBar1: TTrackBar;
        Edit1: TEdit;
        Label1: TLabel;
        BindingsList1: TBindingsList;
        procedure FormCreate(Sender: TObject);
        procedure TrackBar1Change(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      {给 BindingsList1 添加表达式, 并设置参数}
      with TBindExpression.Create(BindingsList1) do
      begin
        ControlComponent := Edit1;    //目标控件
        ControlExpression := 'Text'//目标控件属性
        SourceComponent := TrackBar1; //源控件
        SourceExpression := 'Value'//源控件属性
        Active := True;               //激活; 可以通过 Active := False 断开绑定
      end;
    
      with TBindExpression.Create(BindingsList1) do
      begin
        ControlComponent := Label1;
        ControlExpression := 'Text';
        SourceComponent := TrackBar1;
        SourceExpression := 'Value';
        Active := True;
      end;
    end;
    
    {在 TrackBar1 的 OnChange 中发送通知}
    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
      BindingsList1.Notify(Sender, ''); //这里也可以写作: BindingsList1.Notify(TrackBar1, 'Value');
    end;
    
    end.


    下面尝试在设计时完成以上工作:

    1、先在窗体上添加 TrackBar1、Edit1、Label1;
    2、从 Edit1 的右键菜单 New LiveBinding...(从 Strucure 窗口 Edit1 的右键菜单、或从 Object Inspector 窗口的 LiveBindings 添加均可);
    3、确认添加 TBindingExpression, 其默认名称会是: BindExpressionEdit11, (此时也会有 BindingsList1 被自动添加);
    4、选定刚刚添加的 BindExpressionEdit11, 设置属性:
       ControlComponent : 'Edit1'
       ControlExpression: 'Text'
       SourceComponent  : 'TrackBar1'
       SourceExpression : 'Value'
    5、重复步骤 2..4 同样设置 Label1
    6、在 TrackBar1 的 OnChange 事件中写上一句: BindingsList1.Notify(Sender, '');
    7、运行.

    使用 System.Bindings.Helper 单元中 TBindings 类的静态方法实现如上绑定(先在窗体上添加 TrackBar1、Edit1、Label1):

    unit Unit1;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Edit;
    
    type
      TForm1 = class(TForm)
        TrackBar1: TTrackBar;
        Edit1: TEdit;
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure TrackBar1Change(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    uses System.Bindings.Expression, System.Bindings.Helper;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      TBindings.CreateManagedBinding(
        [TBindings.CreateAssociationScope([Associate(TrackBar1, 'Input1')])],
        'Input1.Value',
        [TBindings.CreateAssociationScope([Associate(Edit1, 'Output1')])],
        'Output1.Text',
        nil
      ); //其中的 Input1、Output1 都是随意的, 前后一致即可
    
      TBindings.CreateManagedBinding(
        [TBindings.CreateAssociationScope([Associate(TrackBar1, 'Input1')])],
        'Input1.Value',
        [TBindings.CreateAssociationScope([Associate(Label1, 'Output1')])],
        'Output1.Text',
        nil
      );
    end;
    
    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
      TBindings.Notify(Sender, '');
    end;
    
    end.

  • 相关阅读:
    js 获取服务端时间,并实现时钟
    微信分享问题记录
    format
    vue-cli3 使用mint-ui
    vue.js 使用记录(1)
    iview admin 生成环境打包时路径问题
    java8:(Lambda 表达式简介)
    SpringBoot: 18.使用Scheduled 定时任务器(转)
    SpringBoot: 16.整合junit单元测试(转)
    SpringBoot: 17.热部署配置(转)
  • 原文地址:https://www.cnblogs.com/dzdd/p/3346855.html
Copyright © 2020-2023  润新知