Dostosowanie szerokości komórki DBGrid do zawartości

0

Witam jak dostosować szerokość kolumny do najszerszej wartości jej wiersza w komponencie DBGrid z zakładki Data Controls, ponieważ domyślnie komponent robi to bardzo niezgrabnie tj. jedna kolumna jest szersza niż być powinna inna zaś za waską. Napisałem kod który to robi w miarę sprawnie, niestety nie robi tego w tle tylko na oczach użytkownika tj. przemiszcza kursor po każdej komórce i aktywuje jego focus co przy dużej ilości danych trwa kilka sekund i jest frustrujące, chodzi mi o to żeby robił to szybko i w tle tak aby użytkownik dostał idealnie dopasowaną tabelę do danych w niej zawartych.

Obecny nietrafiony kod:

for x:=0 to  dbgrid1.Columns.Count-1 do
begin
dbgrid1.Columns[x].Width:=0;
Zquery1.First;
while not Zquery1.Eof do
begin
if dbgrid1.Canvas.TextWidth(Zquery1.Fields[x].Text)+10 > dbgrid1.Columns[x].Width then dbgrid1.Columns[x].Width:= dbgrid1.Canvas.TextWidth(Zquery1.Fields[x].Text)+10;
Zquery1.Next;
end;
end;

Jak widać próbowałem odwołać się głębiej tz. do bezpośrednio otrzymanych danych z bazy w komponencie query, jednak powiązanie jest na tyle silne, iż mimo to kursor wizualnie przesuwa się po tabeli, po każdym wierszu kolumny.

0

a próbowałeś przed tą zmianą ukryć DBGrida (visible na false) a na końcu procedury go pokazać? Może wtedy będzie wszystko działać szybciej i to "mrugnięcie" nie będzie zauważalne...

0

Pomysł na pozór bardzo nieprofesjonalny to jak się okazuje skuteczny i można go stylowo zaadaptować.
Podoba mi się, a człowiek szukał kombinował, męczył się z ręcznym rysowanie komórki - czasami prymitywne rozwiązanie ładniej wygląda niż produkowanie dziesiątek zbędnego wysublimowanego kodu.

0

...lub też bez żadnego ukrywania komponentu tylko NORMALNIE:

http://delphi.about.com/od/usedbvcl/l/aa050404a.htm

0

Niepotrzebnie kombinujecie.
Przed pętlą daj:

ZQuery.disableControls;

a po pętli:

ZQuery.EnableControls;

A bardziej elegancko byłoby dodatkowo z użyciem bookmarków

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