2011-09-08 10 views
10

コントロール間でライブ結合を行うことができます。つまり、2つのエディットボックスを使用して、その内容をラベルに一緒に追加した結果を得ることができます。Delphi XE2とコントロール間のライブ結合

C:\Users\Public\Documents\RAD Studio\9.0\Samples\Delphi\LiveBinding\Components\bindexpression\fmx\BindExpressionSampleProject.dproj 

正確にその処理を行います。私は

おかげ

答えて

9

サンプルをご覧ください。 SVNリポジトリのURL:https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/LiveBindings

例:

----- ----- Unit1.dfm

object Form1: TForm1 
    Left = 0 
    Top = 0 
    Caption = 'Form1' 
    ClientHeight = 286 
    ClientWidth = 426 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    PixelsPerInch = 96 
    TextHeight = 13 
    object Label1: TLabel 
    Left = 8 
    Top = 62 
    Width = 48 
    Height = 13 
    Caption = 'Edit1Edit2' 
    end 
    object Edit1: TEdit 
    Left = 8 
    Top = 8 
    Width = 121 
    Height = 21 
    TabOrder = 0 
    Text = 'Edit1' 
    OnChange = EditChange 
    end 
    object Edit2: TEdit 
    Left = 8 
    Top = 35 
    Width = 121 
    Height = 21 
    TabOrder = 1 
    Text = 'Edit2' 
    OnChange = EditChange 
    end 
    object BindingsList1: TBindingsList 
    Methods = <> 
    OutputConverters = <> 
    UseAppManager = True 
    Left = 20 
    Top = 5 
    object BindExpressionLabel11: TBindExpression 
     Category = 'Binding Expressions' 
     ControlComponent = Label1 
     SourceComponent = BindScope1 
     SourceExpression = 'Edit1.Text + Edit2.Text' 
     ControlExpression = 'Caption' 
     NotifyOutputs = False 
     Direction = dirSourceToControl 
    end 
    end 
    object BindScope1: TBindScope 
    Left = 192 
    Top = 16 
    end 
end 

----- ----- Unit1.pas

:結果を生成するためにIDEのデザイナを使用する方法

unit Unit1; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.Bind.EngExt, Vcl.Bind.DBEngExt, 
    System.Rtti, System.Bindings.Outputs, Vcl.Bind.Editors, Data.Bind.Components, 
    Vcl.StdCtrls; 

type 
    TForm1 = class(TForm) 
    Edit1: TEdit; 
    Edit2: TEdit; 
    Label1: TLabel; 
    BindingsList1: TBindingsList; 
    BindExpressionLabel11: TBindExpression; 
    BindScope1: TBindScope; 
    procedure EditChange(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

uses 
    System.Bindings.Helper; 

procedure TForm1.EditChange(Sender: TObject); 
begin 
    TBindings.Notify(Sender, 'Text'); 
end; 

end. 
  • フォーム(Edit1、Edit2)、ラベル(Label1)、およびTBindScope(BindScope1)をフォーム(Form1)に配置します。
  • 両方の編集のOnChangeイベント(EditChange)のイベントハンドラを作成します。
  • 、Label1にを選択しLiveBindingsプロパティのドロップダウンを展開し、「バインディングの新しいライブを...」を選択し、選択しTBindExpression新しく作成されたBindExpressionLabel11の
  • 編集プロパティ:SourceComponent、Edit1.TextにControlExpression、BindScope1にキャプションを割り当てます+ Edit2.Text to SourceExpression
+2

それはかなり素晴らしいように見えます。 'SourceExpression = 'Edit1.Text + Edit2.Text''はどのようにコンパイルされ、評価されますか? –

+3

@David:ランタイム(拡張可能)式評価エンジンが全部含まれています。 –

+0

それはエキサイティングな音! –

4

(デフォルト)で、サンプルプロジェクトの場所を開始する場所を私は知りません、それは確信しています。

+0

正確には、1つのソースと1つのコントロールコンポーネント間の単純なバインディングを示しています。 1つの式に2つの異なるソースコンポーネントが含まれるようにするには、Edit1とEdit2の参照を解決するためにTBindScopeコンポーネントが必要です。また、Form1をSourceComponentに割り当てることもできますが、これはグローバル変数Form1をすべての結果とともに使用しています。 –

+0

これらのデモ(LiveBindingsのデモ)は、ESDインストールでのみ使用できます。 ISOイメージにはそれらが含まれていません。 ISOからインストールした場合、彼の答えで提供されたリンクTOndrejに行く必要があります。 –

+0

@KenWhite - このデモはSubversionのリンクからダウンロードすることもできます:http://sourceforge.net/projects/radstudiodemos/ –

-1

TBindScopeを使用してコンポーネントをバインドする必要はありません。フォーム上でedit1とedit2を持っているとします。 edit2 BindingSourceをedit1に設定すると、edit1の変更へのリンクになります

+0

彼は、2つのコンポーネントのプロパティを一緒に追加することについて質問していました。あなたの答えは、あるコンポーネントのプロパティを別のコンポーネントに割り当てることについてのようです。 – chuacw

関連する問題