Announcement

Collapse
No announcement yet.

variable dbgrid-spalten, geht das?

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

  • variable dbgrid-spalten, geht das?

    hallo,
    <br><br>
    ich habe auf einem grössenveränderbaren formular ein dbgrid platziert.<br>
    nun möchte ich, das wenn man das formular z. b. grösser macht, nicht nur<br>
    das dbgrid (im ganzen), sondern auch die einzelnen spalten im entsprechenden verhältnis<br>
    grösser werden (skallieren).
    wie kann man so etwas realiseren?<br>
    für tips bin ich wie immer sehr dankbar.<br>
    <br>
    mfg
    <br>
    andik

  • #2
    Ich hatte einmal eine ähnliche Fragestellung. Dabei sollte die Spaltenbreite bei unterschiedlicher Auflösung des Bildschirmes skaliert werden. Hab's mit folgender Routine gelöst, die im OnCreateEreignis des Formulars aufgerufen wird. fHWidth ist dabei die horiz. Bildschirmauflösung, die bei der Entwicklung des Formulars des Formulars verwendet wurde (alse z.B. 800). Vielleicht kann man das ja für die gewünschten Zwecke modifizieren.

    procedure SetFormGridSize( Frm: TForm; fHWidth : integer );
    var
    i : integer;
    j : integer;
    begin
    for i := 0 to Frm.ComponentCount - 1 do
    begin
    if Frm.Components[i] is TDBGrid then
    begin
    with (Frm.Components[i] as TDBGrid) do
    begin
    for j := 0 to Columns.Count - 1 do
    Columns[j].Width := ( Columns[j].Width * Screen.Width div fHWidth );
    end;
    end;
    end;
    end

    Comment


    • #3
      Hi Andik,

      eine einfach Skalierung aus alter und neuer Größe funktioniert wegen der kleinen Schritte und daraus resultierenden erheblichen Rundungsfehlern nicht. Du mußt Dir für die Skalierung also auf alle Fälle die Originalbreite der Spalten merken:<br>
      <br>
      procedure TForm1.FormResize(Sender: TObject);<br>
      var<br>
      ScalX : Real;<br>
      I: Integer;<br>
      begin<br>
      ScalX := Width / FOldG;<br>
      with DBGrid1.Columns do for I := 0 to Count - 1 do<br>
      begin<br>
      Items[I].Width := Trunc(FOldW[I] * ScalX);<br>
      end;<br>
      end;<br>
      <br>
      procedure TForm1.FormCreate(Sender: TObject);<br>
      var<br>
      I: Integer;<br>
      begin<br>
      FOldG := Width;<br>
      with DBGrid1.Columns do for I := 0 to Count - 1 do<br>
      begin<br>
      FOldW[I] := Items[I].Width;<br>
      end;<br>
      end;<br>
      <br>
      FOldG ist dabei eine Variable vom Typ Integer und FOldW ein array of Integer (zu dem array gibt es bestimmt eine elegantere Lösung, aber das ging am schnellsten ;-)

      Gruß Fal
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        hallo,
        <br>
        <br>
        vielen dank für eure tips, haben mir sehr geholfen. <br>
        schade dass ein grid kein resize-event besitzt, dann<br>
        könnte man doch voll einfach eine kompo bauen, die das <br>
        bereits kann.<br>
        nochmal danke.<br>
        mfg<br>
        andi

        Comment

        Working...
        X