PDA

Ver la Versión Completa : Cambiar estado de varios Componentes a la ves


Lenny
26-02-2010, 14:19:08
Hola y gracias de antemano, me han servido mucho los comentarios a mis dudas y hoy tengo otra.

Encontré un código bastante útil, lo utilizo sobre unos DBEdit cambiando según la necesidad de ReadOnly a True ó False, el código en cuestión:

procedure TForm1.ReadOnly(Value:boolean);
var
PropInfo : PPropInfo;
Component : TComponent;
i : integer;
begin
for i := 0 to ComponentCount - 1 do begin
Component := Components[ i ];
if Component is TControl then begin
PropInfo := GetPropInfo( Component.ClassInfo, 'ReadOnly' );
if Assigned( PropInfo ) and
( PropInfo^.PropType^.Kind = tkEnumeration ) then
SetOrdProp( Component, PropInfo, integer( Value ) );
end;
end;
end;

Es bastante cómodo, se ejecuta así:


procedure TForm1.DBEdit15Exit(Sender: TObject);
begin
ReadOnly(True);
end;


Pero... también tengo un DBGrid en la misma Form y pienso utilizarlo en más Form's pero me cambia a todos los componentes que tengan ReadOnly, las preguntas son dos:

1) ¿Se puede modificar y como para que solo afecte a un tipo de componentes y no a todos?

2) ¿Que cambios debería hacer para que además de cambiar de ReadOnly también pueda cambiar el color de los DBEdits por ejemplo?

Lo pregunto por qué he intentado de todo y no me funciona aun (modificarlo, por que cumple bien su funcion inicial), y como ven, el código en si es bastante útil (al menos para mí) y me ahorraría muchas líneas de código en vez de escribir una por una DBEDit1.Color:= clWindow ó DBEdit1.ReadOnly:= True lo ideal es usar este mismo código que a mí me sirve muchísimo (o alguno similar) ya que se escribe una vez y al llamarlo coloco la opción que sea necesaria sin tener que colocarlo dentro de un boton para pdoer ejecutarlo como solia hacerlo antes.
Espero no abusar de su buena voluntad, muy agradecido si alguien puede ayudarme, de antemano mil gracias...

Lenny.

Caro
26-02-2010, 14:59:17
Hola leny, debes preguntar por el nombre de la clase, en tu caso TDBEdit.


procedure ReadOnly(valor : Boolean);
for i := 0 to ComponentCount - 1 do begin
Component := Components[ i ];
if Component is TDBEdit then
TDBEdit(Component).ReadOnly := valor;
end;


Saluditos