Announcement

Collapse
No announcement yet.

DBGrid AutoColWidth

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DBGrid AutoColWidth

    hallo,<br>
    ich hab mir mal einige Komponenten angeschaut, die diese Eigenschaft besitzen,
    Columns[i].Width so zu setzen, dass das DBGrid ohne horizontale Scrollbar vollständig in einem Panel anzeigt.<br>
    Verstanden hab ich das aber irgendwie nicht so ganz...<br>
    kann mir mal jemand in Worten erklären, wie so ein Algorithmus aussehen muß?
    <br>
    danke

  • #2
    Das hängt davon ob wie sich die Spaltenbreiten des Grid's relativ zueinander verhalten sollen. Zwei häufig benutzte Wege sind:
    <li>alle Spalten werden relativ zueinander angepasst
    <li>eine Spalte, Letzte oder Erste, wird geändert alle anderen Spalten behalten ihre Breite bei.<br>

    Im zweiten Fall wird zuerst die Gesamtbreite der Spalten berechnet, dann die veränderliche Spaltenbreite abgezogen und die verbleibende Differenz zwischen allen Spaltenbreiten und der verfügbaren Gridbreite als neue Spaltenbreite benutzt. Also so:

    <pre>

    var
    Width,I: Integer;
    begin
    Width := 0;
    for I := 0 to Grid.Columns.Count -1 do
    Width := Width + Grid.Columns[I].Width;
    Width := Width - Grid.Columns[0].Width;
    Width := Grid.ClientWidth - Width;
    Grid.Columns[0].Width := Width;
    end;<br>

    Oben ist die Spalte 0 die veränderliche Spalte.<br>

    Der erste Weg verändert die Breite der Spalten im Verhältnis zu der Gesamtbreite aller Spalten.

    <pre>

    var
    I,Width: Integer;
    Ratio: Double;
    begin
    Width := 0;
    for I := 0 to Grid.Columns.Count -1 do
    Inc(Width, Grid.Columns[I].Width);
    Ratio := Grid.ClientWidth / Width;
    for I := 0 to Grid.ColumnCount -1 do
    Grid.Column[I].Width := Trunc(Grid.Columns[I].Width * Ratio);
    end;

    </pre>

    Beide Vorschläge oben sind als "Pseudocode" zu verstehen.<br>

    gruß Hage

    Comment

    Working...
    X