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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2010, 21:00   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Не выводит текст на HBitMap

Код:
           Warehouse.Button[BNum].Font := CreateFont(-9, 0, 0, 0, 0, 0, 0, 0,
                                                     RUSSIAN_CHARSET,
                                                     OUT_DEFAULT_PRECIS,
                                                     CLIP_DEFAULT_PRECIS,
                                                     DEFAULT_QUALITY,
                                                     FF_DONTCARE or DEFAULT_PITCH,
                                                     'SmallFonts');
           SelectObject(Warehouse.Texture[TexInd].BitMap, Warehouse.Button[BNum].Font);
           SetBkMode(Warehouse.Texture[TexInd].BitMap, TRANSPARENT);
           SetTextColor(Warehouse.Texture[TexInd].BitMap, $000000);

           Windows.TextOut(Warehouse.Texture[TexInd].BitMap,
                           Round(Warehouse.Button[BNum].Width/2) - Round(GetTextW(TexInd, PAnsiChar(Warehouse.Button[BNum].Caption), Length(Warehouse.Button[BNum].Caption))/2),
                           Round(Warehouse.Button[BNum].Height/2) - Round(GetTextH(TexInd, PAnsiChar(Warehouse.Button[BNum].Caption), Length(Warehouse.Button[BNum].Caption))/2),
                           PAnsiChar(UTF8ToANSI(AnsiString(Warehouse.Button[BNum].Caption))),
                           Length(Warehouse.Button[BNum].Caption));
BitMap = HBitMap

Вот только не выводит ничего. Формула проверена, техника тоже. На DC выводит, на отдельно взятый HBitMap нет. Вместо формулы пробовал подставлять нули - тоже ничего.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 25.12.2010 в 21:03.
Alex Cones вне форума Ответить с цитированием
Старый 25.12.2010, 21:41   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

TexOut там ведь точно сказано что первый параметр
Цитата:
hdc [in]
A handle to the device context.
BOBAH13 вне форума Ответить с цитированием
Старый 25.12.2010, 21:44   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Тьфу, блин, точно.
Так написать текст с нужным шрифтом на HBitMap никак? Только создавая еще с полсотни промежуточных DC?

UPD
Код:
DC := GetDC(Warehouse.Texture[TexInd].BitMap);
                                           MDC := CreateCompatibleDC(DC);
                                           SelectObject(MDC, Warehouse.Texture[TexInd].BitMap);
                                           Warehouse.Button[BNum].Font := CreateFont(-9, 0, 0, 0, 0, 0, 0, 0,
                                                                                     RUSSIAN_CHARSET,
                                                                                     OUT_DEFAULT_PRECIS,
                                                                                     CLIP_DEFAULT_PRECIS,
                                                                                     DEFAULT_QUALITY,
                                                                                     FF_DONTCARE or DEFAULT_PITCH,
                                                                                     'Small Fonts');
                                           SelectObject(MDC, Warehouse.Button[BNum].Font);
                                           SetBkMode(MDC, TRANSPARENT);
                                           SetTextColor(MDC, $000000);
                                           Windows.TextOut(MDC,
                                                           Round(Warehouse.Button[BNum].Width/2) - Round(GetTextW(MDC, PAnsiChar(Warehouse.Button[BNum].Caption), Length(Warehouse.Button[BNum].Caption))/2),
                                                           Round(Warehouse.Button[BNum].Height/2) - Round(GetTextH(MDC, PAnsiChar(Warehouse.Button[BNum].Caption), Length(Warehouse.Button[BNum].Caption))/2),
                                                           PAnsiChar(UTF8ToANSI(AnsiString(Warehouse.Button[BNum].Caption))),
                                                           Length(Warehouse.Button[BNum].Caption));
                                           Warehouse.Button[BNum].ImageN := TexInd;
                                           DeleteDC(MDC);
                                           DeleteDC(DC);
Работает. Сократить\улучшить уже никак?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 25.12.2010 в 22:04.
Alex Cones вне форума Ответить с цитированием
Старый 25.12.2010, 22:12   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Малек не верна логика.
Код:
...
OldBitmap := SelectObject(MDC, Warehouse.Texture[TexInd].BitMap);
...
SelectObject(MDC, OldBitmap);
DeleteDC(MDC);
...
BOBAH13 вне форума Ответить с цитированием
Старый 25.12.2010, 22:17   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Картинка более изменяться не будет, ни текст, ни примитивы на ней рисоваться больше не будут. Она будет только выводиться. Ваш последний пост еще актуален?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 25.12.2010, 22:18   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Картинка более изменяться не будет, ни текст, ни примитивы на ней рисоваться больше не будут. Она будет только выводиться. Ваш последний пост еще актуален?
Да. В теории вы замещаете уже существующий HBITMAP связанный с тем новым HDC. Соответственно, не есть хорошо оставлять оригинальный HBITMAP за бортом. Лучше все восстановить (все объекты) как было, и удалить.
BOBAH13 вне форума Ответить с цитированием
Старый 26.12.2010, 10:24   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

А когда нужно будет удалять OldBitMap? Или он будет локальной пееременной и по выходе из процедуры?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 26.12.2010, 11:41   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
А когда нужно будет удалять OldBitMap? Или он будет локальной пееременной и по выходе из процедуры?
Никогда, система сама с ним решит что делать. Просто надо его вернуть родному HDC.
BOBAH13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая считывает текст из файла и выводит на экран все его предложения в обратном по avic Общие вопросы C/C++ 1 22.12.2010 12:41
программа , которая считает английский текст из файла и выводит на экран слова, начинающиеся с гласных бу Fantom666 Помощь студентам 0 13.05.2010 19:01
HBITMAP => DRAW Alex Cones Общие вопросы Delphi 18 08.05.2010 18:52
Вывод HBITMAP AidarBik Win Api 7 30.07.2008 14:21