我在做一个变电站的RTU设备的维护工具软件,我选择delphi做的我用创建控件数组的方法创建了64个groupbox控件,并且在每个groupbox里还有两个label控件,有一个combobox控件来选择显示几个,有一个确定按钮,点击了确定之后就在窗体上有规则的显示出来(每行最多显示8个,超过8个分两行显示)。
1、为什么显示的太慢?
2、当第二次设置的比第一次少时,每一个都重新刷新一遍,怎么不使第二次设置的这几个不重新刷新,就从原来的基础上减去几个就可以了,如果第二次设置的比第一次的多呢,就在第一次的基础上加上几个就可以了。怎么解决这两个问题,谢谢!!  private
    { Private declarations }
    procedure P_Iniallmk;
    procedure P_show;
    procedure P_inimk(var lMKNum :integer);
    procedure P_inipro(var lProNum:integer);
  public
    { Public declarations } 
  end;var
  MainForm: TMainForm;
  GrB_MK :array[1..64] of Tgroupbox;
  Lbl_MKID :array[1..64] of Tlabel;
  Lbl_MKType : array[1..64] of Tlabel;  lMKNum ,lProNum: integer;
  cnsMKtopstart:longint;implementationuses about;{$R *.dfm}procedure TMainForm.FormCreate(Sender: TObject);begin
   pal_staset.Left :=88;
   pal_staset.Top :=200;
   P_IniallMK;
end;procedure TMainForm.Pal_StationClick(Sender: TObject);
begin
   pal_staset.Visible :=true;
   pal_staset.BringToFront ;end;procedure TMainForm.BitBtn1Click(Sender: TObject);
var
  i:integer;
begin
   for i:=1 to 64 do
   begin
       grb_mk[i].Visible :=false;
   end;
   pal_staset.Visible :=false;
   lbl_mknum.Caption :='模块数量: ' +cob_mknum.Text ;
   lmknum:=strtoint(cob_mknum.Text );
   lbl_gynum.Caption :='规约数量: ' + cob_gynum.Text ;
   //MainForm.Refresh ;
   P_show;
end;procedure TMainForm.Lbl_MKNumClick(Sender: TObject);
begin
   pal_staset.Visible :=true;
   pal_staset.BringToFront ;
end;procedure TMainForm.Lbl_GYNumClick(Sender: TObject);
begin
   pal_staset.Visible :=true;
   pal_staset.BringToFront ;
end;
procedure tmainform.P_Iniallmk ;
var
i:longint;begin
   for i:=1 to 64 do
   begin
       grb_mk[i]:=tgroupbox.Create(nil);
       grB_MK[i].Height:=45;
       grb_mk[i].Width :=62;
       grb_mk[i].Name :='grb_mk' + inttostr(i);
       grb_mk[i].Caption :='';
       grb_mk[i].Color :=clmenu;
       grb_mk[i].Parent :=mainform;
       grb_mk[i].Visible:=false;       lbl_mkid[i]:=tlabel.Create(nil);
       lbl_mkid[i].Height :=13;
       lbl_mkid[i].Width := 62;
       lbl_mkid[i].Top :=17;
       lbl_mkid[i].Left :=4;
       lbl_mkid[i].Name :='lbl_mkid'+inttostr(i);
       lbl_mkid[i].Caption :='  ID: ' +inttostr(i);
       lbl_mkid[i].Alignment:=tacenter;
       lbl_mkid[i].Parent :=grb_mk[i];
       lbl_mkid[i].Visible :=true;       lbl_mktype[i]:=tlabel.Create(nil);
       lbl_mktype[i].Height :=13;
       lbl_mktype[i].Width := 62;
       lbl_mktype[i].Top := 31;
       lbl_mktype[i].Left :=4;
       lbl_mktype[i].Name :='lbl_mktype'+inttostr(i);
       lbl_mktype[i].Caption :='';
       lbl_mktype[i].Alignment :=tacenter;
       lbl_mktype[i].Parent :=grb_mk[i];
       lbl_mktype[i].Visible :=true;
   end;
end;procedure tmainform.P_inimk(var lmknum:integer) ;
var
  i,j:integer;
  lMKTopJG,lMKTopStart:integer;
  
const
  lMKleftstart =240 ;
  lMKleftJG =70 ;begin   if (lmknum>0) and (lmknum<=64) then
      begin
      lMKTopJG:=98;
      j:=(lmknum-1) div 8;
         case j of
            0:
              begin
                lMkTopStart := 275;
              end;
            1:
              begin
                lMkTopStart := 200;
                lMkTopJG :=100 ;
              end;
            2:
              begin
                lMkTopStart := 175;
                lMkTopJG :=100 ;
              end;
            3:
              begin
                lMkTopStart := 120;
                lMkTopJG :=80;
              end;
            4:
              begin
                lMkTopStart := 100;
                lMkTopJG :=70 ;
              end;
            5:
              begin
                lMkTopStart :=  70;
                lMkTopJG :=70 ;
              end;
            6:
              begin
                lMkTopStart :=70;
                lMkTopJG :=60;
              end;
            7:
              begin
                lMkTopStart :=40;
                lMkTopJG :=60 ;
              end;
         end;
      for i:=1 to lmknum do
         begin
            grb_mk[i].Top :=lMkTopStart + (((i - 1) div 8) * lMkTopJG);
            grb_mk[i].Left :=lMKleftstart + (((i - 1) Mod 8) * lMKleftJG);
            grb_mk[i].Visible := true;
         end;
      end;end;
procedure tmainform.P_show ;
begin
 P_inimk(lMKNum);
 P_inipro(lProNum);
end;procedure TMainForm.FileSave1Execute(Sender: TObject);
begin
   savedialog.InitialDir :=ExtractFilePath(paramstr(0))+'Station\';
   savedialog.title:='保存';
   SaveDialog.Execute;
end;