Ver Mensaje Individual
  #5  
Antiguo 22-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

También podes hacerte un procedimiento que cambie cualquier propiedad ordinal, siempre que la tengan, de los controles del form:

Código Delphi [-]
uses TypInfo;

procedure TForm1.SetCtrlsProp(Lista: array of string; AProperty: string;
  Value: Variant);
var
  i,j: Integer;
begin
  for i:= High(Lista) downto Low(Lista) do
  begin
    j:= 0;
    while(j < ControlCount)and(Controls[j].Name <> Lista[i])do Inc(j);
    if(j < ControlCount)and(Controls[j].Name = Lista[i]) then
    begin
      if GetPropInfo(Controls[j].ClassInfo, AProperty) <> nil then
       SetOrdProp(Controls[j], AProperty, Value);
    end;
  end;
end;

Eso te permite hacer cosas como por ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetCtrlsProp(['Edit1', 'Edit3', 'Edit2'],'Enabled', False);
  SetCtrlsProp(['DBGrid1', 'DBEdit1', 'DBEdit2'], 'ReadOnly', True);
  SetCtrlsProp(['Edit1', 'Edit2', 'DBGrid1'], 'Color', clYellow);
end;
Lo que sí tenés que ser cuidadoso con los nombres, el procedimiento no es tan virtuoso como para distinguir Edit1 de EdiT1 ...
Pero si deseas ese comportamiento, es muy sencillo implementar que ignore mayúsculas/minúsculas. (UpperCase)

Saludos.

Edito: Me olvidé de avisarte, el procedimiento funciona sólo con propiedades ordinales. (no podrías cambiar la propiedad Text por ejemplo)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 22-09-2011 a las 23:53:08. Razón: Agregar aclaración
Responder Con Cita