Старый 22.11.2005, 11:18   #1   
Мы вместе
 
Аватар для DWanek
 
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 40

DWanek вне форума Не в сети
Помогите со шрифтами!!!

Помогите, пожалуйста, решить такую проблему.
Нужно с помощью Delphi написать текст поверх всех окон.
Я знаю, что это можно сделать с помощью функций GetDC(0) и TextOut или DrawText, проблема не в этом. Может кто знает как управлять стилем того шрифта, которым всё рисуется? Есть только одна функция SetTextColor и всё. Мне нужно поменять размер шрифта, стиль и т.д. Есть функция, с помощью которой можно узнать параметры текущего шрифта - GetTextMetrics, а как их изменить?????????
  Ответить с цитированием
Старый 22.11.2005, 15:08   #2   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
1. Создаем шрифт: CreateFont(...), CreateFontIndirect(), CreateFontIndirectEx().
2. SelectObject(...) вместо этого можно еще юзать SelectFont(), но я не знаю, определен ли в Delphi этот макрос. После окончания вывода текста следует воостановить старый шрифт.

ЗЫ. см MSDN на предмет GDI.
  Ответить с цитированием
Старый 22.11.2005, 18:34   #3   
Форумец
 
Аватар для darkart
 
Сообщений: 14
Регистрация: 23.06.2005
Возраст: 38

darkart вне форума Не в сети
Вот пример:
///////////////////////////////////////////////////////////////////////
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, 14:22   #4   
Мы вместе
 
Аватар для DWanek
 
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 40

DWanek вне форума Не в сети
А вы случайно не знаете как этот текст вывести на прозрачном фоне, а не на белой картинке.
  Ответить с цитированием
Старый 25.11.2005, 14:34   #5   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
SetBkMode(...)?
  Ответить с цитированием
Старый 25.11.2005, 15:31   #6   
Мы вместе
 
Аватар для DWanek
 
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 40

DWanek вне форума Не в сети
Цитата:
Сообщение от aerin
SetBkMode(...)?
Спасибо, помогло. А как можно запомнить картинку под текстом, чтобы потом этот текст стереть?
  Ответить с цитированием
Старый 25.11.2005, 15:45   #7   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
DWanek А программу тебе целиком не написать? Ты, это, если что, не стесняйся...
ЗЫ. Купи(скачай) любое издание Ч.Петзолда "Программирование под Windows 95", половина вопросов отпадет сразу. Это азбука. Далее MSDN.
ЗЫЫ. По существу вопроса. Перед выводом текста нужно скопировать закрываемую часть(узнать эту область можно например с помощью функции GetTextExtentPoint32(...)) экранного DC в некий DC в памяти, например с помощью функции BitBlt(). Потом скопировать обратно.
ЗЫЫЫ. Только, пожалуйста, не спрашивай, как создать контекст в памяти
  Ответить с цитированием
Старый 30.11.2005, 17:24   #8   
Форумец
 
Сообщений: 11
Регистрация: 13.01.2004

solovey вне форума Не в сети
Зачем искать себе трудности, легче создать объект TCanvas, его свойству Handle присвоить нужный HDC и забыть про WinAPI.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind