Le projet entier et l'observation des résultats

De RAD Studio
Aller à : navigation, rechercher

Remonter à Tutoriel : Utilisation de LiveBindings par programmation


Attention : La méthode par programmation décrite ici n'est PAS le moyen standard d'implémenter les expressions de liaison. Typiquement, vous devriez utiliser l'inspecteur d'objets (la méthode standard) dans une application graphique. Vous ne devriez jamais avoir besoin d'utiliser la méthode de création d'expressions de liaison par programmation. Toutefois, ce tutoriel montre qu'il est possible de créer manuellement de telles expressions.


Pour obtenir des exemples d'utilisation de LiveBindings selon la méthode standard, voir :

Cette rubrique contient le listing complet du projet et aussi l'interprétation des résultats de sortie de la console.

Le listing du projet

Delphi :

program LiveBindingProgr;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Bindings.Expression,
  System.Bindings.ObjEval,
  System.Bindings.Helper;

type
  TMyObject1 = class(TObject)
  private
    FIntegerValue: Integer;
    FStringValue: String;
  public
    property IntegerValue: Integer read FIntegerValue write FIntegerValue;
    property StringValue: String read FStringValue write FStringValue;
  end;

  TMyObject2 = class(TObject)
  private
    FIntegerValue: Integer;
    FStringValue: String;
  public
    property IntegerValue: Integer read FIntegerValue write FIntegerValue;
    property StringValue: String read FStringValue write FStringValue;
  end;

  TMyResultObject = class(TObject)
  private
    FIntegerValue: Integer;
    FStringValue: String;
  public
    property IntegerValue: Integer read FIntegerValue write FIntegerValue;
    property StringValue: String read FStringValue write FStringValue;
  end;

var
  MyObject1: TMyObject1;
  MyObject2: TMyObject2;
  MyResultObject: TMyResultObject;

  BindingExpression1: TBindingExpression;
  BindingExpression2: TBindingExpression;

begin
  MyObject1 := TMyObject1.Create;
  MyObject2 := TMyObject2.Create;
  MyResultObject := TMyResultObject.Create;
  try
    MyObject1.IntegerValue := 1;
    MyObject1.StringValue := 'LiveBinding ';

    MyObject2.IntegerValue := 2;
    MyObject2.StringValue := 'power.';

    { a binding expression that binds the two Integer properties of the given objects }
    BindingExpression1 := TBindings.CreateManagedBinding(
      { inputs }
      [TBindings.CreateAssociationScope([
        Associate(MyObject1, 'o1'),
        Associate(MyObject2, 'o2')
        ])],
      'o1.IntegerValue + o2.IntegerValue',
      { outputs }
      [TBindings.CreateAssociationScope([
        Associate(MyResultObject, 'res')
        ])],
      'res.IntegerValue',
      nil);

    { a binding expression that binds the two String properties of the given objects }
    BindingExpression2 := TBindings.CreateManagedBinding(
      { inputs }
      [TBindings.CreateAssociationScope([
        Associate(MyObject1, 'o1'),
        Associate(MyObject2, 'o2')
        ])],
      'o1.StringValue + o2.StringValue',
      { outputs }
      [TBindings.CreateAssociationScope([
        Associate(MyResultObject, 'res')
        ])],
      'res.StringValue',
      nil);

    TBindings.Notify(MyObject1, 'IntegerValue');
    TBindings.Notify(MyObject1, 'StringValue');

    Writeln('Result of add operation: ', MyResultObject.IntegerValue);
    Writeln(MyResultObject.StringValue);
    Readln;
  finally
    MyObject1.Free;
    MyObject2.Free;
    MyResultObject.Free;
  end;
end.
Conseil : Lorsque vous créez une application console C++Builder, assurez-vous de choisir la bibliothèque des composants visuels comme framework cible afin que les opérations de compilation et de liaison du projet s'effectuent correctement.

C++ :

#pragma hdrstop
#pragma argsused
#pragma explicit_rtti methods()

#include <tchar.h>
#include <stdio.h>

#include <System.Bindings.Expression.hpp>
#include <System.Bindings.Helper.hpp>

class TMyObject1 : public TObject {
private:
        Integer FIntegerValue;
        String FStringValue;

public:
        __property Integer IntegerValue = {
                read = FIntegerValue, write = FIntegerValue};
        __property String StringValue = {read = FStringValue, write = FStringValue};
};

class TMyObject2 : public TObject {
private:
        Integer FIntegerValue;
        String FStringValue;

public:
        __property Integer IntegerValue = {
                read = FIntegerValue, write = FIntegerValue};
        __property String StringValue = {read = FStringValue, write = FStringValue};
};

class TMyResultObject : public TObject {
private:
        Integer FIntegerValue;
        String FStringValue;

public:
        __property Integer IntegerValue = {
                read = FIntegerValue, write = FIntegerValue};
        __property String StringValue = {read = FStringValue, write = FStringValue};
};

int _tmain(int argc, _TCHAR* argv[]) {
        TMyObject1 *MyObject1;
        TMyObject2 *MyObject2;
        TMyResultObject *MyResultObject;

        TBindingExpression *BindingExpression1, *BindingExpression2;

        MyObject1 = new TMyObject1();
        MyObject2 = new TMyObject2();
        MyResultObject = new TMyResultObject();

        MyObject1->IntegerValue = 1;
        MyObject1->StringValue = "LiveBinding ";
        MyObject2->IntegerValue = 2;
        MyObject2->StringValue = "power.";

        try {
                try {
                        OpenArray<_di_IScope>InputScopes
                                (TBindings::CreateAssociationScope
                                (OPENARRAY(TBindingAssociation, (Associate(MyObject1, "o1"),
                                Associate(MyObject2, "o2")))));
                        OpenArray<_di_IScope>OutputScopes
                                (TBindings::CreateAssociationScope
                                (OPENARRAY(TBindingAssociation, (Associate(MyResultObject,
                                "res")))));

                        BindingExpression1 = TBindings::CreateManagedBinding(InputScopes,
                                InputScopes.GetHigh(), "o1.IntegerValue + o2.IntegerValue",
                                OutputScopes, OutputScopes.GetHigh(), "res.IntegerValue", NULL);

                        BindingExpression2 = TBindings::CreateManagedBinding(InputScopes,
                                InputScopes.GetHigh(), "o1.StringValue + o2.StringValue",
                                OutputScopes, OutputScopes.GetHigh(), "res.StringValue", NULL);

                        TBindings::Notify(MyObject1, "IntegerValue");
                        TBindings::Notify(MyObject1, "StringValue");

                        printf("Result of add operation: %d\n", MyResultObject->IntegerValue);
                        printf("%ls\n", MyResultObject->StringValue.c_str());
                }
                catch (Exception& e) {
                        printf("%ls\n", e.ToString().c_str());
                }
        }
        __finally {
                delete MyObject1;
                delete MyObject2;
                delete MyResultObject;
        }

        return 0;
}

Interprétation des résultats

Le programme décrit dans ce tutoriel est utilisé pour lier quatre propriétés de deux objets différents par le biais d'expressions de liaison. Deux de ces propriétés sont du type Integer ; vous avez effectué une addition en les utilisant. Les deux autres propriétés sont du type string ; vous avez effectué une concaténation en les utilisant.

En exécutant le programme, la sortie de la console doit être comme suit.


Result of add operation: 3
LiveBinding power.

Précédent