![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
текст в ддроу
Green_Templar © (2005-06-26 00:58:00)Как выбрать шрифт, которым пишешь на канве у ддроу?
NikeOLD (2005-06-27 10:50:00) [1]
> Green_Templar © (27.06.05 00:33) [4]
Шрифты с постоянной шириной называются МОНОШИРИННЫМИ.
Arial и Times к таким шрифтам не относятся. Стандартный моноширинный шрифт в Винде - Courier
Sphinx (2005-06-27 06:43:00) [2]>есть ли шрифты, где можно делать жёлыте буквы с чёрным контуром?
Фотошоп и лубой шрифт :)
Grell (2005-06-27 02:26:00) [3]
> Неужели спрайтовый шрифт быстрее обычного?
Вообще все методы GDI медленны для DirectDraw, а спрайтовый шрифт - это просто блиттинг отдельных символов на поверхность, поэтому он и быстрее!
Green_Templar (2005-06-27 00:33:00) [4]Получил исчерпывающие ответы, спасибо :) Неужели спрайтовый шрифт быстрее обычного?
Я пишу пока на дэлфиХ (на ней быстрее), но потом переведу или на чистый ДХ, или на его компонент.
Как называются шрифты с постоянной шириной символов, является ли Ариал таким шрифтом, и есть ли шрифты, где можно делать жёлыте буквы с чёрным контуром?
злобная танька (2005-06-26 08:44:00) [5]нету у него канвы..
:(
cyborg (2005-06-26 08:44:00) [6]
Var
Surface : IDirectDrawSurface7;
LF: TLogFont;
Font : HFont;
DC : HDC;
...
FillChar(LF, SizeOf(LF), 0);
with LF do
begin
lfHeight := 14; //размер шрифта
lfWeight := fw_Normal; //fw_Normal - нормальный, FW_BOLD - жирный
lfUnderline:=1; //Подчёркнутый
lfItalic:=1; //Наклонный
lfCharSet:= RUSSIAN_CHARSET;
lfFaceName:='Arial'; //Название шрифта
end;
Font := CreateFontIndirect(@LF);
//Захват контекста поверхности (требуется для Windows API функции вывода текста)
if Surface.GetDC(DC)=0 then //Если удалось получить контекст поверхности
begin
SelectObject(DC,Font);
SetTextColor(DC,TextColor); //Установить цвет выводимого текста
SetBkMode(DC, TRANSPARENT); //Установить прозрачный фон выводимого текста
TextOut(DC, 0, 0, PChar(Text), Length(Text)); //Тут выводишь текст
//Освобождение контекста поверхности (обязательно после захвата контекста!)
Surface.ReleaseDC(DC);
end; //if Surface.GetDC(DC)=0
DeleteObject(Font); // Удаляем ненужный шрифт.
Самое главное не забывай освобождать ресурсы!
Surface.ReleaseDC
DeleteObject(Font);
К тому же этот вариант очень медленный. Делай свой спрайтовый шрифт.
Кефир87 (2005-06-26 01:07:00) [7]Прям ДиректХ или ДелфиХ?
А то в делфиХ савсем просто:
DXDraw.Surface.Canvas.Font.Name = 'Courier';
а ДирекХ я не знаю 8(