Spaltenbreite optimal automatisch einstellen

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Spaltenbreite optimal automatisch einstellen

Beitrag von Hercules »

Hallo an Alle,
ich habe mal wieder eine heikle Frage, aber vielleicht hat ja schon mal jemand so ein Problem gelöst.
Ich habe eine Datenbank mit mehreren Spalten automatisch aus einer Textdatei gefüllt und möchte
am Ende alle Spaltenbreiten an den größten Text einer Spalte anpassen (ähnlich wie bei EXCEL Saltenbreite optimal).
Dazu verwende ich ein DBGrid, programmiert ist das ganze natürlich mit Lazarus.
Hat jemand sowas schonmal gemacht ? :idea: :?:

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6219
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Spaltenbreite optimal automatisch einstellen

Beitrag von af0815 »

Hercules hat geschrieben:Hat jemand sowas schonmal gemacht ? :idea: :?:

Ja, den längsten Text heraussuchen und dann die Textbreite berechen lassen. Ich finde mein Beispiel nicht, ich habe mir das aber aus den Sourcen von einem Textfeld herausgesucht, wie das sich intern errechnet wie breit es ist. Es war nicht allzu kompliziert.

Edit: TCustomLabel.CalculateSize in StdCtrls ist IMHO das Beispiel. Es zeichnet mal den Text in ein Rechteck um zu sehen, wie groß das Ganze ist.

Man darf aber eines nicht vergessen, das die Buchstaben eine unterschiedliche Breite (und Höhe) haben. der Buchstabe 'X' ist breiter als ein 'l', das kann auf die Spaltenbreite auswirkungen haben. Ich habe daher einen String mit den breitesten Zeichen gemacht und den für die Berechnung herangezogen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Spaltenbreite optimal automatisch einstellen

Beitrag von Hercules »

Hallo af0815,
vielen Dank für Deine schnelle Antwort. Was ich noch nicht so richtig
verstanden habe ist:
Edit: TCustomLabel.CalculateSize in StdCtrls ist IMHO das Beispiel.
Ist das die Stelle wo ich ein Beispiel finde ?

MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Spaltenbreite optimal automatisch einstellen

Beitrag von MmVisual »

So geht's:

Alle Datensätze durchlaufen, bei jedem Datensatz:

iMax := 0;

While alle Zeilen
i := DBGrid1.Canvas.TextWidth(<Textzeile Datensatz>);
If i > iMax Then iMax := i;
Next Zeile

Jetzt hat iMax die Anzahl Pixel. und muss umgerechnet werden in Character-Breite:

iCharacter := iMax Div (DBGrid1.Canvas.TextWidth('MX') Div 2);

Nun kann die Spalte mit der Variable iCharacter breit gemacht werden.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Spaltenbreite optimal automatisch einstellen

Beitrag von Hercules »

Hallo MmVisual,
ich glaube, damit kann ich was anfangen. :D
Danke an Dich und an af0815.
Ich wünsche Euch ein schönes Weihnachtsfest. :!:

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Spaltenbreite optimal automatisch einstellen

Beitrag von Socke »

Wie wärs mit

Code: Alles auswählen

DBGrid1.Options := DBGrid1.Options + [dgAutoSizeColumns];
wäre doch ein Stück weit einfacher. TCustomStringGrid bringt ebenfalls eine fertige Methode dafür mit.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6219
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Spaltenbreite optimal automatisch einstellen

Beitrag von af0815 »

Socke hat geschrieben:wäre doch ein Stück weit einfacher

Mir fällt nur ein: Das haben wir schon immer so gemacht, bzw. sieht man den Wald vor lauter Bäumen nicht.

Auch was dazugelernt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Spaltenbreite optimal automatisch einstellen

Beitrag von Hercules »

Hallo Socke, ich glaub ich hatte Tomaten auf den Augen..... :oops:
af0815 hat recht wieder was dazugelernt.
Danke !!!!

Antworten