Имеется ограниченное пространство на форме, по нему и формируется Ширина и Высота всего объекта 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, в котором, если количество столбцов (строк) больше максимального появляется горизонтальная (вертикальная) полоса прокрутки. Чтобы эта полоса прокрутки не перекрывала последнюю строку (столбец), и не отстояла от нее на расстоянии. |