Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStringGrid: Breite einer Spalte anpassen (fit to grid) (https://www.delphipraxis.net/127482-tstringgrid-breite-einer-spalte-anpassen-fit-grid.html)

hoika 14. Jan 2009 09:40


TStringGrid: Breite einer Spalte anpassen (fit to grid)
 
Hallo #,

besser konnte ich es nicht ausdrücken.
Was ich will.
Im Zuge eines Tests for MultiLine-Grids
möchte ich eine Spalte in der Breite genau so anpassen,
dass das Grid ohne Scrollbar (horizontal) angezeigt wird.

Genau diese eine Spalte wäre dann der Kandidat für MultiLine.

Der nachfolgende Code funktioniert.
aber die Konstante C_AddSpace habe ich jetzt per Trial/Error ausprobiert.

Delphi-Quellcode:
procedure Grid_FitGridColSize(theGrid: TStringGrid; const theCol: Integer);
const
  C_AddSpace = 3;
var
  iGridWidth   : Integer;
  iCol         : Integer;
  iSumColWidth : Integer;
  iDiffColWidth : Integer;
begin
  try
    iGridWidth:= theGrid.Width;

    iSumColWidth:= 0;
    for iCol:= 0 to theGrid.ColCount-1 do
    begin
      if iCol<>theCol then
      begin
        if theGrid.ColWidths[iCol]>0 then
        begin
          iSumColWidth:= iSumColWidth+theGrid.ColWidths[iCol];
         { space between the columns } 
          Inc(iSumColWidth, C_AddSpace);
        end;
      end;
    end;

    iDiffColWidth:= iGridWidth-iSumColWidth;
    if iDiffColWidth<0 then
    begin
      iDiffColWidth:= 10;
    end;

    theGrid.ColWidths[theCol]:= iDiffColWidth;
  except
  end;
end; { Grid_FitGridColSize }
Komme ich an diese 3 irgendwie anderes ran
über Grid-Funktionen ?


Danke


Heiko

taaktaak 14. Jan 2009 11:26

Re: TStringGrid: Breite einer Spalte anpassen (fit to grid)
 
Moin, Moin.
So recht kann ich die Zahl 3 nun nicht nachvollziehen, aber vom Grundsatz gehört zu jeder Spalte die Breite der vertikalen Linie (i.d.R.=1) bei n Spalten müssen wohl die Linien n+1 mal addiert werden. Du setzt die Summe der Spaltenbreite dann in Relation zur GridBreite, da muss auch der gesetzte BorderStyle zu berücksichtigen. Tja, und last but not least natürlich noch die ggf. vorhandene vertikale Scrollbar, die ja auch eine gewissen Breite einnimmt.

hoika 14. Jan 2009 11:34

Re: TStringGrid: Breite einer Spalte anpassen (fit to grid)
 
Hallo,

ich kann die 3 auch nicht nachvollziehen.
Bei 2 oder 1 wird ein horizontaler ScrollBar angezeigt.


Die 3 könnte natürlich auch Zufall sein,
in Abhängigkeit der Anzahl der Spalten.


Ich setze die Option mal als experimental ;)


Heiko

taaktaak 14. Jan 2009 11:54

Re: TStringGrid: Breite einer Spalte anpassen (fit to grid)
 
Ok,
aber auf jeden Fall musst du in die Berechnung die Linienbreite, den BorderStyle und die Scrollbar einbeziehen - sonst kann die Prozedur kein allgemeingültiges Ergebnis liefern!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz