Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar estado de varios Componentes a la ves (https://www.clubdelphi.com/foros/showthread.php?t=66566)

Lenny 26-02-2010 14:19:08

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.

Caro 26-02-2010 14:59:17

Hola leny, debes preguntar por el nombre de la clase, en tu caso TDBEdit.

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 19:14:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi