Also eine pixelgenaue Berechnung der Breiten habe ich bereits gemacht, wobei ich aber die vertikale Scrollbar nicht beachtet habe:
Delphi-Quellcode:
gridProdukte.ColCount := 5;
gridProdukte.RowCount := 2;
gridProdukte.DefaultColWidth := 100;
gridProdukte.ColWidths[0] := 180;
gridProdukte.ColWidths[1] := 150;
gridProdukte.ColWidths[3] := 60;
Benutze doch bitte statt
code zur Anzeige von Delphi-Code das Wort
delphi.
Die width-Größe steht auf 590, somit müsste es genau hinkommen.
Von welcher Width-Größe schreibst du hier? gridProdukte.Width oder gridProdukte.ClientWidth? Letzteres ist maßgebend.
Ich weiß nicht, was Delphi da abzieht, aber sogar ohne jegliche Scrollbars und bei absolut genauer Größe hüpft das Teil zur Seite (siehe Bild).
Delphi zieht nicht irgend was ab, sondern du tust das. Delphi macht genau das, was du in den Code reinschreibst. Das, was du nicht reinschreibst, wird auch nicht ausgeführt. Bei mir "hüpft" nichts zur Seite, wenn ich das nicht will.
Stelle ich die Breite etwas größer, so verschiebt es sich nicht, jedoch hat man dann einen hässlichen Rand.
Und hier hast du auch bereits die Lösung:
Etwas breiter hinterläßt einen Rand, etwas schmäler reduziert den Rand.
Wäre es nicht irgendwie möglich die Breite der letzten Spalte (gridProdukte.ColWidths[4]) automatisch auf die Größe des Rahmens anzupassen, also auch die vertikale Scrollbar zu berücksichtigen?
Wenn alle Zeilen im StringGrid sichtbar sind, hast du natürlich keine vertikale Scrollbar (vSb) und einen Rand. Du könntest z.B. überprüfen, ab wievielen Zeilen die vSb erscheint und daraufhin eine Spalte um diesen Betrag verringern. Bei mir sind das glaub ich 24 Pixel, mußt du bei dir aber selber mal ausrechnen.
Edit: Die horizontale Scrollbar ändert nichts an der Tatsache, dass die Spalten so verschoben werden und es sieht auch nicht allzu schön aus, finde ich ^^
Das hat auch keiner behauptet!