uses{...} Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
end;
{...}implementation{...}// Display text vertically in StringGrid cells // Vertikale Textausgabe in den Zellen eines StringGrid procedure StringGridRotateTextOut(Grid: TStringGrid; ARow, ACol: Integer; Rect: TRect;
Schriftart: string; Size: Integer; Color: TColor; Alignment: TAlignment);
var
lf: TLogFont;
tf: TFont;
begin// if the font is to big, resize it // wenn Schrift zu gro? dann anpassen if (Size > Grid.ColWidths[ACol] div 2) then
Size := Grid.ColWidths[ACol] div 2;
with Grid.Canvas dobegin// Replace the font // Font setzen
Font.Name := Schriftart;
Font.Size := Size;
Font.Color := Color;
tf := TFont.Create;
try
tf.Assign(Font);
GetObject(tf.Handle, SizeOf(lf), @lf);
lf.lfEscapement := 900;
lf.lfOrientation := 0;
tf.Handle := CreateFontIndirect(lf);
Font.Assign(tf);
finally
tf.Free;
end;
// fill the rectangle // Rechteck fullen
FillRect(Rect);
// Align text and write it // Text nach Ausrichtung ausgeben if Alignment = taLeftJustify then
TextRect(Rect, Rect.Left + 2,Rect.Bottom - 2,Grid.Cells[ACol, ARow]);
if Alignment = taCenter then
TextRect(Rect, Rect.Left + Grid.ColWidths[ACol] div 2 - Size +
Size div 3,Rect.Bottom - 2,Grid.Cells[ACol, ARow]);
if Alignment = taRightJustify then
TextRect(Rect, Rect.Right - Size - Size div 2 - 2,Rect.Bottom -
2,Grid.Cells[ACol, ARow]);
end;
end;
// 2. Alternative: Display text vertically in StringGrid cells // 2. Variante: Vertikale Textausgabe in den Zellen eines StringGrid procedure StringGridRotateTextOut2(Grid:TStringGrid;ARow,ACol:Integer;Rect:TRect;
Schriftart:String;Size:Integer;Color:TColor;Alignment:TAlignment);
var
NewFont, OldFont : Integer;
FontStyle, FontItalic, FontUnderline, FontStrikeout: Integer;
begin// if the font is to big, resize it // wenn Schrift zu gro? dann anpassen If (Size > Grid.ColWidths[ACol] DIV 2) Then
Size := Grid.ColWidths[ACol] DIV 2;
with Grid.Canvas dobegin// Set font // Font setzen If (fsBold IN Font.Style) Then
FontStyle := FW_BOLD
Else
FontStyle := FW_NORMAL;
If (fsItalic IN Font.Style) Then
FontItalic := 1
Else
FontItalic := 0;
If (fsUnderline IN Font.Style) Then
FontUnderline := 1
Else
FontUnderline := 0;
If (fsStrikeOut IN Font.Style) Then
FontStrikeout:=1
Else
FontStrikeout:=0;
Font.Color := Color;
NewFont := CreateFont(Size, 0, 900, 0, FontStyle, FontItalic,
FontUnderline, FontStrikeout, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH, PChar(Schriftart));
OldFont := SelectObject(Handle, NewFont);
// fill the rectangle // Rechteck fullen
FillRect(Rect);
// Write text depending on the alignment // Text nach Ausrichtung ausgeben If Alignment = taLeftJustify Then
TextRect(Rect,Rect.Left+2,Rect.Bottom-2,Grid.Cells[ACol,ARow]);
If Alignment = taCenter Then
TextRect(Rect,Rect.Left+Grid.ColWidths[ACol] DIV 2 - Size + Size DIV 3,
Rect.Bottom-2,Grid.Cells[ACol,ARow]);
If Alignment = taRightJustify Then
TextRect(Rect,Rect.Right-Size - Size DIV 2 - 2,Rect.Bottom-2,Grid.Cells[ACol,ARow]);
// Recreate reference to the old font // Referenz auf alten Font wiederherstellen
SelectObject(Handle, OldFont);
// Recreate reference to the new font // Referenz auf neuen Font loschen
DeleteObject(NewFont);
end;
end;
// Call the method in OnDrawCell // Methode im OnDrawCell aufrufen procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin// In the second column: Rotate Text by 90° and left align the text // Text um 90°gedreht ausgeben, linksbundig in der zweiten Spalte if ACol = 1 then
StringGridRotateTextOut(StringGrid1, ARow, ACol, Rect, "ARIAL",
12,clRed, taLeftJustify);
// In the third column: Center the text // Ausgabe zentriert in der dritten Spalte if ACol = 2 then
StringGridRotateTextOut(StringGrid1, ARow, ACol, Rect, "ARIAL", 12, clBlue, taCenter);
// In all other columns third row: right align the text // Ausgabe rechtsbundig in den restlichen Spalten if ACol > 2 then
StringGridRotateTextOut(StringGrid1, ARow, ACol, Rect, "ARIAL", 12,clGreen,
taRightJustify);
end;
end.
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Перевернуть текст в TStringGrid на 90 градусов", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!