Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2010, 19:40   #1
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию Почему не пишет создаваемым шрифтом

Конструкция вида:
procedure TForm1.N15Click(Sender: TObject);
var F:TFont;
LF: TLogFont;
R: TRect;
begin
R:=Rect(20,20,120,120);
image1.Canvas.Font.Name:='Arial';
image1.Canvas.Font.Size:=18;
f:=TFont.Create;
f.Assign(form1.Image1.Canvas.Font);
GetObject(image1.Canvas.Font.Handle ,sizeof(LF),@LF);
LF.lfEscapement:=300;
LF.lfOrientation:=300;
f.Handle:=CreateFontIndirect(LF);
form1.Image1.Canvas.Font.Assign(f);
image1.Canvas.Font.Color:=clRed;
DrawText(Image1.Canvas.Handle,'jhgg lgh',-1,R,DT_SINGLELINE or DT_VCENTER or DT_CENTER);
end;
ничего не выводит на поверхность ImageBoxа. Где я лоханулся?
ipdd вне форума Ответить с цитированием
Старый 19.09.2010, 19:49   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можно вопрос, а зачем смешивать VCL и API таким методом?
создайте нормально шрифт и его примените к контексту, потом рисуйте
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.09.2010, 19:54   #3
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
можно вопрос, а зачем смешивать VCL и API таким методом?
создайте нормально шрифт и его примените к контексту, потом рисуйте
Блин, да у меня задача - выводить на канву имеджбокса текст под наклоном. Стандартными средствами Дельфи это не сделаешь...
ipdd вне форума Ответить с цитированием
Старый 19.09.2010, 20:01   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
под наклоном
CreateFont смотрим MSDN
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.09.2010, 20:14   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

попробуйте избавится от всяких Assign, то есть типа так.
Код:
var LF: TLogFont;
R: TRect;
begin
R:=Rect(20,20,120,120);
image1.Canvas.Font.Name:='Arial';
image1.Canvas.Font.Size:=18;
GetObject(image1.Canvas.Font.Handle ,sizeof(LF),@LF);
LF.lfEscapement:=300;
LF.lfOrientation:=300;
image1.Canvas.Font.Handle:=CreateFontIndirect(LF);
image1.Canvas.Font.Color:=clRed;
DrawText(Image1.Canvas.Handle,'jhgg lgh',-1,R,DT_SINGLELINE or DT_VCENTER or DT_CENTER);
end;
например попробуйте так

проверил
рисует.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.09.2010, 20:31   #6
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
попробуйте избавится от всяких Assign, то есть типа так.

проверил
рисует.
Спасибо огромное! Буду ковыряться. Я просто вообще особо не понимаю смысла функции Assign...
ipdd вне форума Ответить с цитированием
Старый 19.09.2010, 21:25   #7
Exception
Пользователь
 
Регистрация: 31.12.2007
Сообщений: 37
По умолчанию

Не забывайте уничтожать дескриптор шрифта после отрисовки.
А вообще можно попробовать наложить шрифт на контекст через SelectObject.
Как-то так.
Exception вне форума Ответить с цитированием
Старый 19.09.2010, 21:28   #8
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Exception Посмотреть сообщение
через SelectObject.
А можно здесь поподробнее?
ipdd вне форума Ответить с цитированием
Старый 19.09.2010, 21:34   #9
Exception
Пользователь
 
Регистрация: 31.12.2007
Сообщений: 37
По умолчанию

Цитата:
Сообщение от ipdd Посмотреть сообщение
А можно здесь поподробнее?
Код:
var
  hfnt: HFONT;
hfnt := CreateFontIndirect(LF);
if (hfnt <> 0) then
  SelectObject(Image1.Canvas.Handle, hfnt);
Exception вне форума Ответить с цитированием
Старый 19.09.2010, 21:34   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Exception, TFont его сам уничтожит.(поидее должен, в принципе можно проверить)
а насчет контекста, это значит уходить еще далее в АПИ.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему пишет "cannot set colsep"? Dimon195-95 SQL, базы данных 1 17.03.2010 00:51
проблема с шрифтом Demonmov Microsoft Office Word 7 06.11.2009 06:51
прога пишет ошибку при открытии файла (почему?) nicky777 Общие вопросы Delphi 2 14.03.2008 17:56
Почему после компилиции не пишет кирилицей? lionig28 Общие вопросы C/C++ 1 01.02.2008 21:33
Работа со шрифтом Ray Общие вопросы Delphi 0 24.12.2006 13:02