Ähnliche Ansätze hatte ich auch schon gefunden und für mich entsprechend angepasst.
Basis:
Text im StringGrid ausrichten und die verschiedenen Source-Code-Beispiele hier aus dem Forum zum Anpassen der Höhe.
Ergebnis:
Delphi-Quellcode:
procedure StringGridAlignment(xGrid: TStringGrid; xRect: TRect; xCol, xRow: Integer;
xAlignment: TAlignment; xWordWrap: Boolean);
var
lTextOut: String;
lDrawRect: TRect;
const
cAlignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
cWordWraps: array[Boolean] of Word = (0, DT_WORDBREAK);
begin
xGrid.Canvas.FillRect(xRect);
lTextOut := xGrid.Cells[xCol, xRow];
if (Length(lTextOut) > 0) then
begin
//*** Zeilenhöhe durch Ausgabe in lokales TRect ermitteln.
lDrawRect := xRect;
DrawText(xGrid.Canvas.Handle, PChar(lTextOut), StrLen(PChar(lTextOut)), lDrawRect,
DT_CALCRECT or cAlignments[xAlignment] or cWordWraps[xWordWrap]);
//*** Text im Grid Ausgeben
DrawText(xGrid.Canvas.Handle, PChar(lTextOut), StrLen(PChar(lTextOut)), xRect,
cAlignments[xAlignment] or cWordWraps[xWordWrap]);
//*** Höhe der Grid-Zeile anpassen
if (lDrawRect.Bottom - lDrawRect.Top) > xGrid.RowHeights[xRow] then
xGrid.RowHeights[xRow] := (lDrawRect.Bottom - lDrawRect.Top);
end;
end;
Methode im OnDrawCell aufrufen:
Delphi-Quellcode:
if ACol = 2 then
StringGridAlignment(EinStringGrid, Rect, ACol, ARow, taLeftJustify, True);
if ACol = 1 then
StringGridAlignment(EinStringGrid, Rect, ACol, ARow, taCenter, False);
Hab das jetzt nicht ganz genau durchgetestet, sieht aber sehr funktionsfähig aus. Vielleicht hilft es dem einen oder anderen noch...
Das ist aber für mich noch nicht ausreichend, da der Editor wieder ohne Zeilenumbrüche angezeigt wird.
Vielleicht weiß ja sonst noch jemand einen Rat...
MfG
raller09