|
Вопрос # 2 139/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты! Как повернуть текст в StringGrid на 90 градусов?
 |
Вопрос задал: alone (статус: Посетитель)
Вопрос отправлен: 28 ноября 2008, 21:40
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Мережников Андрей
Здравствуйте, alone!
В приложении пример из DelphiWorld
Приложение: Переключить в обычный режим- 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 do
- begin
- // 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 do
- begin
- // 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
-
-
- 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.
-
 |
Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 29 ноября 2008, 08:13
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 29 ноября 2008, 11:45; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 29 ноября 2008, 00:12 [#1]:
Написать собственную прорисовку текста. Иначе - только развернув монитор. А вот если ещё захочеться делать и редактирование боком, то тут будет сложнее.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Gooddy (статус: 3-ий класс), 29 ноября 2008, 11:45 [#2]:
короче в сетке текст стирать и самому вручную рисовать, поворачивать и вставлять поздравляю с геморроем.
Чисти код! Чисти код! Чисти код!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|