2011-09-08 10 views
10

नियंत्रण के बीच लाइव बाइंडिंग करना संभव है, यानी 2 संपादन बॉक्स ले लो और एक लेबल में अपनी सामग्री को एक साथ जोड़ने का परिणाम प्राप्त करें। मैं यह है यकीन है कि, मैं बस जहांनियंत्रण के बीच डेल्फी एक्सई 2 और लाइव बाइंडिंग

धन्यवाद

उत्तर

9

नमूने पर एक नज़र डालें। SVN भंडार यूआरएल: 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 -----

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. 

आईडीई डिजाइनर का उपयोग कैसे करें परिणाम उपज:

  • आपके फॉर्म (फॉर्म 1) पर दो संपादन (संपादन 1, संपादन 2), एक लेबल (लेबल 1) और एक टीबींडस्कोप (बाइंडस्कोप 1) डालें।
  • दोनों संपादन 'OnChange ईवेंट (EditChange) के लिए एक ईवेंट हैंडलर बनाएं।
  • Label1 का चयन करें, LiveBindings संपत्ति का ड्रॉप-डाउन का विस्तार इसके बजाय 'नया लाइव बाइंडिंग ...' का चयन करें TBindExpression नव निर्मित BindExpressionLabel11 की
  • गुण संपादित करें: SourceComponent, Edit1.Text को ControlExpression, BindScope1 को कैप्शन आवंटित + Edit2. SourceExpression
+2

यह बहुत बढ़िया दिखता है। 'SourceExpression = 'Edit1.Text + Edit2.Text' कैसे संकलित, मूल्यांकन किया गया है या जो भी है? –

+3

@ डेविड: इसमें एक पूर्ण रनटाइम (एक्स्टेंसिबल) अभिव्यक्ति मूल्यांकन इंजन शामिल है। –

+0

ओह जो रोमांचक लगता है! –

4

(डिफ़ॉल्ट) पर नमूना परियोजना के स्थान शुरू करने के लिए पता नहीं है:

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

ठीक है कि नहीं करता है।

+0

बिल्कुल नहीं, यह एक स्रोत और एक नियंत्रण घटक के बीच एक सरल बाध्यकारी दिखाता है। एक अभिव्यक्ति में शामिल दो अलग-अलग स्रोत घटक प्राप्त करने के लिए, मेरा मानना ​​है कि आपको संपादन 1 और संपादन 2 संदर्भों को हल करने के लिए TBindScope घटक की आवश्यकता है। आप SourceComponent को Form1 भी असाइन कर सकते हैं लेकिन वह सभी परिणामों के साथ वैश्विक चर फॉर्म 1 का उपयोग कर रहा है। –

+0

ध्यान दें कि ये डेमो (लाइवबिंडिंग वाले) केवल ईएसडी इंस्टॉल के माध्यम से उपलब्ध हैं। आईएसओ छवि में उन्हें शामिल नहीं है; यदि आप आईएसओ से स्थापित हैं तो आपको अपने जवाब में दिए गए लिंक टेंडरेज पर जाना होगा। –

+0

@ केनहाइट - डेमो भी सबवर्जन लिंक के माध्यम से डाउनलोड करने योग्य हैं: http://sourceforge.net/projects/radstudiodemos/ –

-1

आपको घटक को बाध्य करने के लिए TBindScope की आवश्यकता नहीं है। मान लें कि आपके पास फॉर्म पर संपादन 1 और संपादन 2 है। यदि आप संपादन 2 को संपादित करने के लिए संपादन 2 बाइंडिंग स्रोत सेट करते हैं तो यह संपादित करने के लिए लिंक होगा

+0

वह एक साथ 2 घटकों के गुण जोड़ने के बारे में पूछ रहा था। आपका उत्तर एक घटक की संपत्ति को दूसरे को असाइन करने के बारे में प्रतीत होता है। – chuacw

संबंधित मुद्दे