Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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?

ausblenden 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);  // perfekt!
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;

// Aufruf:

if stringgrid1.rowcount > 1 then      // .Font.style ??
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Do 21.01.10 21:26 
ja, genau. Und
Danke erstmal

_________________
ut vires desint, tamen est laudanda voluntas
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Do 21.01.10 22:43 
-TextHeight
-DefaultRowHeight

ub60
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Fr 22.01.10 11:22 
recht zufrieden bin ich mit folgender Lösung (in einer Schleife):

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 user profile iconub60 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Fr 22.01.10 15:38 
Danke, Sebastian, ich hab's gerade herausgefunden! (Genau nach deiner Idee)

ausblenden 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;    // rh ist der Dummy


Gruß, Det

_________________
ut vires desint, tamen est laudanda voluntas
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 22.01.10 18:05 
Mit Dummy meinte ich einfach das: ;-)
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 22.01.10 18:27 
Hallo,

brauchst keine Schleife wenn alle Zeilen die gleiche Schrift haben:
ausblenden Delphi-Quelltext
1:
SG.DefaultRowHeight := SG.Canvas.TextHeight('Öh');					

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Fr 22.01.10 22:34 
Aha, noch einen drauf!
Danke, Detlef

_________________
ut vires desint, tamen est laudanda voluntas