Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как подогнать размера внешней рамки StringGrid ...


Автор: =Женек= 23.4.2009, 20:55
ПРобовал так:
Код

BallsGrid->Height=BallsGrid->RowCount*22+4;
/*
GridWidth=0;
for (i = 0; i < BallsGrid->ColCount; i++)
{
 GridWidth=GridWidth+BallsGrid->ColWidths[i];
BallsGrid->Cells[i][1]=BallsGrid->ColWidths[i];
 }


BallsGrid->Width=GridWidth;


Не получается - почему-то неверно определяет размеры некоторых ячеек. Мне кажется что это как-то связано с тем, что я отрисовываю ячекйи в OnDrawCell.
Может быть есть какие-то настройки, которые позволяют автоматом подгонять внешнюю рамку к краям ячеек?

Автор: artsb 23.4.2009, 23:20
Цитата(=Женек= @  23.4.2009,  20:55 Найти цитируемый пост)
Мне кажется что это как-то связано с тем, что я отрисовываю ячекйи в OnDrawCell

Правильно. 
Пробуйте так:
Код

// высота
int h = 0;
for(int i=0; i<BallsGrid->RowCount; i++)
  h += BallsGrid->RowHeights[i];
BallsGrid->Height=h+4;
// ширина
int w = 0;
for(int i=0; i<BallsGrid->ColCount; i++)
  w += BallsGrid->ColWidths[i];
BallsGrid->Width=w+4;

Автор: =Женек= 24.4.2009, 07:31
 ТОгда как скрестить это:

Код

// высота
int h = 0;
for(int i=0; i<BallsGrid->RowCount; i++)
  h += BallsGrid->RowHeights[i];
BallsGrid->Height=h+4;
// ширина
int w = 0;
for(int i=0; i<BallsGrid->ColCount; i++)
  w += BallsGrid->ColWidths[i];
BallsGrid->Width=w+4;




с этим:
Код



void __fastcall TForm1::BallsGridDrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
 {


    int w = BallsGrid->Canvas->TextWidth(BallsGrid->Cells[ACol][ARow]) + 10;
     if(w>BallsGrid->ColWidths[ACol])
        BallsGrid->ColWidths[ACol] = w;





}


Убираю вторую часть - внешняя рамка ОК, но внутри ерунда - размер не подгоняется.
Если обе части - появляется скролл и по вертикали и по горизонтали.

Автор: artsb 24.4.2009, 14:27
=Женек=, а вы куда вставили первую часть?

1. Попробуйте так:
Код

void __fastcall TForm1::BallsGridDrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
 {
    int w = BallsGrid->Canvas->TextWidth(BallsGrid->Cells[ACol][ARow]) + 10;
     if(w>BallsGrid->ColWidths[ACol])
     {
        BallsGrid->ColWidths[ACol] = w;
        // высота
        int h = 0;
        for(int i=0; i<BallsGrid->RowCount; i++)
          h += BallsGrid->RowHeights[i];
        BallsGrid->Height=h+4;
        // ширина
        int w = 0;
        for(int i=0; i<BallsGrid->ColCount; i++)
          w += BallsGrid->ColWidths[i];
        BallsGrid->Width=w+4;
     }
}

2. Либо увеличьте запас:
Код

BallsGrid->Height=h+10;
BallsGrid->Width=w+10;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)