Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
DelphiIDENoticias

Expresiones, propiedades y componentes de enlace de Delphi

controlsbinding

Continuando con la publicación del blog de la semana pasada sobre expresiones vinculantes, veamos cómo pueden participar los componentes, pero creando expresiones que se refieren a propiedades.


La semana pasada presenté el motor de expresión Delphi RTL en la publicación del blog en  https://blog.marcocantu.com/blog/2021-may-delphi-expression-engine.html . Ahora demos un paso adicional. Quiero explicar cómo los componentes y sus propiedades pueden ser parte de estas expresiones. En este caso, no solo evaluamos una expresión, sino que queremos asociar dos expresiones separadas en un “enlace”.

Unión de dos componentes

En términos prácticos, suponga que tiene un formulario con SpinEdit y ProgressBar. Un enlace administrado le permite proporcionar una expresión de entrada (con uno o más objetos de entrada) y una expresión de salida (nuevamente con uno o más objetos). Como puede ver en el código siguiente, cada objeto está asociado a la expresión que proporciona un nombre, como  spin1  para el componente SpinEdit1, y la expresión puede hacer referencia al objeto y sus propiedades, como en  spin1.Value . Lo mismo ocurre con la salida. También puede especificar un convertidor de salida, que he omitido aquí:


Con este código de configuración, si llama a  BindingExpression1.Evaluate,  el valor de SpinEdit se copiará en ProgressBar. Puede realizar la misma llamada para actualizar el valor, pero también puede abstraer el concepto indicando a la arquitectura de enlaces que la propiedad del valor de la edición de giro ha cambiado. El sistema determinará automáticamente si hay una o más expresiones que involucren la propiedad y la actualizará:

Este cambio de perspectiva (un valor ha cambiado en lugar de que sea necesario volver a calcular una expresión) es de fundamental importancia, ya que abstrae completamente el modelo de datos de la interfaz de usuario a la que está asociado. Llegaremos a eso, pero primero déjame mostrarte la interfaz de usuario simple de la aplicación:

controlsbinding-3076596

Vinculación de objetos y controles de la interfaz de usuario

Esto se explica mejor en la segunda parte del ejemplo, que tiene un cuadro de edición vinculado a un objeto en la memoria. La clase TMyObject tiene una propiedad Name y Value. Así es como puede vincular un objeto a la interfaz de usuario:

En este código, MyObj es un objeto de la clase TMyObject. Su propiedad Name está asociada con el componente Text de edName. Nuevamente, al actualizar la expresión, se actualiza la salida. Pero el objeto no debe tener conocimiento de los controles de la interfaz de usuario o los enlaces de la interfaz de usuario. De hecho, todo lo que necesita hacer para instrumentar el objeto es notificar al sistema que el valor ha cambiado:

Con este código, cuando los datos cambian, la interfaz de usuario se actualiza automáticamente para reflejarlo:

No estoy 100% seguro de cómo quiere llamar a los patrones implementados con enlaces en Delphi, pero ciertamente ofrece una separación y abstracción completa del modelo de datos con la vista de la interfaz de usuario.

Hay mucho más por explorar

A continuación, podemos comenzar a ver cómo puede trabajar con enlaces bidireccionales y cómo puede definir toda la lógica anterior utilizando diseñadores de componentes específicos, reduciendo el código requerido. Hay mucha tecnología detrás de Visual Live Bindings, que es el destino final potencial y lo que a menudo discutimos. Las vinculaciones en vivo son agradables, pero la tecnología de vinculación en Delphi RTL es donde vive el poder.

banner delphi low code wizard 1220x300 2

See What's New in 12.2 Athens See What's New in 12.2 Athens Dev Days of Summer 2-24

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

IN THE ARTICLES