for i:=0 to  self.componets.count-1 do 
beginif Components[I] is TDBEdit then
      TDBEdit(Components[I]).ReadOnly := ReadOnly;end;这样还不是要一个一个判断啊,而且控件类型多的话就会太麻烦,维护不方便。如果设置窗口的Enabled为False或把所有控件放到Panel再设置Panel的Enabled为False,不过这样的话如果窗口是ShowModal打开的就会错误

解决方案 »

  1.   

    遍历Components, 判断组件是否有ReadOnly属性, 如果有, 置为true即可.
      

  2.   

    procedure TForm1.btn1Click(Sender: TObject);
    var
      I: Integer;
      PropInfo: PPropInfo;
    begin
      for  I := 0 to ComponentCount - 1 do
      begin
        PropInfo := GetPropInfo(Components[I], 'ReadOnly');
        if Assigned(PropInfo) then
          SetVariantProp(Components[I], PropInfo, True);
      end;
    end;
      

  3.   

    把你所有的组件放到panel上,然后设置panel的enable
      

  4.   


    如果设置窗口的Enabled为False或把所有控件放到Panel再设置Panel的Enabled为False,不过这样的话如果窗口是ShowModal打开的就会错误