Ver Mensaje Individual
  #1  
Antiguo 26-02-2010
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Reputación: 17
Lenny Va por buen camino
Exclamation Cambiar estado de varios Componentes a la ves

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);
Código Delphi [-]
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í:

Código Delphi [-]
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
Código Delphi [-]
DBEDit1.Color:= clWindow
ó
Código Delphi [-]
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.
Responder Con Cita