El Objeto StringList (I)
Lo que vamos a ver ahora es cómo almacenar esos mismos valores pero utilizando el componente visual de la clase TValueListEditor, el cual está alojado en la pestaña Additional:


La columna Key contendrá el nombre de los valores que deseamos insertar y la columna Value el valor asociado al nombre. Supongamos que quiero que el usuario pueda modificar los datos principales de un cliente. Lo primero que vamos a hacer el cambiar el título de las columnas a través de la propiedad TitleCaptions. Vamos a sustituir Key y Value por Campo y Valor, de manera que así quedaría:



ESTABLECIENDO MASCARAS PARA CADA VALOR
El problema radica en que no se puede establecer el tipo de valor que puede introducirse en un campo en tiempo de diseño utilizando el inspector de objetos. Hay que hacerlo en el evento OnCreate del formulario mediante código. Por ejemplo, vamos a hacer que en el campo ID sólo se puedan introducir valores numéricos:
procedure TFPrincipal.FormCreate( Sender: TObject );
var
PropNumerica: TItemProp;
begin
PropNumerica := TItemProp.Create( ValueListEditor );
PropNumerica.EditMask := '###0';
ValueListEditor.ItemProps[0] := PropNumerica;
end;
Lo que hemos hecho es crear el objeto PropNumerica de la clase TItemProp y posteriormente hemos establecido la regla de edición asignándola al primer elemento de la lista (el campo ID).
También podemos crear otro tipo de propiedad que permita escoger el valor sólo entre una lista predeterminada. Por ejemplo, voy a hacer que el campo ESTADO sólo pueda contener los estados PENDIENTE o PAGADO:
procedure TFPrincipal.FormCreate( Sender: TObject );
var
PropNumerica, PropEstado: TItemProp;
begin
PropNumerica := TItemProp.Create( ValueListEditor );
PropNumerica.EditMask := '###0';
ValueListEditor.ItemProps[0] := PropNumerica;
PropEstado := TItemProp.Create( ValueListEditor );
PropEstado.PickList.Add( 'PENDIENTE' );
PropEstado.PickList.Add( 'PAGADO' );
ValueListEditor.ItemProps[5] := PropEstado;
end;
Al ejecutar el programa el campo ESTADO quedaría del siguiente modo:


Pruebas realizadas en Delphi 7.
6 comentarios:
que excelente blog.
lo de la aplicación multicapa me parecio bueno, y claro, es un gran trabajo el que haces.
saludos
Muchas gracias por tu apoyo.
Este blog lo comencé al principio para tener mis apuntes de Delphi accesibles desde cualquier sitio, pero ví que era una tontería tenerlo en privado habiendo más gente que necesitaba información como yo.
Así que seguiré dando caña mientras que pueda.
Saludos!!!
Agradecidisimo de este post y de muchos otros que publicaste, es increible la cantidad de veces que caigo en este blog cuando busco un poco de ayuda en delphi ;)
Se viene la publicacion electronica portable ?? ;)
Quizás en un futuro lance un programa tipo Trucomanía que recopile todos los artículos de este blog.
Pero necesito mucho más material, tiempo y ganas.
Quien sabe...
Muy instructivo, muchas gracias, pero quisiera saber si es posible y cómo se hace para tener un valor tipo TColor, con todos los posibles colores, lo más parecido posible a como es en el inspector de objetos.
Desde ya, muchísimas gracias
Este componente no tiene esa propiedad para sacar el color. Mejor buscar otro componente más potente que si lo permita.
Para ello habría que heredar el mismo y ampliarlo con esa funcionalidad. Con la cantidad de componentes que hay hoy en día para Delphi creo que no merece la pena.
Saludos.
Publicar un comentario