多个控件显示的问题

EastBuBai 2003-10-16 11:42:58
我用创建控件数组的方法创建了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;



implementation

uses 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;

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
if comm1.PortOpen then
statusbar.Panels.Items[0].Text :='状态:打开'
else
statusbar.Panels.Items[0].Text :='状态:关闭';
end;
...全文
24 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧