nochmal TStringGrid [gelöst]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DAP
Beiträge: 55
Registriert: Sa 15. Jan 2011, 00:14
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

nochmal TStringGrid [gelöst]

Beitrag von DAP »

Hallo,

wie kann man einen Titel des TColumn eines TStringGrid mehrzeilig
darstellen lassen. In den restlichen Zellen verwende ich immer
SingleLine := false in PrepareCanvas, aber bei dem Titel geht
das leider nicht.
Zuletzt geändert von DAP am Sa 22. Mär 2014, 18:56, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 5142
Registriert: Fr 8. Apr 2011, 09:01

Re: nochmal TStringGrid

Beitrag von wp_xyz »

Dieser Code zeigt bei mir mehrzeiligen Text an, auch beim Titel. Allerdings müssen bereits die NewLine-Zeichen vorhanden sein, das Grid macht keinen automatischen Umbruch. Und die Zeilenhöhe muss entsprechend groß sein, sonst sieht man nur die 1. Zeile. In dem Beispiel stelle ich die Optionen für variierbare Zeilenhöhen und Spaltenbreiten - warum gibt es eigentlich kein goFixedRowSizing?

Code: Alles auswählen

 
procedure TForm1.StringGrid1PrepareCanvas(sender: TObject; aCol, aRow: Integer;
  aState: TGridDrawState);
var
  ts: TTextStyle;
begin
  ts := StringGrid1.Canvas.TextStyle;
  ts.SingleLine := false;
  StringGrid1.Canvas.TextStyle := ts;
  StringGrid1.Options := StringGrid1.Options + [goColSizing, goRowSizing, goFixedColSizing];
  StringGrid1.DefaultRowHeight := 48;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[1, 0] := 'Das'#13'ist'#13'mehrzeilig.';
  StringGrid1.Cells[1, 1] := 'Das'#13'ist'#13'mehrzeilig.';
end;

DAP
Beiträge: 55
Registriert: Sa 15. Jan 2011, 00:14
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: nochmal TStringGrid

Beitrag von DAP »

wp_xyz, wenn Du Deinen Code aber auf ein Grid mit
eingefügten TColumn anwendest, dann wird die Titelzelle
nicht mehrzeilig. Der Titel wird wahrscheinlich nach
der Zelle überzeichnet.

wp_xyz
Beiträge: 5142
Registriert: Fr 8. Apr 2011, 09:01

Re: nochmal TStringGrid

Beitrag von wp_xyz »

Nein, ich hatte es erfolgreich auch mit eingefügter Column ausprobiert. Das FormCreate war dann

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Columns[0].Title.Caption := 'Das'#13'ist'#13'mehrzeilig.';
  StringGrid1.Cells[1, 1] := 'Das'#13'ist'#13'mehrzeilig.';
end;

DAP
Beiträge: 55
Registriert: Sa 15. Jan 2011, 00:14
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: nochmal TStringGrid

Beitrag von DAP »

Sorry, das war natürlich mein Fehler, ich habe der ersten Zelle und nicht
dem Titel den zweizeiligen Text zugewiesen.

wp_xyz, vielen Dank für die schnelle und professionelle Hilfe.

Kann man eigentlich irgendwie den Zeilenumbruch im Titeleditor zur
Designzeit eingeben?

wp_xyz
Beiträge: 5142
Registriert: Fr 8. Apr 2011, 09:01

Re: nochmal TStringGrid

Beitrag von wp_xyz »

Kann man eigentlich irgendwie den Zeilenumbruch im Titeleditor zur Designzeit eingeben?
Eigentlich nicht. Aber wie ich gesehen habe, ist es einfach, das einzurichten. Ich habe einen Patch geschrieben und unter http://mantis.freepascal.org/view.php?id=25902 beim BugTracker eingereicht. Zur weiteren Erleichterung gibt es für TGridColumnTitle eine neue Eigenschaft MultiLine, so dass man sich deswegen nicht mehr mit den OnPrepareCanvas-Event befassen muss.

Vielleicht suche ich jetzt, wie man die Option goFixedRowSizing realisieren kann...

DAP
Beiträge: 55
Registriert: Sa 15. Jan 2011, 00:14
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: nochmal TStringGrid

Beitrag von DAP »

damit ist die Frage mehr als umfassend beantwortet

Antworten