如果要给一对 "源控件" 和 "目标控件" 写多个表达式, 使用 TBindExpression 就不如 TBindExprItems 了.

TBindExprItems 中的表达式又分两组: FormatExpressions、ClearExpressions, 后者是在断开绑定时的表达式.



示例设想:
1、TrackBar1 为源, 把其 Value 值绑定给 Edit1.Text 和 Edit1.Width 和 Label1.Text;
2、断开绑定时, 在 Edit1 中显示 "已断开绑定".

先在窗体上添加: TrackBar1、Edit1、Label1、BindingsList1、CheckBox1, 然后激活 TrackBar1、ChengkBox1 和窗体的默认事件:


  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7.   FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, Data.Bind.EngExt,
  8.   Fmx.Bind.DBEngExt, Data.Bind.Components, FMX.Edit;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     TrackBar1: TTrackBar;
  13.     Edit1: TEdit;
  14.     Label1: TLabel;
  15.     BindingsList1: TBindingsList;
  16.     CheckBox1: TCheckBox;
  17.     procedure FormCreate(Sender: TObject);
  18.     procedure TrackBar1Change(Sender: TObject);
  19.     procedure CheckBox1Change(Sender: TObject);
  20.   end;
  21.  
  22. var
  23.   Form1: TForm1;
  24.  
  25. implementation
  26.  
  27. {$R *.fmx}
  28.  
  29. var
  30.   bindExprItems: TBindExprItems;
  31.  
  32. procedure TForm1.FormCreate(Sender: TObject);
  33. begin
  34.   bindExprItems := TBindExprItems.Create(BindingsList1);
  35.   with bindExprItems do
  36.   begin
  37.     ControlComponent := Edit1;    //目标控件
  38.     SourceComponent := TrackBar1; //源控件
  39.     {把 TrackBar1.Value 绑定到 Edit1.Text}
  40.     with FormatExpressions.AddExpression do
  41.     begin
  42.       ControlExpression := 'Text';
  43.       SourceExpression := 'Value';
  44.     end;
  45.     {把 TrackBar1.Value 绑定到 Edit1.Width}
  46.     with FormatExpressions.AddExpression do
  47.     begin
  48.       ControlExpression := 'Width';
  49.       SourceExpression := 'Value';
  50.     end;
  51.     {把 TrackBar1.Value 绑定到 Label1.Text}
  52.     with FormatExpressions.AddExpression do
  53.     begin
  54.       ControlExpression := 'Owner.Label1.Text'; //Owner
  55.       SourceExpression := 'Value';
  56.     end;
  57.     {当要断开绑定时...}
  58.     with ClearExpressions.AddExpression do
  59.     begin
  60.       ControlExpression := 'Self.Text';  //这里的 Self 是指目标控件本身, 可省略
  61.       SourceExpression := '"已断开绑定"';
  62.     end;
  63.     Active := True;
  64.   end;
  65.   CheckBox1.IsChecked := True;
  66.   TrackBar1.Max := ClientWidth;
  67. end;
  68.  
  69. procedure TForm1.TrackBar1Change(Sender: TObject);
  70. begin
  71.   BindingsList1.Notify(Sender, 'Value');
  72. end;
  73.  
  74. procedure TForm1.CheckBox1Change(Sender: TObject);
  75. begin
  76.   bindExprItems.Active := TCheckBox(Sender).IsChecked;
  77. end;
  78.  
  79. end.

Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems的更多相关文章

  1. Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList、TBindPosition [未完成...]

    Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList.TBindPosition [未完成...] //待补...

  2. Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件

    Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件 表达式中的函数有 ...

  3. Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法

    Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法 TBindingsList 中可能不止一个表达式, 通 ...

  4. Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText()、CheckedState()

    Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText().CheckedState() 示例构想: 用 ...

  5. Delphi XE2 之 FireMonkey 入门(27) - 数据绑定: TBindingsList: TBindScope

    Delphi XE2 之 FireMonkey 入门(27) - 数据绑定: TBindingsList: TBindScope 如果在编写表达式时, 如果能够随意指认需要的控件就好了(通过 Owne ...

  6. Delphi XE2 之 FireMonkey 入门(25) - 数据绑定: TBindingsList: 表达式的灵活性及表达式函数

    Delphi XE2 之 FireMonkey 入门(25) - 数据绑定: TBindingsList: 表达式的灵活性及表达式函数 绑定表达式中可以有简单的运算和字符串连接, 但字符串需放在双引号 ...

  7. Delphi XE2 之 FireMonkey 入门(23) - 数据绑定: TBindingsList: TBindExpression

    准备用 TBindingsList 重做上一个例子. 可以先把 TBindingsList 理解为是一组绑定表达式(TBindExpression)的集合;官方应该是提倡在设计时完成 TBindExp ...

  8. Delphi XE2 之 FireMonkey 入门(24) - 数据绑定: TBindingsList: TBindExpression.Direction

    在学习 BindingSource 属性时, 可以让两个控件互为绑定源; TBindExpression 对应的功能是 Direction 属性. 先在窗体上添加 Edit1.Edit2.Bindin ...

  9. Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库

    Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1    : TDataSource; Clie ...

随机推荐

  1. 安装sysbench,报错"Could not resolve 'ports.ubuntu.com'"

    在ubuntu系统中安装sysbench时报错“Could not resolve 'ports.ubuntu.com'”怎么办呢? 安装时报错: 亲测可用的方法: 修改 resolv.conf 文件 ...

  2. CCPC-Wannafly Winter Camp Day1 爬爬爬山 (最短路)

    题目描述 爬山是wlswls最喜欢的活动之一. 在一个神奇的世界里,一共有nn座山,mm条路. wlswls初始有kk点体力,在爬山的过程中,他所处的海拔每上升1m1m,体力会减11点,海拔每下降1m ...

  3. Flutter-發送短信驗證碼

    import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; ...

  4. linux-lampweb

    http://www.lampweb.org/linux/2/6.html      

  5. RPC协议解析

    RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.简言之,RPC使得程序能够像访问本地 ...

  6. heroinfo_set.all 函数

    如果是 一对多 关系 即使用 heroinfo_set.all  此时关联字段类型通用,即上边的字段通用,但是需要添加many=True的参数heroinfo_set = serializers.Pr ...

  7. hdu 6214 : Smallest Minimum Cut 【网络流】

    题目链接 ISAP写法 #include <bits/stdc++.h> using namespace std; typedef long long LL; namespace Fast ...

  8. margin属性以及垂直外边距重叠问题

       盒子的margin属性         盒子的外边距margin 指的是当前盒子与其他盒子之间的距离,环绕在盒子周围的空白区域,属于不可见的区域,,不会影响到可见框的大小,而是会影响到盒子的位置 ...

  9. BZOJ 2097: [Usaco2010 Dec]Exercise 奶牛健美操 二分 + 贪心 + 树上问题

    Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...

  10. ios input readonly失效(点击的时候会有光标出现)/禁止输入法弹出问题

    苹果端用1,2,之后解决不了readonly失效问题(点击的时候会有光标出现)(且不方便用disabled的时候),就用3, 1,    $("#appDateTime").foc ...