Вывод текста под углом [C++Builder/Delphi]
Главная → Статьи → Вывод текста под углом
Иногда задают вопрос: "Как выдать текст под наклоном?". Вот ответ:
Пример, демонстрирующий вывод текста под углом. Для просмотра понадобится форма, кнопка и компонент CSpinEdit1. Чтобы вывести под любым углом текст необходимо использовать TrueType Fonts (например "Arial").
C++Builder Example
Обработчик события OnClick:
LOGFONT lf; // определяем структуру шрифта
Canvas->Brush->Style = bsClear; // устан прозрачный стиль кисти
ZeroMemory(&lf, sizeof(LOGFONT)); //очищаем память
lf.lfHeight = 20; // высота шрифта (размер подбирается системой)
lf.lfEscapement = CSpinEdit1->Value*10 ; // угол поворота например: 45*00" = 450
lf.lfOrientation = 900; // ориентация в десятых долях градуса
// под WinXP почему-то не работает :(
lf.lfCharSet = DEFAULT_CHARSET; // набор символов
strcpy(lf.lfFaceName, "Times New Roman"); // шрифт
Canvas->Font->Handle = CreateFontIndirect(&lf); // создаем из структуры хэндл
// и устанавливаем его текущим
Canvas->TextOut(300, 300, "-------- Rotated text "+
IntToStr(lf.lfEscapement)); // выводим текст на холст (канву)
На экран вывдится текст под углом указанном в компоненте CSpinEdit1
Delphi Example
var
LogFont : TLogFont;
...
GetObject(Canvas.Font.Handle, SizeOf(TLogFont), @LogFont);
{ Вывести текст 1/10 градуса против часовой стрелки }
LogFont.lfEscapement := CSpinEdit1.Value*10;
Canvas.Font.Handle := CreateFontIndirect(LogFont);
Canvas.TextOut(300, 300, " Rotated text ");
Краткое описание cтруктуры LOGFONT
typedef struct tagLOGFONT { // lf
LONG lfHeight; // высота
LONG lfWidth; // ширина
LONG lfEscapement; // угол
LONG lfOrientation; // ориентация
LONG lfWeight; // вес 300-норма 700-жирный
FW_DONTCARE 0
FW_THIN 100
FW_EXTRALIGHT 200
FW_ULTRALIGHT 200
FW_LIGHT 300
FW_NORMAL 400
FW_REGULAR 400
FW_MEDIUM 500
FW_SEMIBOLD 600
FW_DEMIBOLD 600
FW_BOLD 700
FW_EXTRABOLD 800
FW_ULTRABOLD 800
FW_HEAVY 900
FW_BLACK 900
BYTE lfItalic; // курсив true/false
BYTE lfUnderline; // подчеркивание true/false
BYTE lfStrikeOut; // перечеркивание true/false
BYTE lfCharSet; // набор символов
ANSI_CHARSET
DEFAULT_CHARSET - по умолчанию
SYMBOL_CHARSET
SHIFTJIS_CHARSET
GB2312_CHARSET
HANGEUL_CHARSET
CHINESEBIG5_CHARSET
OEM_CHARSET
Windows 95 only:
JOHAB_CHARSET
HEBREW_CHARSET
ARABIC_CHARSET
GREEK_CHARSET
TURKISH_CHARSET
THAI_CHARSET
EASTEUROPE_CHARSET
RUSSIAN_CHARSET
MAC_CHARSET
BALTIC_CHARSET
BYTE lfOutPrecision; // отчетливость, четкость вывода
OUT_CHARACTER_PRECIS
OUT_DEFAULT_PRECIS - по умолчанию
OUT_DEVICE_PRECIS
OUT_OUTLINE_PRECIS
OUT_RASTER_PRECIS
OUT_STRING_PRECIS
OUT_STROKE_PRECIS
OUT_TT_ONLY_PRECIS
OUT_TT_PRECIS
BYTE lfClipPrecision; // как будет выполнятся обрезка строки
CLIP_DEFAULT_PRECIS - по умолчанию
CLIP_CHARACTER_PRECIS
CLIP_STROKE_PRECIS
CLIP_MASK
CLIP_EMBEDDED
CLIP_LH_ANGLES
CLIP_TT_ALWAYS
BYTE lfQuality; // качество
DRAFT_QUALITY - черновое
PROOF_QUALITY - улучшенное
DEFAULT_QUALITY - по умолчанию
BYTE lfPitchAndFamily; // 2 младших бита определяют ширину символа
DEFAULT_PITCH - по умолчанию
FIXED_PITCH - фиксир ширина
VARIABLE_PITCH - переменная ширина
биты с 4 до 7 определяют начертание
FF_DECORATIVE
FF_DONTCARE
FF_MODERN
FF_ROMAN
FF_SCRIPT
FF_SWISS
TCHAR lfFaceName[LF_FACESIZE]; // Строка с названием шрифта длиной не
более 32 символов (включая конец
строки 0x00 (�) )
} LOGFONT;
Реклама: В наличии женские товары Обложки для автодокументов антикризисные цены.
Другие материалы:
- Чтение ID3
- Решение уравнения методом дихотомии
- Реализация метода искусственного базиса (М-метода)
- Определение вида четырехугольника
- Smarty Plugins
Комментарии:
имя:
e-mail (не публикуется):
комментарий:
e-mail (не публикуется):
комментарий:
Вы можете оставить первый комментарий.