AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Spalten automatisch an Tabellenbreite anpassen
Thema durchsuchen
Ansicht
Themen-Optionen

Spalten automatisch an Tabellenbreite anpassen

Ein Thema von DataNess · begonnen am 12. Jun 2007 · letzter Beitrag vom 17. Feb 2016
Antwort Antwort
DataNess

Registriert seit: 11. Jun 2007
25 Beiträge
 
Delphi 7 Personal
 
#1

Spalten automatisch an Tabellenbreite anpassen

  Alt 12. Jun 2007, 13:31
Hallo,

Ich habe eine Tabelle die immer die gesammte Breite des Formulars benutzt.
Doch leider passen sich die einzelnen Spalten nicht der Tabellenbreite an.
Nun meine Fage: gibt es irgendeine Einstellung oder Funktion, die das übernimmt, oder muss ich bei einer Größenänderung des Fensters für jede Spalte eine neue Breite berechnen ?

Danke im vorraus
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Spalten automatisch an Tabellenbreite anpassen

  Alt 12. Jun 2007, 13:45
Hallo,

hab ich mal irgendwo gefunden

Delphi-Quellcode:
procedure TForm1.AutoSizeGridColumn(Grid: TStringGrid; column, min, max: Integer);
    { Set for max and min some minimal/maximial Values}
    { Bei max and min kann eine Minimal- resp. Maximalbreite angegeben werden}
  var
    i: Integer;
    temp: Integer;
    tempmax: Integer;
  begin
    tempmax := 0;
    for i := 0 to (Grid.RowCount - 1) do
    begin
      temp := Grid.Canvas.TextWidth(Grid.cells[column, i]);
      if temp > tempmax then tempmax := temp;
      if tempmax > max then
      begin
        tempmax := max;
        break;
      end;
    end;
    if tempmax < min then tempmax := min;
    Grid.ColWidths[column] := tempmax + Grid.GridLineWidth + 3;
  end;
Viel Spaß damit
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
DataNess

Registriert seit: 11. Jun 2007
25 Beiträge
 
Delphi 7 Personal
 
#3

Re: Spalten automatisch an Tabellenbreite anpassen

  Alt 12. Jun 2007, 14:16
Hallo matashen,

ist ein guter Ansatz, aber hier werden die Zellen an die Inhalte in den Zellen angepasst, aber nicht an die Tabellenbreite.

Danke trotzdem
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Spalten automatisch an Tabellenbreite anpassen

  Alt 12. Jun 2007, 15:07
Im Resize-Ereignis des Formulares (oder des Grids, wenn es denn eins hat), machst Du Folgendes:

Sei W[i] die Breite der Spalte #i, Sum(W) die Gesamtbreite aller Spalten und GridWidth die Breite des Gitters.

Dann sind D = GridWidth-Sum(W) Pixel auf die einzelnen Spaltenbreiten W[i] zu verteilen, und zwar am Besten gewichtet:

Code:
  W[i] := W[i] + D*W[i]/Sum(W)
Da wir mit ganzen Zahlen hantieren, ist das nicht ganz so einfach, aber im Prinzip sollte es so gehen:

Delphi-Quellcode:
Procedure ResizeGrid (aGrid : TMyGrid);
Var
  Sgn, I, SumW, D, D0, Dx : Integer;

Begin
// Summe aller Spaltenbreiten ermitteln
  SumW := 0;
  For i:=0 To aGrid.ColumnCount - 1 do
    SumW := SumW + aGrid.Columns[i].Width;

// D pixel sind zu verteilen
  D := aGrid.Width - SumW;
  If D >= 0 Then S:= 1 Else S:= -1;
  D0 := D;
  For i:=0 To aGrid.ColumnCount - 1 do Begin
    Dx := D0 * aGrid.Columns[i].Width/SumW;
// Dx ist der Anzeil für Spalte #i, aber mindestens ein Pixel
    If Dx = 0 Then Dx := S;
// und höchstens die noch verbleibenden Pixel.
    If Abs(Dx) > Abs(D) Then Dx := D;
//Breite der Spalte #i anpassen
    aGrid.Columns[i].Width := aGrid.Columns[i].Width + Dx;
// und verbleibende Pixel berechnen
    D := D - Dx;
  End;
End;
Hingerotzt, ungetestet und basiert auf einem fiktiven Grid. Die Eigenschaften (Spaltenbreite, Anzahl) also noch anpassen. Es sollte so eigentlich prinzipiell funktionieren.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
joehd

Registriert seit: 8. Okt 2008
Ort: Heidelberg
107 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Spalten automatisch an Tabellenbreite anpassen

  Alt 17. Feb 2016, 10:00
Nur so das es auch komplett und fertig ist habe ich das mal überarbeitet und eine finale Version eingestellt. Es Passt zwar die Spalten nicht optimal in die Tabellenbreite aber es überarbeitet die Breite je nach Breite der Tabelle. Man könnte ggf noch die Spaltenbreiten optimal auf die Tabellenbreite anpassen. Aber das so hat mir gereicht.
Grüße Joe
Delphi-Quellcode:

Procedure ResizeGrid (aGrid : Tstringgrid);
Var
  Sgn,S, I, SumW, D, D0, Dx : Integer;

Begin
// Summe aller Spaltenbreiten ermitteln
  SumW := 0;
  For i:=0 To aGrid.ColCount - 1 do
    SumW := SumW + aGrid.ColWidths[i];

// D pixel sind zu verteilen
  D := aGrid.Width - SumW;
  If D >= 0 Then S:= 1 Else S:= -1;
  D0 := D;
  For i:=0 To aGrid.Colcount - 1 do Begin
    Dx := D0 * aGrid.ColWidths[i] div SumW;
// Dx ist der Anzeil für Spalte #i, aber mindestens ein Pixel
    If Dx = 0 Then Dx := S;
// und höchstens die noch verbleibenden Pixel.
    If Abs(Dx) > Abs(D) Then Dx := D;
//Breite der Spalte #i anpassen
    aGrid.ColWidths[i] := aGrid.ColWidths[i] + Dx;
// und verbleibende Pixel berechnen
    D := D - Dx;
  End;
End;
joe
immer wenn ich was suche finde ich es hier komisch oder ?
Arbeite mit D3 D5 D2007 DXE Prof
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 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