想了解DelphiXE2之FireMonkey入门(29)-数据绑定:TBindingsList:表达式的Evaluate()方法的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于Del
想了解Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法的新动态吗?本文将为您提供详细的信息,此外,我们还将为您介绍关于Delphi XE2 之 FireMonkey 入门 (16) - 滤镜:实例测试、Delphi XE2 之 FireMonkey 入门 (2)、Delphi XE2 之 FireMonkey 入门 (29) - 数据绑定: TBindingsList: 表达式的 Evaluate () 方法、Delphi XE2 之 FireMonkey 入门 (30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件的新知识。
本文目录一览:- Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法
- Delphi XE2 之 FireMonkey 入门 (16) - 滤镜:实例测试
- Delphi XE2 之 FireMonkey 入门 (2)
- Delphi XE2 之 FireMonkey 入门 (29) - 数据绑定: TBindingsList: 表达式的 Evaluate () 方法
- Delphi XE2 之 FireMonkey 入门 (30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件
Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法
总结
以上是小编为你收集整理的Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Delphi XE2 之 FireMonkey 入门 (16) - 滤镜:实例测试
窗体上需要 TImage、TOpenDialog 和六个按钮.
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects;
type
TForm1 = class(TForm)
Image1: TImage;
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
uses FMX.Filter;
var
bit: TBitmap;
procedure TForm1.FormCreate(Sender: TObject);
begin
bit := TBitmap.Create(0, 0);
if not OpenDialog1.Execute then Exit;
bit.LoadFromFile(OpenDialog1.FileName);
Image1.Bitmap.Assign(bit);
Image1.SetBounds(10, 10, bit.Width, bit.Height);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bit.Free;
end;
{高斯模糊: 一个参数}
procedure TForm1.Button1Click(Sender: TObject);
var
filter: TFilter;
begin
filter := FilterByName(''GaussianBlur''); //GaussianBlur 是高斯模糊滤镜的名称
filter.Values[''BlurAmount''] := 0.25; //BlurAmount 是高斯模糊参数的名称, 默认值是 1(0.1..10)
filter.ValuesAsBitmap[''input''] := bit; //input 是给输入图片约定的索引名称, 不区分大小写
Image1.Bitmap := filter.ValuesAsBitmap[''output'']; //output 是给输出图片约定的索引名称
end;
{颜色翻转: 无参数}
procedure TForm1.Button2Click(Sender: TObject);
var
filter: TFilter;
begin
filter := FilterByName(''Invert''); //颜色翻转
filter.ValuesAsBitmap[''input''] := bit;
Image1.Bitmap := filter.ValuesAsBitmap[''output''];
end;
{灰度: 无参数}
procedure TForm1.Button3Click(Sender: TObject);
var
filter: TFilter;
begin
filter := FilterByName(''Monochrome'');
filter.ValuesAsBitmap[''input''] := bit;
Image1.Bitmap := filter.ValuesAsBitmap[''output''];
end;
{马赛克: 一个参数}
procedure TForm1.Button4Click(Sender: TObject);
var
filter: TFilter;
begin
filter := FilterByName(''Pixelate'');
filter.Values[''BlockCount''] := 30; {25 : 1..1000}
filter.ValuesAsBitmap[''input''] := bit;
Image1.Bitmap := filter.ValuesAsBitmap[''output''];
end;
{对比度: 两个参数}
procedure TForm1.Button5Click(Sender: TObject);
var
filter: TFilter;
begin
filter := FilterByName(''Contrast'');
filter.Values[''Brightness''] := -0.5; {-1..1}
filter.Values[''Contrast''] := 1.5; {0..2}
filter.ValuesAsBitmap[''input''] := bit;
Image1.Bitmap := filter.ValuesAsBitmap[''output''];
end;
{透视: 参数是四个点}
procedure TForm1.Button6Click(Sender: TObject);
var
filter: TFilter;
begin
filter := FilterByName(''PerspectiveTransform'');
filter.Values[''TopLeft''] := VarFromPointXY(0, 0);
filter.Values[''TopRight''] := VarFromPointXY(bit.Width, 0);
filter.Values[''BottomRight''] := VarFromPointXY(bit.Width * 2, bit.Height * 2);
filter.Values[''BottomLeft''] := VarFromPointXY(0, bit.Height);
filter.ValuesAsBitmap[''input''] := bit;
Image1.Bitmap := filter.ValuesAsBitmap[''output''];
Image1.SetBounds(10, 10, bit.Width * 2, bit.Height * 2);
end;
end.
Transition 分类的滤镜需要两张图片:
uses FMX.Filter;
var
bit1,bit2: TBitmap;
{百叶窗效果}
procedure TForm1.FormCreate(Sender: TObject);
var
filter: TFilter;
begin
bit1 := TBitmap.Create(0, 0);
bit2 := TBitmap.Create(0, 0);
bit1.LoadFromFile(''C:\Temp\test1.jpg'');
bit2.LoadFromFile(''C:\Temp\test2.jpg'');
filter := FilterByName(''BlindTransition'');
filter.Values[''Progress''] := 50; //变换进度: 0..100; 当以此进度做动画时, PropertyName := ''Value''
filter.Values[''NumberOfBlinds''] := 10; //分叶数: 2..15
filter.ValuesAsBitmap[''input''] := bit1;
filter.ValuesAsBitmap[''target''] := bit2; //target 也是约定的索引名称
Image1.Bitmap := filter.ValuesAsBitmap[''output''];
Image1.SetBounds(10, 10, bit1.Width, bit1.Height);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bit1.Free;
bit2.Free;
end;
Delphi XE2 之 FireMonkey 入门 (2)
FireMonkey 的控件都是自己绘制的 (而不是基于系统组件), 我想它们应该是基于一些基本图形;就从基本图形开始吧.
FMX.Objects 单元给出的类:
TShape //基本图形的基类
TLine
TRectangle
TRoundRect
TCalloutRectangle
TEllipse
TCircle
TPie
TArc
TPath
TText
TImage
TPaintBox
TSelection
TSelectionPoint
添加一个 TRectangle, 先纵观一下它的可用功能:
{ TRectangle }
public
constructor Create(AOwner: TComponent); override;
published
property Fill;
property Stroke;
property StrokeCap;
property StrokeDash;
property StrokeJoin;
property StrokeThickness;
property XRadius: Single read FXRadius write SetXRadius;
property YRadius: Single read FYRadius write SetYRadius;
property Corners: TCorners read FCorners write SetCorners stored IsCornersStored;
property CornerType: TCornerType read FCornerType write SetCornerType default TCornerType.ctRound;
property Sides: TSides read FSides write SetSides stored IsSidesStored;
{ TRectangle 的父类 TShape }
protected
procedure FillChanged(Sender: TObject); virtual;
procedure StrokeChanged(Sender: TObject); virtual;
function GetShapeRect: TRectF;
procedure Painting; override;
procedure AfterPaint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Fill: TBrush read FFill write SetFill;
property Stroke: TBrush read FStroke write SetStroke;
property StrokeThickness: Single read FStrokeThickness write SetStrokeThickness stored IsStrokeThicknessStored;
property StrokeCap: TStrokeCap read FStrokeCap write SetStrokeCap default TStrokeCap.scFlat;
property StrokeDash: TStrokeDash read FStrokeDash write SetStrokeDash default TStrokeDash.sdSolid;
property StrokeJoin: TStrokeJoin read FStrokeJoin write SetStrokeJoin default TStrokeJoin.sjMiter;
property ShapeRect: TRectF read GetShapeRect;
{ TShape 的父类 TControl(来自 FMX.Types) }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AddObject(AObject: TFmxObject); override;
procedure RemoveObject(AObject: TFmxObject); override;
procedure SetNewScene(AScene: IScene); virtual;
procedure SetBounds(X, Y, AWidth, AHeight: Single); virtual;
{ matrix }
function AbsoluteToLocal(P: TPointF): TPointF; virtual;
function LocalToAbsolute(P: TPointF): TPointF; virtual;
function AbsoluteToLocalVector(P: TVector): TVector; virtual;
function LocalToAbsoluteVector(P: TVector): TVector; virtual;
function PointInObject(X, Y: Single): Boolean; virtual;
{ optimizations }
procedure RecalcUpdateRect; virtual;
procedure RecalcNeedAlign; virtual;
procedure RecalcOpacity; virtual;
procedure RecalcAbsolute; virtual;
procedure RecalcEnabled; virtual;
procedure RecalcHasEffect; virtual;
{ drag and drop }
function MakeScreenshot: TBitmap;
{ caret }
procedure ShowCaretProc;
procedure SetCaretPos(const APoint: TPointF);
procedure SetCaretSize(const ASize: TPointF);
procedure SetCaretColor(const AColor: TAlphaColor);
procedure HideCaret;
{ align }
procedure BeginUpdate; virtual;
procedure EndUpdate; virtual;
procedure Realign; virtual;
{ paining }
procedure ApplyEffect;
procedure Painting; virtual;
procedure DoPaint; virtual;
procedure AfterPaint; virtual;
{ effects }
procedure UpdateEffects;
{ }
procedure SetFocus;
procedure PaintTo(const ACanvas: TCanvas; const ARect: TRectF; const AParent: TFmxObject = nil);
procedure Repaint;
procedure InvalidateRect(ARect: TRectF);
procedure Lock;
property AbsoluteMatrix: TMatrix read GetAbsoluteMatrix;
property AbsoluteOpacity: Single read GetAbsoluteOpacity;
property AbsoluteWidth: Single read GetAbsoluteWidth;
property AbsoluteHeight: Single read GetAbsoluteHeight;
property AbsoluteScale: TPointF read GetAbsoluteScale;
property AbsoluteEnabled: Boolean read GetAbsoluteEnabled;
property HasEffect: Boolean read GetAbsoluteHasEffect;
property HasDisablePaintEffect: Boolean read GetAbsoluteHasDisablePaintEffect;
property HasAfterPaintEffect: Boolean read GetAbsoluteHasAfterPaintEffect;
property ChildrenRect: TRectF read GetChildrenRect;
property InvertAbsoluteMatrix: TMatrix read GetInvertAbsoluteMatrix;
property InPaintTo: Boolean read FInPaintTo;
property LocalRect: TRectF read GetLocalRect;
property AbsoluteRect: TRectF read GetAbsoluteRect;
property UpdateRect: TRectF read GetUpdateRect;
property BoundsRect: TRectF read GetBoundsRect write SetBoundsRect;
property ParentedRect: TRectF read GetParentedRect;
property ParentedVisible: Boolean read GetParentedVisible;
property ClipRect: TRectF read GetClipRect;
property Canvas: TCanvas read GetCanvas;
property Scene: IScene read FScene;
property AutoCapture: Boolean read FAutoCapture write FAutoCapture default False;
property CanFocus: Boolean read FCanFocus write FCanFocus default False;
property DisableFocusEffect: Boolean read FDisableFocusEffect write FDisableFocusEffect default False;
property DisableDefaultAlign: Boolean read FDisableDefaultAlign write FDisableDefaultAlign;
property TabOrder: TTabOrder read GetTabOrder write SetTabOrder default -1;
published
{ triggers }
property IsMouseOver: Boolean read FIsMouseOver;
property IsDragOver: Boolean read FIsDragOver;
property IsFocused: Boolean read FIsFocused;
property IsVisible: Boolean read FVisible;
{ props }
property Align: TAlignLayout read FAlign write SetAlign default TAlignLayout.alNone;
property Cursor: TCursor read GetCursor write SetCursor default crDefault;
property DragMode: TDragMode read GetDragMode write SetDragMode default TDragMode.dmManual;
property EnableDragHighlight: Boolean read FEnableDragHighlight write FEnableDragHighlight default True;
property Enabled: Boolean read FEnabled write SetEnabled default True;
property Position: TPosition read FPosition write SetPosition;
property RotationAngle: Single read FRotationAngle write SetRotationAngle;
property RotationCenter: TPosition read FRotationCenter write FRotationCenter;
property Locked: Boolean read FLocked write SetLocked default False;
property Width: Single read FWidth write SetWidth;
property Height: Single read FHeight write SetHeight;
property Margins: TBounds read FMargins write FMargins;
property Padding: TBounds read FPadding write FPadding;
property Opacity: Single read FOpacity write SetOpacity stored IsOpacityStored;
property ClipChildren: Boolean read FClipChildren write SetClipChildren default False;
property ClipParent: Boolean read FClipParent write FClipParent default False;
property HitTest: Boolean read FHitTest write SetHitTest default True;
property CanClip: Boolean read FCanClip write FCanClip default True;
property PopupMenu: TCustomPopupMenu read FPopupMenu write SetPopupMenu;
property Scale: TPosition read FScale write FScale;
property Visible: Boolean read FVisible write SetVisible default True;
property DesignVisible: Boolean read FDesignVisible write SetDesignVisible default True;
property OnDragEnter: TDragEnterEvent read FOnDragEnter write FOnDragEnter;
property OnDragLeave: TNotifyEvent read FOnDragLeave write FOnDragLeave;
property OnDragOver: TDragOverEvent read FOnDragOver write FOnDragOver;
property OnDragDrop: TDragDropEvent read FOnDragDrop write FOnDragDrop;
property OnDragEnd: TNotifyEvent read FOnDragEnd write FOnDragEnd;
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
property OnKeyUp: TKeyEvent read FOnKeyUp write FOnKeyUp;
property OnClick: TNotifyEvent read FOnClick write FOnClick;
property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;
property OnCanFocus: TCanFocusEvent read FOnCanFocus write FOnCanFocus;
property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
property OnExit: TNotifyEvent read FOnExit write FOnExit;
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove;
property OnMouseUp: TMouseEvent read FOnMouseUp write FOnMouseUp;
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnPainting: TOnPaintEvent read FOnPainting write FOnPainting;
property OnPaint: TOnPaintEvent read FOnPaint write FOnPaint;
property OnResize: TNotifyEvent read FOnResize write FOnResize;
property OnApplyStyleLookup: TNotifyEvent read FOnApplyStyleLookup write FOnApplyStyleLookup;
{ TControl 的父类 TFmxObject (来自 FMX.Types) }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Release(Delay: Single = 0.1);
{ check for support interface }
function IsIControl: Boolean;
function AsIControl: IControl;
procedure SetRoot(ARoot: IRoot);
{ design }
procedure SetDesign(Value: Boolean; SetChildren: Boolean = True);
function ItemClass: string; virtual;
{ clone }
function Clone(const AOwner: TComponent): TFmxObject;
procedure CloneChildFromStream(AStream: TStream);
{ childs }
procedure AddObject(AObject: TFmxObject); virtual;
procedure InsertObject(Index: Integer; AObject: TFmxObject); virtual;
procedure RemoveObject(AObject: TFmxObject); overload; virtual;
procedure RemoveObject(Index: Integer); overload; virtual;
procedure Exchange(AObject1, AObject2: TFmxObject); virtual;
procedure DeleteChildren; virtual;
procedure BringToFront;
procedure SendToBack;
procedure AddObjectsToList(const AList: TList);
procedure AddControlsToList(const AList: TList);
procedure Sort(Compare: TFmxObjectSortCompare); virtual;
{ notify }
procedure AddFreeNotify(const AObject: IFreeNotification);
procedure RemoveFreeNotify(const AObject: IFreeNotification);
{ tab }
procedure GetTabOrderList(const List: TList; AChildren: Boolean);
{ i/o }
procedure LoadFromStream(const AStream: TStream);
procedure SaveToStream(const Stream: TStream);
procedure LoadFromBinStream(const AStream: TStream);
procedure SaveToBinStream(const AStream: TStream);
{ resource }
function FindStyleResource(const AStyleLookup: string): TFmxObject; virtual;
procedure UpdateStyle; virtual;
{ animations }
procedure StartAnimation(const AName: string); virtual;
procedure StopAnimation(const AName: string); virtual;
procedure StartTriggerAnimation(AInstance: TFmxObject; const ATrigger: string); virtual;
procedure StartTriggerAnimationWait(AInstance: TFmxObject; const ATrigger: string); virtual;
procedure StopTriggerAnimation(AInstance: TFmxObject); virtual;
procedure ApplyTriggerEffect(AInstance: TFmxObject; const ATrigger: string); virtual;
{ animation property }
procedure AnimateFloat(const APropertyName: string; const NewValue: Single; Duration: ...);
procedure AnimateColor(const APropertyName: string; NewValue: TAlphaColor; Duration: ...);
procedure AnimateFloatDelay(const APropertyName: string; const NewValue: Single; Duration: ...);
procedure AnimateFloatWait(const APropertyName: string; const NewValue: Single; Duration: ...);
procedure StopPropertyAnimation(const APropertyName: string);
{ }
property Root: IRoot read FRoot;
property Stored: Boolean read FStored write SetStored;
{ }
property TagObject: TObject read FTagObject write FTagObject;
property TagFloat: Single read FTagFloat write FTagFloat;
property TagString: string read FTagString write FTagString;
{ children }
property ChildrenCount: Integer read GetChildrenCount;
property Children[Index: Integer]: TFmxObject read GetChild;
{ binding }
function FindBinding(const ABinding: string): TFmxObject;
property Data: Variant read GetData write SetData;
property Binding[const Index: string]: Variant read GetBinding write SetBinding;
property Parent: TFmxObject read FParent write SetParent;
property Index: Integer read GetIndex write SetIndex;
published
property BindingName: string read FBindingName write SetBindingName;
property StyleName: string read FStyleName write SetStyleName;
{ TFmxObject 的父类 TComponent (来自 System.Classes), 到这里不新鲜了 }
public
constructor Create(AOwner: TComponent); virtual;
destructor Destroy; override;
procedure BeforeDestruction; override;
procedure DestroyComponents;
procedure Destroying;
function ExecuteAction(Action: TBasicAction): Boolean; dynamic;
function FindComponent(const AName: string): TComponent;
procedure FreeNotification(AComponent: TComponent);
procedure RemoveFreeNotification(AComponent: TComponent);
procedure FreeOnRelease;
function GetEnumerator: TComponentEnumerator;
function GetParentComponent: TComponent; dynamic;
function GetNamePath: string; override;
function HasParent: Boolean; dynamic;
procedure InsertComponent(AComponent: TComponent);
procedure RemoveComponent(AComponent: TComponent);
procedure SetSubComponent(IsSubComponent: Boolean);
function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; override;
function UpdateAction(Action: TBasicAction): Boolean; virtual;
function IsImplementorOf(const I: IInterface): Boolean;
function ReferenceInterface(const I: IInterface; Operation: TOperation): Boolean;
property ComObject: IUnknown read GetComObject;
property Components[Index: Integer]: TComponent read GetComponent;
property ComponentCount: Integer read GetComponentCount;
property ComponentIndex: Integer read GetComponentIndex write SetComponentIndex;
property ComponentState: TComponentState read FComponentState;
property ComponentStyle: TComponentStyle read FComponentStyle;
property DesignInfo: Longint read FDesignInfo write FDesignInfo;
property Owner: TComponent read FOwner;
property VCLComObject: Pointer read FVCLComObject write FVCLComObject;
property Observers: TObservers read GetObservers;
published
property Name: TComponentName read FName write SetName stored False;
property Tag: NativeInt read FTag write FTag default 0;
{ TComponent 的父类 TPersistent (来自 System.Classes) }
public
destructor Destroy; override;
procedure Assign(Source: TPersistent); virtual;
function GetNamePath: string; dynamic;
{ TPersistent 的父类 TObject (来自 System) }
public
constructor Create;
procedure Free;
class function InitInstance(Instance: Pointer): TObject;
procedure CleanupInstance;
function ClassType: TClass; inline;
class function ClassName: string;
class function ClassNameIs(const Name: string): Boolean;
class function ClassParent: TClass;
class function ClassInfo: Pointer; inline;
class function InstanceSize: Longint; inline;
class function InheritsFrom(AClass: TClass): Boolean;
class function MethodAddress(const Name: ShortString): Pointer; overload;
class function MethodAddress(const Name: string): Pointer; overload;
class function MethodName(Address: Pointer): string;
class function QualifiedClassName: string;
function FieldAddress(const Name: ShortString): Pointer; overload;
function FieldAddress(const Name: string): Pointer; overload;
function GetInterface(const IID: TGUID; out Obj): Boolean;
class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
class function GetInterfaceTable: PInterfaceTable;
class function UnitName: string;
class function UnitScope: string;
function Equals(Obj: TObject): Boolean; virtual;
function GetHashCode: Integer; virtual;
function ToString: string; virtual;
function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; virtual;
procedure AfterConstruction; virtual;
procedure BeforeDestruction; virtual;
procedure Dispatch(var Message); virtual;
procedure DefaultHandler(var Message); virtual;
class function NewInstance: TObject; virtual;
procedure FreeInstance; virtual;
destructor Destroy; virtual;
慢慢消化...
Delphi XE2 之 FireMonkey 入门 (29) - 数据绑定: TBindingsList: 表达式的 Evaluate () 方法
TBindingsList 中可能不止一个表达式,通过表达式的 Evaluate 方法可单独提交绑定,并可在 Active = False 时提交.
在 TBindExprItems 中对应的方法是 EvaluateFormat.
测试设想: Label1、Label2 的绑定源同是 Edit1, 分别提交绑定.
1、在窗体上加控件: Label1、Label2、Edit1、BindingsList1;
2、激活 Edit1 的 OnKeyUp、OnChange 事件,还有窗体的默认事件.
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Edit, Data.Bind.EngExt,
FMX.Bind.DBEngExt, Data.Bind.Components;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
BindingsList1: TBindingsList;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
procedure Edit1Change(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
var
bindExpression1, bindExpression2: TBindExpression;
procedure TForm1.FormCreate(Sender: TObject);
begin
bindExpression1 := TBindExpression.Create(BindingsList1);
bindExpression2 := TBindExpression.Create(BindingsList1);
with bindExpression1 do
begin
ControlComponent := Label1;
ControlExpression := ''Text'';
SourceComponent := Edit1;
SourceExpression := ''Text'';
// Active := True;
end;
with bindExpression2 do
begin
ControlComponent := Label2;
ControlExpression := ''Text'';
SourceComponent := Edit1;
SourceExpression := ''UpperCase(Text)'';
// Active := True;
end;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
bindExpression1.Evaluate;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
bindExpression2.Evaluate;
end;
end.
Delphi XE2 之 FireMonkey 入门 (30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件
表达式中的函数有限,譬如我想通过绑定输出文本的长度 (譬如在 Label1 中绑定输出 Edit1.Text 的长度) 就没有相应的函数;
这可在 TBindExpression 的 OnAssigningValue 事件中处理.
TBindExpression 和它的兄弟们 (TBindExprItems、TBindLink、TBindListLink、TBindGridLink、TBindPosition、TBindList、TBindGridList、TBindDBEditLink、TBindDBTextLink、TBindDBListLink、TBindDBImageLink、TBindDBMemoLink、TBindDBCheckLink、TBindDBGridLink) 拥有相同的事件.
先在窗体上添加 Label1、Edit1、BindingsList1, 然后激活 Edit1 的 OnKeyUp 事件和窗体的默认事件;
代码中手动完成了 OnAssingningValue 事件,在设计时添加事件会更方便.
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, System.Rtti,
System.Bindings.Outputs, FMX.Layouts, Data.Bind.Components, FMX.Edit;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
BindingsList1: TBindingsList;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
procedure MyOnAssigningValue(Sender: TObject; AssignValueRec: TBindingAssignValueRec; var Value: TValue; var Handled: Boolean);
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
begin
with TBindExpression.Create(BindingsList1) do
begin
ControlComponent := Label1;
ControlExpression := ''Text'';
SourceComponent := Edit1;
SourceExpression := ''Text'';
OnAssigningValue := MyOnAssigningValue; //
Active := True;
end;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
BindingsList1.Notify(Sender, '''');
end;
procedure TForm1.MyOnAssigningValue(Sender: TObject; AssignValueRec: TBindingAssignValueRec; var Value: TValue; var Handled: Boolean);
begin
Value := Length(Value.ToString); //
end;
end.
关于Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Delphi XE2 之 FireMonkey 入门 (16) - 滤镜:实例测试、Delphi XE2 之 FireMonkey 入门 (2)、Delphi XE2 之 FireMonkey 入门 (29) - 数据绑定: TBindingsList: 表达式的 Evaluate () 方法、Delphi XE2 之 FireMonkey 入门 (30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件的相关信息,请在本站寻找。
本文标签: