Autor |
Beitrag |
D. Annies
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Do 21.01.10 20:14
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
_________________ ut vires desint, tamen est laudanda voluntas
|
|
ub60
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: 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 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Do 21.01.10 21:26
ja, genau. Und
Danke erstmal
_________________ ut vires desint, tamen est laudanda voluntas
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Do 21.01.10 21:32
So, jetzt habe ich deine Lösung eingearbeitet - SUPER!
Danke und Gruß, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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
_________________ ut vires desint, tamen est laudanda voluntas
|
|
ub60
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: Do 21.01.10 22:43
-TextHeight
-DefaultRowHeight
ub60
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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
_________________ ut vires desint, tamen est laudanda voluntas
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Fr 22.01.10 14:58
Danke erstmal, Sebsatian. (Ich habe bloß noch keine Ahnung, wie ich da vorgehe)
Gruß, Det
_________________ ut vires desint, tamen est laudanda voluntas
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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
_________________ ut vires desint, tamen est laudanda voluntas
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 22.01.10 18:05
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Fr 22.01.10 18:16
Da fall ich ja mal wieder aus den Socken, klingt Klasse, deine Idee!
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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'); |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Fr 22.01.10 22:34
Aha, noch einen drauf!
Danke, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|