11 Stimme

Lazarus: Mehrzeilige StringGrid Zellen

Frage von Gast | 13.02.2016 um 15:05

Der Inhalt einiger Zellen in meiner StringGrid ist so lang, dass die Breite der Spalte dafür nicht ausreichend ist. Das führt dazu, dass der Inhalt einfach abgeschnitten wird. 

Lieber hätte ich, wenn es stattdessen einen Zeilenumbruch gibt und der Inhalt der Zelle einfach in mehreren Zeilen angezeigt wird.

Wie kann man das machen? Ich habe in der TStringGrid keine WordWrap, WordBreak oder MultiLine-Eigenschaft gefunden.

AntwortenPositivNegativ
1Beste Antwort1 Stimme

Deine StringGrid hat das Event OnPrepareCanvas. Dieses wird für jede Zelle aufgerufen und hier kannst du den TextStyle für die Zellen steuern.

In deinem Fall würde das zum Beispiel so aussehen:

procedure TForm1.StringGrid1PrepareCanvas
  (Sender: TObject; aCol, aRow: Integer; 
  aState: TGridDrawState);
var
  ATextStyle: TTextStyle;
begin
  ATextStyle := StringGrid1.Canvas.TextStyle;
  ATextStyle.SingleLine := false;
  ATextStyle.Wordbreak := true;    
  StringGrid1.Canvas.TextStyle := ATextStyle;
end;

Hier setzen wir SingleLine auf FALSE und WordBreak auf TRUE wodurch der Text in der betreffenden Zelle mit Zeilenumbruch angezeigt wird.

Wie du siehst, werden als Parameter die Zeile und Spalte übergeben. Damit ist es möglich, unterschiedliche Eigenschaften für unterschiedliche Zellen zu definieren. Zum Beispiel so:

procedure TForm1.StringGrid1PrepareCanvas
  (Sender: TObject; aCol, aRow: Integer; 
  aState: TGridDrawState);
var
  ATextStyle: TTextStyle;
begin
  if aCol = 2 then begin
    ATextStyle := StringGrid1.Canvas.TextStyle;
    ATextStyle.SingleLine := false;
    ATextStyle.Wordbreak := true;    
    StringGrid1.Canvas.TextStyle := ATextStyle;
  end;
end;

Hier fragen wir ab, ob es die zweite Spalte ist und ändern die Eigenschaften nur dann. Den Zeilenumbruch gibt es damit dann nur in der zweiten Spalte während die anderen Spalten weiterhin das Standardverhalten zeigen.
13.02.2016 um 15:39

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

PHP: Eine E-Mail versenden

Tutorial | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.