Jak ustawić szerokość StringGrid

0

Hi. Od roku zacząłem uczyć się Free Pascal'a. Korzystam z open-source cross platform IDE Lazarus.
To jest mój pierwszy większy program napisany w free pascal'u korzystający z graficznego GUI.
Poszczególna szerokość kolumn jest ustalana na podstawie długości najdłuższego string'a w kolumnie, napisałem sobie do tego odpowiednią procedurę, ale nie wiem jak mógłbym dynamicznie ustawiać całą szerokość StringGrid, żeby nie było pustej przestrzeni. Może zrzut ekranu bardziej naświetli co mam na myśli. Dziękuję za odpowiedzi i sugestie.

MyHomeLibrary.png

2

Szerokość StringGrid to suma szerokości wszystkich jego kolumn + szerokość ScrollBar jeżeli jest widoczny:

uses
  LCLIntf, LCLType;

procedure TForm1.FormCreate(Sender: TObject);
var
  i, w: Integer;
  style: longint;
begin
  w := 0;
  for i := 0 to StringGrid1.ColCount - 1 do
    Inc(w, StringGrid1.CellRect(i, 0).Width + 1);
  StringGrid1.Width := w;
  //sprawdzamy czy jest widoczny pionowy scrollbar, i jeżeli tak to poszerzamy stringgrid o szerokość scrollbar
  style := GetWindowLong(StringGrid1.Handle, GWL_STYLE);
  if ((style and WS_VSCROLL) <> 0) then
    StringGrid1.Width := StringGrid1.Width + GetSystemMetrics(SM_CYHSCROLL);
end;

Ale myślę, że lepszym rozwiązaniem jest dostosowanie szerokości kolumn do szerokości StringGrid.

0

Ale myślę, że lepszym rozwiązaniem jest dostosowanie szerokości kolumn do szerokości StringGrid

Tego właśnie chcę uniknąć, chyba że da się dzielić napis w danej komórce GridString na kilka wierszy, żeby tytuł był cały widoczny.
W tej chwili mam tak, jak na screen'ach, ale brzydko to wygląda, przy wynikach wyszukiwania.
MyHomeLibraryV1.pngMyHomeLibraryV2.png

1
h4wierz napisał(a):

... chyba że da się dzielić napis w danej komórce GridString na kilka wierszy ...

Tutaj masz przykład wraz z ustawianiem automatycznej wysokości wiersza: https://forum.lazarus.freepascal.org/index.php/topic,35488.msg234781.html#msg234781

1 użytkowników online, w tym zalogowanych: 0, gości: 1