Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Gridbreite passt sich nicht an (?)
D. Annies - Do 21.01.10 20:14
Titel: Gridbreite passt sich nicht an (?)
Hi, Delpher,
mit dem folgenden Code lege ich die Colbreite und die Stringgridbreite fest.
ich rufe den Code auf, nach einem Fontdialog-Aufruf. Wenn ich die Schriftgröße geändert habe, passt sich das SG aber nicht an - warum, bzw. was muss ich ändern?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.Gridbreite(SG:TStringgrid); var n, k, cw : integer; begin SG.Width := 30; for n := 0 to SG.colcount -1 do begin cw := 0; for k := 0 to SG.rowcount -1 do begin if SG.canvas.textwidth(SG.cells[n,k]) > cw then cw := SG.canvas.textwidth(SG.cells[n,k]); end; SG.Colwidths[n] := cw + 8; SG.Width := SG.Width + SG.Colwidths[n]; end; SG.Width := SG.Width + 20; end;
if stringgrid1.rowcount > 1 then begin if form2.FontDialog1.execute then stringgrid1.Font := form2.FontDialog1.Font; gridbreite(stringgrid1); end |
Danke und Gruß,
Detlef
ub60 - Do 21.01.10 20:51
Du musst den Font zusätzlich in SG.Canvas setzen, dann funzt es. SG.Font tut dies nicht automatisch.
ub60
PS: Wozu die +20 am Ende? Für die Scrollbar?
D. Annies - Do 21.01.10 21:26
ja, genau. Und
Danke erstmal
D. Annies - Do 21.01.10 21:32
So, jetzt habe ich deine Lösung eingearbeitet - SUPER!
Danke und Gruß, Detlef
D. Annies - Do 21.01.10 22:04
Eine "Kleinigkeit" noch - die Zellenhöhe müsste bei großen Schriftarten auch noch angepasst werden - wo muss ich denn da "grabbeln"?
Detlef
ub60 - Do 21.01.10 22:43
-TextHeight
-DefaultRowHeight
ub60
D. Annies - Fr 22.01.10 11:22
recht zufrieden bin ich mit folgender Lösung (in einer Schleife):
Delphi-Quelltext
1: 2:
| for k := 0 to SG.rowcount-1 do SG.RowHeights[k] := form2.FontDialog1.Font.Size *3; |
So long, Detlef
jaenicke - Fr 22.01.10 12:47
Das funktioniert aber nicht zuverlässig. Meistens sind die Schriftgrößen zwar ähnlich bei ähnlichen Größenwerten, aber es gibt auch Schriftarten, bei denen das nicht so ist.
Deshalb wäre es schon sinnvoller wie
ub60 geschrieben hatte die Höhe eines Textes tatsächlich zu ermitteln statt sich darauf zu verlassen, dass Size * 3 in etwa hinkommt. Funktionieren sollte aber auch diese Annahme meistens, weil die Schriftart vermutlich immer eine einigermaßen übliche sein wird. ;-)
D. Annies - Fr 22.01.10 14:58
Danke erstmal, Sebsatian. (Ich habe bloß noch keine Ahnung, wie ich da vorgehe)
Gruß, Det
jaenicke - Fr 22.01.10 15:01
TextWidth hast du ja schon benutzt, genauso kannst du TextHeight nehmen. Der Einfachheit halber kannst du einen Dummytext zur Höhenbestimmung nehmen, denn es geht ja nur darum abzuschätzen wie hoch ca. die Schrift allgemein mit der Schriftart ist.
D. Annies - Fr 22.01.10 15:38
Danke, Sebastian, ich hab's gerade herausgefunden! (Genau nach deiner Idee)
Delphi-Quelltext
1: 2:
| if SG.Canvas.TextHeight(SG.Cells[n,k])> rh then rh := SG.canvas.TextHeight(SG.cells[n,k]); SG.RowHeights[k] := rh + 4; |
Gruß, Det
jaenicke - Fr 22.01.10 18:05
Mit Dummy meinte ich einfach das: ;-)
Delphi-Quelltext
1: 2: 3:
| DummyHeight := SG.Canvas.TextHeight('Äj'); for ... SG.RowHeights[k] := DummyHeight; |
Denn mit dem Umlaut und dem j hast du die möglichen Abweichungen nach oben und unten, und anders als bei der Breite wird es andere Abweichungen ja kaum geben, so dass man nicht jede Zeile einzeln betrachten muss. ;-)
D. Annies - Fr 22.01.10 18:16
Da fall ich ja mal wieder aus den Socken, klingt Klasse, deine Idee!
Detlef
Lannes - Fr 22.01.10 18:27
Hallo,
brauchst keine Schleife wenn alle Zeilen die gleiche Schrift haben:
Delphi-Quelltext
1:
| SG.DefaultRowHeight := SG.Canvas.TextHeight('Öh'); |
D. Annies - Fr 22.01.10 22:34
Aha, noch einen drauf!
Danke, Detlef
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!