delphi gridpanel проблема с высотой последнего ряда - PullRequest
0 голосов
/ 04 июня 2019

Как избежать гридпанелей, последние строки берут выше других у меня есть 10 строк с 10-процентным значением

enter image description here

Если я добавляю новую строку с 0 процентами, предыдущая строка, которая имеет тенденцию быть последней строкой, принимает правильную высоту, но внизу появляется новая строка borders, которую я не желаю

enter image description here

1 Ответ

2 голосов
/ 04 июня 2019

Когда 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 делится неравномерно) становятся незаметными.

...