음...
님의 코드에서 문제점은
비율의 기준이 되어야 하는 ColumnWidth 가 계속변경되고있는 ColumnWidth를 가지고 한다는것입니다.
그러니 프로그램 시작할대 Grid의 Width와 각 Column의 Width를 저장해두고
Grid의 크기가 변경되었을때(Form의 OnResize이벤트에서)
저장해둔 Original Grid-Width와 Column-Width를 가지고 비율을 계산하여
Column->Width에 적용하면 될듯 합니다.
다음코드를 참고하세요
int iOrgGridWid;
int iOrgColWid[10];
void __fastcall TForm1::FormCreate(TObject *Sender)
{
iOrgGridWid=StringGrid1->Width;
for(int c=0;cColCount;c++)
iOrgColWid[c]=StringGrid1->ColWidths[c];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
int iNewGridWid=StringGrid1->Width;
for(int i=0;iColCount;i++)
StringGrid1->ColWidths[i]=(iOrgColWid[i] * iNewGridWid) / iOrgGridWid;
}
//---------------------------------------------------------------------------
그럼..
펭귄 님이 쓰신 글 :
: TMS의 AdvancedStringGrid를 쓰고 있는데요
: StringGrid를 Client에 Align 해두고
: Client Window에서 Resize를 할 때 Stringgrid 크기가 변하면
: 거기에 맞춰 column들을 창 크기에 맞추려고 합니다.
: 이것 저것 찾아봤는데 자동으로 적정 비율로 column 크기가 맞춰지지 않더라고요
:
: 대충 변환 전 column의 전체 width를 합쳐서 columnwidth라고 저장을 해두고
:
: i번째 column이 전체 columnwidth에서 차지하는 비율 = (ColWidth[i] / columnwidth)
: 새로운 StringGrid의 사이즈 = WindowWidth라고 하면
:
: 새로운 ColWidth[i] = WindowWidth* (ColWidth[i] / columnwidth)인데
:
: 이렇게 하면 문제가
: 예를 들면
: ColWidth[0]=100;
: ColWidth[1]=30;
:
: 이런식으로 width 차이가 좀 크면 창이 커질 때 큰 Column은 계속 커지는데 작은 Column은 거의 변화가 없어서
: 결과적으로 결과가 맘에 안듭니다
: 창이 작아질 때 작은 Column이 줄어드는 속도도 너무 빠르고요
: 뭐가 틀린게 있는건지 원래 이모양인지 -_-
: StringGrid에서 Column 값을 정확한 비율로 StringGrid 크기에 맞춰서 변환하는 방법이 어떤게 있나요
:
:
:
: 참고:
: void __fastcall TTcpPorts_Form::FormResize(TObject *Sender)
: {
: int diff=WindowWidth-StringGrid1->Width;
: WindowWidth=StringGrid1->Width;
:
: int columnwidth=0;
: int i;
:
: StringGrid1->ColWidths[9]=0;
:
: for(i=0;i<9;i++){
: columnwidth += StringGrid1->ColWidths[i];
: }
:
: if((diff<0 && columnwidth<WindowWidth) || (diff>0 && columnwidth>WindowWidth)){
: for(i=0;i<9;i++){
: StringGrid1->ColWidths[i]=WindowWidth * StringGrid1->ColWidths[i] / columnwidth;
: }
:
: for(i=0;i<9;i++){
: if(StringGrid1->ColWidths[i]<35)
: StringGrid1->ColWidths[i]=35;
: }
: }
: }