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


Автор: psix 23.1.2006, 15:02
Имеется ограниченное пространство на форме, по нему и формируется Ширина и Высота всего объекта StringGrid, в зависимости от количества данных попадаемых в него. Данные полностью помещаются в заранее определенную ширину ячейки как StringGrid->DefaultColWidth = 90, высота определяется как StringGrid->DefaultRowHeight = 20;

вот код:
Код

static int GridWidth=0, GridHeight=0, GridRowCnt=0, GridColCnt=0;
static TScrollStyle GridScroll;
    const maxRow = 15, maxCol = 8; 
           //максимально допустимое количество строк и столбцов на форме, соответственно. 
    GridColCnt = зависит от значения некоторой функции;
    GridRowCnt = зависит от значения некоторой функции;
    StringGrid->ColCount=GridColCnt;
    StringGrid->RowCount=GridRowCnt;
           //это только случай, когда число получающихся столбцов больше максимального
    if (GridColCnt > maxCol) {
        GridWidth=maxCol*StringGrid->DefaultColWidth+maxCol+1; 
           // maxCol+1 - это еще прибавляется толщина разделительных линий = 1;
        GridHeight=GridRowCnt*StringGrid->DefaultRowHeight+27; 
           // число 27 подобрано из опыта =))) в нём и загвоздка.
        GridScroll=ssHorizontal;
    }
    else {
        GridWidth=GridColCnt*StringGrid->DefaultColWidth+GridColCnt+1;
        GridHeight=GridRowCnt*StringGrid->DefaultRowHeight+GridRowCnt+1;
        GridScroll=ssNone;    
    }
    StringGrid->Height=GridHeight;
    StringGrid->Width=GridWidth;
    StringGrid->ScrollBars=GridScroll; 

Так вот, собственно, вопрос: Каким образом узнать высоту (ширину, в случае с "перебором" в строках, хотя значение одно и тоже) полосы прокрутки установленной в системе, чтобы получить аккуратный StringGrid, в котором, если количество столбцов (строк) больше максимального появляется горизонтальная (вертикальная) полоса прокрутки. Чтобы эта полоса прокрутки не перекрывала последнюю строку (столбец), и не отстояла от нее на расстоянии.

Автор: _hunter 23.1.2006, 15:38
ориентируйся не на Heigth/Width сетки а на ClientHeigth/ClientWidth

Автор: psix 24.1.2006, 19:06
Красота!!! За-ра-бо-та-ло! smile
только тяперча код несколько видоизмениться:

Код

if (GridColCnt > maxCol) {
        GridWidth=maxCol*StringGrid->DefaultColWidth+maxCol-1; 
           //так как не имеет значение теперь толщина Бордера СтрингГрида равная 2 если GridLineWidth=1; 
        GridHeight=GridRowCnt*StringGrid->DefaultRowHeight+GridRowCnt-1; 
        GridScroll=ssHorizontal;
    }
    else {
        GridWidth=GridColCnt*StringGrid->DefaultColWidth+GridColCnt-1;
        GridHeight=GridRowCnt*StringGrid->DefaultRowHeight+GridRowCnt-1;
        GridScroll=ssNone;    
    }
    StringGrid->ScrollBars=GridScroll;    
    StringGrid->ClientHeight=GridHeight;
    StringGrid->ClientWidth=GridWidth;


благодарствую!

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