Wie kann man bei einer StringGrid-Komponente mehrzeiligen Text ausgeben?


Dazu muß man das Zeichnen der Zelleninhalte selber übernehmen. Zu diesem Zweck schreibt man eine Methode für das OnDrawCell-Ereignis des StringGrids. In dieser Methode kann man direkt auf das Ausgaberechteck der jeweiligen Zelle zugreifen, es wird in der Variablen "Rect" übergeben.

Für die Ausgabe von mehrzeiligem Text ist "DrawText" ist die Funktion der Wahl. Mit dem Parameter DT_CalcRect kann man die Größe des Ausgaberechtecks ermitteln, der Parameter DT_WordBreak sorgt für den Zeilenumbruch.

Hier mal ein paar Beispielzeilen:

var
  outRect : Rect;

Dimension des Ausgaberechtecks ermitteln (wird in outRect zurückgegeben):

  DrawText(Stringgrid1.Canvas.Handle,PCHar(SText),length(SText),outRect,DT_CalcRect or DT_WordBreak or DT_NoClip);

Text mehrzeilig und horizontal zentriert im Recteck outRect ausgeben:

  DrawText(Stringgrid1.Canvas.Handle,PChar(SText),length(SText),outRect,DT_Center or DT_WordBreak);

Text einzeilig und zentriert im Recteck outRect ausgeben:

  DrawText(Stringgrid1.Canvas.Handle,PChar(SText),length(SText),outRect,DT_VCenter or DT_Center or DT_SingleLine);
Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:

Wie kann ich in einer Grid-Komponente für jede Zelle einen anderen Hint ausgeben?
Wie kann ich bei einer Stringgrid nur bestimmte Zeilen auf Readonly setzen?
Wie kann ich ein Bild in eine Stringgrid zeichnen?


Delphi FAQ