Hallo,
gibt es eine Möglichkeit die Höhe einer Titelzeile eines Stringgrid manuell festzulegen?
Ich möchte einen mehrzeiligen Text in der Titelzeile darstellen.
Das mehrzeilige, habe ich gelöst. Nur die Höhe passt sich nicht an.
Ich habe im Internet und in der Suche von diesem Forum leider nichts gefunden.
Danke.
Gruß
[gelöst] TStringGrid Titelzeilenhöhe
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
[gelöst] TStringGrid Titelzeilenhöhe
Zuletzt geändert von VB_Lazarus am So 7. Feb 2016, 16:53, insgesamt 1-mal geändert.
-
- Beiträge: 98
- Registriert: Di 4. Aug 2015, 15:29
- OS, Lazarus, FPC: Linux, Raspbian, Windows
- CPU-Target: 64/32 Bit
Re: TStringGrid Titelzeilenhöhe
Hallo VB_Lazarus,
vom Opa TCustomDrawGrid werden die Eigenschaften GridHeight und RowHeights nach TStringGrid vererbt.
Wenn Du die betreffende Zeile auswählst und dann die Eigenschaft auf den gewünschten Wert setzt, dann sollte es funktionieren.
Beste Grüße
Andreas
vom Opa TCustomDrawGrid werden die Eigenschaften GridHeight und RowHeights nach TStringGrid vererbt.
Wenn Du die betreffende Zeile auswählst und dann die Eigenschaft auf den gewünschten Wert setzt, dann sollte es funktionieren.
Beste Grüße
Andreas
Zuletzt geändert von AndreasMR am So 7. Feb 2016, 17:55, insgesamt 1-mal geändert.
Ubuntu 14.04 LTS / Raspbian / Windows: Lazarus ab 0.9 bis 3.0
Re: TStringGrid Titelzeilenhöhe
Vielleich willst du noch wissen, wie die Höhe der Titelzeile anzusetzen ist? Immerhin gibt es kein "AutoRowHeights".
Code: Alles auswählen
uses
LCLIntf, LCLType, Math;
function CalcWrappedTextHeight(ACanvas: TCanvas; const AText: String; AWidth: Integer): integer;
var
R: TRect;
begin
R := Rect(0, 0, AWidth, 0);
LCLIntf.DrawText(ACanvas.Handle, PChar(AText), Length(AText), R, DT_WORDBREAK or DT_CALCRECT);
Result := R.Bottom - R.Top;
end;
procedure AutoTitleRowHeight(AGrid: TStringGrid);
var
c, w, h : Integer;
begin
h := AGrid.RowHeights[0];
for c := 0 to AGrid.ColCount-1 do
begin
with AGrid.CellRect(c, 0) do w := Right - Left;
h := Max(h, CalcWrappedTextHeight(AGrid.Canvas, AGrid.Cells[c, 0], w) + 2*constCellPadding);
end;
AGrid.RowHeights[0] := h;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1, 0] := 'Zeile 1'#13'Zeile 2';
StringGrid1.Cells[2, 0] := 'Test';
StringGrid1.Cells[3, 0] := 'Zeile 1'#13'Zeile 3'#13'Zeile 3';
AutoTitleRowHeight(StringGrid1);
end;
{ Event handler für OnPrepareCanvas, damit der Zeilenumbruch aktiviert wird. }
procedure TForm1.StringGrid1PrepareCanvas(sender: TObject; aCol, aRow: Integer;
aState: TGridDrawState);
var
ts: TTextStyle;
begin
if (aRow = 0) then
begin
ts := StringGrid1.Canvas.TextStyle;
ts.WordBreak := True;
ts.SingleLine := false;
StringGrid1.Canvas.TextStyle := ts;
end;
end;
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: TStringGrid Titelzeilenhöhe
Danke, an euch beiden.
Die Lösung von wp_xyz war genau das, was ich gesucht habe.
Perfekt.
Die Lösung von wp_xyz war genau das, was ich gesucht habe.
Perfekt.