StringGrid - autodopasowanie wielkości komórek do tekstu

0

Jak przeszukać wszystkie komórki w StringGrid aby szerokość kolumny była równa jej najdłuższego łańcucha?

Zastosowanie czegoś takiego nie dało pożądanego efektu:

for w := 0 to StringGrid.RowCount - 1 do
  begin
    for k := 0 to StringGrid.ColCount - 1 do
      begin
         max := 0;
            if StringGrid.Cells[k, w] <> '' then
              begin
                 if max < StringGrid.Canvas.TextWidth(StringGrid.Cells[k, w]) then
                   max := StringGrid.Canvas.TextWidth(StringGrid.Cells[k, w]);
                   StringGrid.ColWidths[k] := 5 + max;
              end;
      end;
  end;

poprawiłem błędy w kodzie :P jakiś Chochlik drukarski się wkradł ;)

0

A to się w ogóle skompilowało??

W jaki sposób tworzymy pętle for w Pascalu?

Poza tym warunek:

max<=...

jest głupi z punktu widzenia optymalizacji. Zostaw samo <

[dopisane]

Aha. I jeszcze jest bezsensowne zwiększanie wielkości kolumny w pętli. Po każdym odczytcie zwiększasz. Po co, jak masz wszystko co trzeba w maxie?
Przypisz po odczycie wszystkich wierszy z kolumny dopiero. I naucz się debugować

0

Zrobiłem coś takiego:

max := 0;
for w := 0 to Wier.Count - 1 do
  begin
    for k := 0 to Kol.Count - 1 do
      begin
        if StringGrid.Cells[k, w] <> '' then
          begin
            if max < StringGrid.Canvas.TextWidth(StringGrid.Cells[k, w]) then
               max := StringGrid.Canvas.TextWidth(StringGrid.Cells[k, w]);             
          end;
        StringGrid.ColWidths[k] := 5 + max;
      end;
  end;

Ale wolał bym żeby każda kolumna była oddzielnie rozpatrywana.

0

Musisz zamienić pętle:

with StringGrid do
  for k := 0 to ColCount - 1 do
  begin
    max := 0;
    for w := 0 to RowCount - 1 do
      if Cells[k, w] <> '' then
        if max < Canvas.TextWidth(StringGrid.Cells[k, w]) then
          max := Canvas.TextWidth(StringGrid.Cells[k, w]);             
    ColWidths[k] := 5 + max;
  end;
0

Wielkie dzięki. :-)

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