Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Помогите со шрифтами!!! |
Философия, технологии, алгоритмы! |
|
Опции темы |
22.11.2005, 11:18 | #1 |
Мы вместе
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 40
Не в сети |
Помогите со шрифтами!!!
Помогите, пожалуйста, решить такую проблему.
Нужно с помощью Delphi написать текст поверх всех окон. Я знаю, что это можно сделать с помощью функций GetDC(0) и TextOut или DrawText, проблема не в этом. Может кто знает как управлять стилем того шрифта, которым всё рисуется? Есть только одна функция SetTextColor и всё. Мне нужно поменять размер шрифта, стиль и т.д. Есть функция, с помощью которой можно узнать параметры текущего шрифта - GetTextMetrics, а как их изменить????????? |
22.11.2005, 15:08 | #2 |
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
1. Создаем шрифт: CreateFont(...), CreateFontIndirect(), CreateFontIndirectEx().
2. SelectObject(...) вместо этого можно еще юзать SelectFont(), но я не знаю, определен ли в Delphi этот макрос. После окончания вывода текста следует воостановить старый шрифт. ЗЫ. см MSDN на предмет GDI. |
22.11.2005, 18:34 | #3 |
Форумец
Сообщений: 14
Регистрация: 23.06.2005
Возраст: 38
Не в сети |
Вот пример:
/////////////////////////////////////////////////////////////////////// procedure DrawMyText(DC:HDC;x,y,col:integer;strText:string); var lFont:TLogFont;{все поля смотри в helpe} NewFont,OldFont:HFONT; begin SetTextColor(DC,col); with lFont do begin lfHeight:=72; lfWidth:=0; lfWeight:=fw_normal; lfUnderline:=0; lfStrikeOut:=0; lfEscapement:=450; StrCopy(lfFaceName,'Arial Black'); end; NewFont:=CreateFontInDirect(lFont); OldFont:=SelectObject(DC,NewFont); TextOut(DC,x,y,PChar(strText),Length(strText)); SelectObject(DC,OldFont); DeleteObject(NewFont); end; ////////////////////////////////////////////////////////////////////// |
25.11.2005, 15:45 | #7 |
бибизьян
Сообщений: 3,031
Регистрация: 17.02.2004
Не в сети |
DWanek А программу тебе целиком не написать? Ты, это, если что, не стесняйся...
ЗЫ. Купи(скачай) любое издание Ч.Петзолда "Программирование под Windows 95", половина вопросов отпадет сразу. Это азбука. Далее MSDN. ЗЫЫ. По существу вопроса. Перед выводом текста нужно скопировать закрываемую часть(узнать эту область можно например с помощью функции GetTextExtentPoint32(...)) экранного DC в некий DC в памяти, например с помощью функции BitBlt(). Потом скопировать обратно. ЗЫЫЫ. Только, пожалуйста, не спрашивай, как создать контекст в памяти |