Когда SizeStyle=ssPercent
расчет размера включает в себя значение double
(процент). В VCL
результат должен быть округлен до целого числа (= пикселей). Код использует Trunc()
, предположительно, чтобы гарантировать, что количество строк вписывается в GridPanel
. Затем лишние пиксели (если таковые имеются) «передаются» последней строке.
Вместо SizeStyle=ssPercent
вы можете использовать SizeStyle=ssAbsolute
и определить высоту строки как количество пикселей. В этом случае расчет не включает значения с плавающей запятой, и нет необходимости в округлении. В этом случае вы можете объявить высоту каждой строки, например, 28 a, если высота GridPanel1
равна 280, то все строки имеют одинаковую высоту.
Вы можете выбрать SizeStyle
в IDE (Инспектор объектов), выбрав все TRowItem
на панели структуры в разделе RowCollection
.
Вы можете определить эти настройки также во время выполнения.
Редактировать после комментария
Если вы используете SizeStyle=ssPercent
, вам нужно сделать выбор между двумя случаями, которые вы указали в своем вопросе.
Если вы используете SizeStyle=ssAbsolute
, вы можете использовать событие TGridPanel1.OnResize()
для пересчета высоты элемента:
procedure TForm7.GridPanel1Resize(Sender: TObject);
var
i, toth, rowh: integer;
gp: TGridPanel;
begin
gp := Sender as TGridPanel;
toth := gp.Height;
rowh := toth div gp.RowCollection.Count;
for i := 0 to gp.RowCollection.Count-1 do
gp.RowCollection.Items[i].Value := rowh;
end;
Кроме того, если цвет GridPanel1
такой же, как у формы, вы можете установить GridPanel1.BevelOuter=bvNone
, который скрывает границу GridPanel1
и пустое пространство, которое появляется под строки (когда toth
делится неравномерно) становятся незаметными.