|
[방법1]
아래는 제가 코딩해서 테스트 해봣는데
TButton보다는 TSpeedButton이 훨씬 빨랐습니다.
현재 화면에 20* 15 = 300개 버튼이 배치되어있습니다.
GetTickCount()로 계산해 보니
평균적으로 TSpeedButton이 TButton보다 5배정도 빨랐습니다.
[방법2] //별로 권장하지 않음
Button들이 올려져 있는 parent인 groupbox나 panel을 잠시 Visible=false시켰다가
다 바뀌면 Visible시키는것 어떨까요?
이것도 한번 껌뻑거립니다만 편법으로 쓸수 있을것도 같네요
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
TSpeedButton *ArBtn[20][15];
//TButton *ArBtn[20][15];
int iWidMg,iHeiMg;
int iWid,iHei;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
iWidMg=50;
iHeiMg=40;
iWid=45;
iHei=30;
Panel1->DoubleBuffered=true;
for(int i=0;i<15;i++)
{
for(int j=0;j<20;j++)
{
ArBtn[j][i]=new TSpeedButton(this);
//ArBtn[j][i]=new TButton(this);
ArBtn[j][i]->Left= 10 + j*iWidMg;
ArBtn[j][i]->Width=iWid;
ArBtn[j][i]->Top=10+i*iHeiMg;
ArBtn[j][i]->Height=iHei;
ArBtn[j][i]->Caption=IntToStr(i)+"-"+IntToStr(j);
ArBtn[j][i]->Parent=Panel1;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
iWidMg=this->ClientWidth / 21;
iHeiMg=this->ClientHeight / 16;
iWid=iWidMg-5;
iHei=iHeiMg-10;
//Panel1->Visible=false;
int itc1,itc2;
itc1= GetTickCount();
for(int i=0;i<15;i++)
{
for(int j=0;j<20;j++)
{
ArBtn[j][i]->Left= 10 + j*iWidMg;
ArBtn[j][i]->Width=iWid;
ArBtn[j][i]->Top=10+i*iHeiMg;
ArBtn[j][i]->Height=iHei;
}
}
itc2=GetTickCount();
this->Caption=IntToStr(itc2-itc1); // size조정시간 계산 , 1000 이 1초
//Panel1->Visible=true;
}
//---------------------------------------------------------------------------
김성준 님이 쓰신 글 :
: 화면에 느리게 버튼이 주르르륵 나타납니다..
:
: 여전하네요..
:
: 제가 뭔가를 잘못 사용하고 있는걸까요..
:
: 흠.. 폼을 처음 그릴땐 문제가 아닌데..
:
: 폼을 리사이즈 할때 버튼들의 위치와 가로세로 크기도 같이 변하게끔 해줬거든요..
|