Après avoir examiné les expressions de liaison et la manière dont elles peuvent être liées aux composants, passons au composant destiné à gérer les expressions de liaison.
Dans des articles de blog récents, j’ai couvert le moteur d’expression de base RTL de Delphi et la liaison de composants . Nous pouvons maintenant franchir une étape supplémentaire et examiner un composant clé pour l’ensemble de l’architecture des liaisons, appelé BindingsList. Une liste de liaisons est une collection de différents types d’expressions de liaisons, gérées dans les concepteurs.
En d’autres termes, les expressions et les liaisons de composants que j’ai définies dans le code source du dernier article de blog peuvent être entièrement définies dans les concepteurs (et les assistants) du composant BindingsList. Déposez simplement un composant de ce type dans un formulaire plus quelques composants visuels (dans mon exemple, deux modifications, une modification de rotation et une barre de progression – voir l’image ci-dessous).
Le composant BindingsList possède un concepteur qui permet de définir une collection de liaisons. Chaque liaison peut être sélectionnée à l’aide de l’une des nombreuses options disponibles (beaucoup trop nombreuses pour être explorées dans cet article et principalement axées sur les liaisons de source de données et de champ de données). Les deux options de base que je vais utiliser ici sont TBindExpression et TBindExprItems.
Après avoir sélectionné l’une de ces liaisons, disons une TBindExpression, vous devez interagir avec deux surfaces de conception différentes pour travailler sur l’expression : d’un côté, vous pouvez configurer les propriétés de l’expression dans l’inspecteur d’objets, comme le SourceComponent et le ControlComponent (le terme utilisé pour désigner le contrôle cible) et les expressions associées ; d’autre part, en double-cliquant sur l’expression dans l’éditeur BindingList, vous pouvez nous ouvrir un concepteur d’expressions spécial, qui à son tour dispose d’éditeurs et de visualiseurs d’éléments supplémentaires :
Dans l’image ci-dessus, vous pouvez voir que j’ai connecté l’expression à un contrôle source et cible, mais je n’ai toujours pas défini d’expression. Cela peut être aussi simple qu’un nom de propriété unique ou une combinaison plus complexe de valeurs et d’expressions et peut être configuré dans les propriétés d’ expressions de l’ inspecteur d’ objets pour la liaison ou sur le concepteur spécial affiché ci-dessus. Le concepteur offre également la possibilité d’évaluer et d’inspecter différentes expressions.
Pour en revenir aux expressions, nous pouvons simplement utiliser Value et Position pour le Spin Edit et la Progress Bar, respectivement. Notez que l’expression de liaison a une direction (par défaut, la source à contrôler) qui peut être inversée ou peut également être bidirectionnelle.
J’ai utilisé une expression bidirectionnelle pour les deux zones d’édition, de sorte que la saisie de l’une d’entre elles copie le contenu dans l’autre. Dans ce deuxième exemple, j’ai utilisé une liaison TBindExprItems (mais une expression régulière aurait suffi). Il s’agit d’une liaison plus complexe, dans laquelle vous spécifiez la source et le contrôle (comme ci-dessus) mais définissez une collection d’expressions claires et de format, qui peuvent impliquer plusieurs propriétés des contrôles. Dans cet exemple, le mappage est Text to Text (bidirectionnel) comme vous pouvez le voir ci-dessous :
Avec tout cela, le seul code Delphi nécessaire dans l’application est un appel pour réévaluer les liaisons lorsque la valeur de la source change. Cela se fait facilement en gérant les événements OnChange des différents contrôles et en déclenchant une mise à jour générale des liaisons pour le contrôle actuel (le Sender ):
1 |
TBindings.Notify(Sender, ''); |
Voici l’application très simple en action :
Maintenant, vous vous demandez peut-être où finissent tous ces paramètres de configuration… mais comme la plupart des autres configurations de conception dans Delphi, ce n’est pas un noir pour un fichier de formulaire que vous pouvez afficher sous forme de texte (et modifier, si vous savez ce que vous faites) . Vous pouvez également copier le composant depuis le concepteur et le coller sous forme de texte, comme je l’ai fait ici :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
object BindingsList1: TBindingsList Methods = <> OutputConverters = <> object BindExprItemsEdits: TBindExprItems Category = 'Binding Expressions' ControlComponent = Edit1 SourceComponent = Edit2 FormatExpressions = < item ControlExpression = 'Text' SourceExpression = 'Text' Direction = dirBidirectional end> ClearExpressions = <> NotifyOutputs = False end object BindExpression1: TBindExpression Category = 'Binding Expressions' ControlComponent = ProgressBar1 SourceComponent = SpinEdit1 SourceExpression = 'Value' ControlExpression = 'Position' NotifyOutputs = False Direction = dirSourceToControl end end |
C’est tout pour l’instant, même si je me rends compte que j’ai juste effleuré la surface de l’architecture des fixations. La prochaine étape de ces séries sur les expressions et les liaisons est celle des concepteurs de Visual Live Binding, qui s’appuie sur les pièces que nous avons vues jusqu’à présent. Je le couvrirai la prochaine fois.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition