Работа со шрифтами на WinAPI
Работа со шрифтами на WinAPI
Работа со шрифтами на WinAPI Источник: http://decoding.narod.ru/api/font/font.html Сегодня поговорим о шрифтах, и о том, каким образом работать с ними на Win API. Нам потребуется переменная типа HFONT. Изменить стиль шрифта можно у любого компонента, я покажу это на примере кнопки. var Font: HFONT; Btn: HWND; Для создания нового экземпляра шрифта используется функция CreateFont, которая, в случае успешного завершения, возвращает Handle нового шрифта. Рассмотрим параметры этой функции. procedure CreateFont( nHeight: integer, // логическая высота шрифта nWidth: integer, // логическая ширина символа nEscapement: integer, // угол наклона nOrientation: integer, // базовый угол ориентации fnWeight: integer, // вес шрифта (можно считать как толщину символа) fdwItalic: Cardinal, // будет ли шрифт курсивным fdwUnderline: Cardinal, // будет ли шрифт подчеркнутым fdwStrikeOut,: Cardinal // будет ли шрифт зачеркнутым fdwCharSet: Cardinal, // идентификатор набора символов fdwOutputPrecision: Cardinal, // точность вывода fdwClipPrecision: Cardinal, // точность отсечения fdwQuality: Cardinal, // качество вывода fdwPitchAndFamily: Cardinal, // шаг и семейство шрифта lpszFace: PChar // Название шрифта ): HFONT; Подробную информацию по каждому параметру можно прочитать в справке, я обращу ваше внимание лишь на некоторые из них. Отрицательное значение первого параметра говорит о том, что будет выбрано абсолютное значение высоты шрифта. Третий параметр отвечает за угол поворота шрифта относительно оси X. Угол задается в десятых долях градуса, то есть, чтобы повернуть текст на угол на 90°, нужно задать значение, равное 900. Для последних параметров можно использовать значение по умолчанию. Но если мы собираемся повернуть текст на какой-либо угол, то параметр fdwQuality лучше задать как ANTIALIASED_QUALITY, в этом случае текст будет сглажен. Посмотрим, как это реализуется. Font := CreateFont( -30, 15, 25, 10, 1000, 1, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH or FF_DONTCARE, ?Courier New? ); Чтобы назначить компоненту новый шрифт, ему нужно послать сообщение WM_SETFONT, где в качестве параметра wParam, нужно указать значение, возвращенное функцией CreateFont. Btn := CreateWindowEx( 0, ?Button?, ?Наш новый шрифт?, WS_CHILD or WS_VISIBLE, 10, 10, 280, 60, Wnd, 0, hInstance, nil ); SendMessage( Btn, WM_SETFONT, Font, 0 );