Gnah Anchors hätte mir heut echt etwas arbeit erspart, da ich heut vormittag resizing programmiert habe *fg*
Zu den Columns :
Ich habs so gelöst : Mir zur Designzeit die Werte für die Breiten des Grids und der einzelnen Spalten aufgeschrieben und daraus einen Breitenfaktor errechnet. Das sieht dann bei mir so aus :
Delphi-Quellcode:
//columns im grid
iGridSize := DBGrid1.Width - 27; // 27 ist breite der vertikalen scrollbar
dblFaktor := 68/722;
DBGrid1.Columns.Items[0].Width := round(dblFaktor*iGridSize);
dblFaktor := 102/722;
DBGrid1.Columns.Items[1].Width := round(dblFaktor*iGridSize);
dblFaktor := 91/722;
DBGrid1.Columns.Items[2].Width := round(dblFaktor*iGridSize);
dblFaktor := 107/722;
DBGrid1.Columns.Items[3].Width := round(dblFaktor*iGridSize);
dblFaktor := 105/722;
DBGrid1.Columns.Items[4].Width := round(dblFaktor*iGridSize);
dblFaktor := 81/722;
DBGrid1.Columns.Items[5].Width := round(dblFaktor*iGridSize);
dblFaktor := 100/722;
DBGrid1.Columns.Items[6].Width := round(dblFaktor*iGridSize);
dblFaktor := 68/722;
DBGrid1.Columns.Items[7].Width := round(dblFaktor*iGridSize);
//rundungsfehler korrigieren
iTemp := 0;
for i:= 0 to DBGrid1.Columns.Count -1 do begin
iTemp := iTemp + DBGrid1.Columns.Items[i].Width;
end;
//gesamtbreite aller columns nach resize (iTemp) sollte gleichgross sein wie Gridbreite - Scrollbarbreite
iTemp := iGridSize - iTemp;
if not (itemp = 0) then
//abweichungen werden durch resizen der Column Zone ausgeglichen
DBGrid1.Columns.Items[1].Width := DBGrid1.Columns.Items[1].Width + iTemp;
Das mit den Rundungsfehlern kannste vermutlich weglassen, bei mir musste es nur sehr genau sein.
Das Resizen der Columns kannst auch vereinfachen indem du die Faktoren in ein Array packst oder so und dann (wie beim addieren unten) in einer Schleife die Columns einstellst.
Nur ich musste das schnell hinter mich bringen und hatte keine lust mir da was zu überlegen und habs dann so hingeschmiert 8)