StringGrid Text vertikal ausgeben |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 30.11.2011 |
Folgende Methode zeigt, wie man Text in StringGrid-Zellen vertikal, also von unten nach oben, ausgeben kann. Aufgerufen wird die Methode StringGridRotateTextOut im OnDrawCell-Ereignis von TStringGrid (s. Beispielaufruf ganz unten).
//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
//wenn Schrift zu groß, dann anpassen
if (Size > Grid.ColWidths[ACol] div 2) then
Size := Grid.ColWidths[ACol] div 2;
with Grid.Canvas do
begin
//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;
//Rechteck füllen
FillRect(Rect);
//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;
//Methode im OnDrawCell aufrufen
procedure TForm1.StringGridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
//Text um 90°gedreht ausgeben, linksbündig in der ersten Spalte
if ACol = 0 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect, 'ARIAL', 12, clRed, taLeftJustify);
//Ausgabe zentriert in der zweiten Spalte
if ACol = 1 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect, 'ARIAL', 12, clBlue, taCenter);
//Ausgabe rechtsbündig in den restlichen Spalten
if ACol > 1 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect, 'ARIAL', 12, clGreen,
taRightJustify);
end;
procedure StringGridRotateTextOut(Grid: TStringGrid; ARow, ACol: Integer; Rect: TRect;
Schriftart: string; Size: Integer; Color: TColor; Alignment: TAlignment);
var
lf: TLogFont;
tf: TFont;
begin
//wenn Schrift zu groß, dann anpassen
if (Size > Grid.ColWidths[ACol] div 2) then
Size := Grid.ColWidths[ACol] div 2;
with Grid.Canvas do
begin
//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;
//Rechteck füllen
FillRect(Rect);
//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;
//Methode im OnDrawCell aufrufen
procedure TForm1.StringGridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
//Text um 90°gedreht ausgeben, linksbündig in der ersten Spalte
if ACol = 0 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect, 'ARIAL', 12, clRed, taLeftJustify);
//Ausgabe zentriert in der zweiten Spalte
if ACol = 1 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect, 'ARIAL', 12, clBlue, taCenter);
//Ausgabe rechtsbündig in den restlichen Spalten
if ACol > 1 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect, 'ARIAL', 12, clGreen,
taRightJustify);
end;
Zweite Variante:
procedure StringGridRotateTextOut(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
//wenn Schrift zu groß dann anpassen
if (Size > Grid.ColWidths[ACol] div 2) then
Size := Grid.ColWidths[ACol] div 2;
with Grid.Canvas do
begin
//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);
//Rechteck füllen
FillRect(Rect);
//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]);
//Referenz auf alten Font wiederherstellen
SelectObject(Handle, OldFont);
//Referenz auf neuen Font löschen
DeleteObject(NewFont);
end;
end;
//Methode im OnDrawCell aufrufen
procedure TForm1.StringGridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
//Text um 90°gedreht ausgeben, linksbündig in der ersten Spalte
if ACol = 0 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect,
'ARIAL', 12, clRed, taLeftJustify);
//Ausgabe zentriert in der zweiten Spalte
if ACol = 1 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect,
'ARIAL', 12, clBlue, taCenter);
//Ausgabe rechtsbündig in den restlichen Spalten
if ACol > 1 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect,
'ARIAL', 12, clGreen, taRightJustify);
end;
Schriftart: string; Size: Integer; Color: TColor; Alignment: TAlignment);
var
NewFont, OldFont: Integer;
FontStyle, FontItalic, FontUnderline, FontStrikeout: Integer;
begin
//wenn Schrift zu groß dann anpassen
if (Size > Grid.ColWidths[ACol] div 2) then
Size := Grid.ColWidths[ACol] div 2;
with Grid.Canvas do
begin
//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);
//Rechteck füllen
FillRect(Rect);
//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]);
//Referenz auf alten Font wiederherstellen
SelectObject(Handle, OldFont);
//Referenz auf neuen Font löschen
DeleteObject(NewFont);
end;
end;
//Methode im OnDrawCell aufrufen
procedure TForm1.StringGridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
//Text um 90°gedreht ausgeben, linksbündig in der ersten Spalte
if ACol = 0 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect,
'ARIAL', 12, clRed, taLeftJustify);
//Ausgabe zentriert in der zweiten Spalte
if ACol = 1 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect,
'ARIAL', 12, clBlue, taCenter);
//Ausgabe rechtsbündig in den restlichen Spalten
if ACol > 1 then
StringGridRotateTextOut(StringGrid, ARow, ACol, Rect,
'ARIAL', 12, clGreen, taRightJustify);
end;
Ähnliche Seiten:
- Text im StringGrid ausrichten
- Stringgrid-Zelle per Programmcode selektieren
- Einträge in einer Listbox markieren
- Schreibschutz bei bestimmten Zellen eines TStringgrid
- Zeilen eines Stringgrids färben
- Trennlinie im Stringgrid hervorheben
- Äquivalent zu ColSpan in HTML in TStringGrid
- Zeile eines StringGrids löschen
- Zeilen in einem StringGrid tauschen
- Bitmap in ein StringGrid zeichnen