Witam
Mam problem z automatycznym dopasowaniem szerokości kolumn do najszerszej wprowadzonej danej do StringGrida.
Problem jest dla mnie dość ciekawy (tym bardziej że wróciłem do programowania po 10 latach przerwy) i już go opisuję.
Wczytuję do StringGrid dane z pliku (w onCreate formy) i zaraz potem za pomocą pętli w pętli sprawdzam jakie szerokie są tam wpisane dane i dostosowuję szerokość do najszerszej z nich (+ jakiś mały margines).
Gdy wykonuję pętle tak po prostu to szerokość się zmienia ale jednak nie osiąga optymalnej szerokości i prawie zawsze jednak jest zbyt wąska.
Ale wystarczy że w pętli przejścia do następnej kolumny na końcu dam ShowMessage i wtedy szerokość jest dostosowana bardzo dobrze.
Kompletnie nie wiem o co chodzi.
Poniżej kod:
{automatyczne dopasowanie szerokości kolumn do najszerszej wartości}
for i := 0 to StringGrid1.ColCount-1 do {wybieram kolumnę}
begin
for j := 0 to StringGrid1.RowCount-1 do {sprzwdzam po kolei wiersze w kolumnie}
if StringGrid1.ColWidths[i] < 10 + StringGrid1.Canvas.TextWidth(StringGrid1.Cells[i,j]) then
StringGrid1.ColWidths[i] := 10 + StringGrid1.Canvas.TextWidth(StringGrid1.Cells[i,j]);
//showmessage('ok');
end;
Gdy odkomentuję ShowMessage dopasowanie działa, gdy jest zakomentowane - nie.
Ktoś ma pomysł dlaczego tak się dzieje i co zrobić żeby to zadziałało?
A może jakiś inny pomysł na to?
Opóźnienie wykonania pętli za pomocą sleep również nie działa (tak z ciekawości spróbowałem).
ps. Od razu mówię że robię to w Delphi 10.2 jeśli miało by to jakieś znaczenie
Invalidate
, jeśli chodzi o samo odmalowanie.