Spaltenbreite optimal automatisch einstellen
-
- 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
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 ?
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 ?
- 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
Hercules hat geschrieben:Hat jemand sowas schonmal gemacht ?
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).
-
- 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
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 ?
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 ?
-
- 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
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.
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
-
- 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
Hallo MmVisual,
ich glaube, damit kann ich was anfangen.
Danke an Dich und an af0815.
Ich wünsche Euch ein schönes Weihnachtsfest.
ich glaube, damit kann ich was anfangen.
Danke an Dich und an af0815.
Ich wünsche Euch ein schönes Weihnachtsfest.
-
- 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
Wie wärs mit wäre doch ein Stück weit einfacher. TCustomStringGrid bringt ebenfalls eine fertige Methode dafür mit.
Code: Alles auswählen
DBGrid1.Options := DBGrid1.Options + [dgAutoSizeColumns];
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- 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
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).
-
- 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
Hallo Socke, ich glaub ich hatte Tomaten auf den Augen.....
af0815 hat recht wieder was dazugelernt.
Danke !!!!
af0815 hat recht wieder was dazugelernt.
Danke !!!!