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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2008, 11:07   #1
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию SetBkMode

Почему не срабатывает такой код
SetBkMode(GetDC(Caption){Caption: HWND - Static}, TRANSPARENT);
Или нужно делать по другому чтобы фон надписи был прозрачным?
AidarBik вне форума Ответить с цитированием
Старый 29.07.2008, 13:04   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

SetBkMode(FHandle, TRANSPARENT);
// Далее вывод текста, например, так:
Windows.TextOut(FHandle, ...

Здесь FHandle: HDC;
А получить его, в зависимости от того, где Вы это используете, можно вызовом:

BeginPaint
GetDC
Canvas.Handle

Последний раз редактировалось alexBlack; 29.07.2008 в 13:14.
alexBlack вне форума Ответить с цитированием
Старый 29.07.2008, 13:17   #3
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Все равно не получается.
AidarBik вне форума Ответить с цитированием
Старый 29.07.2008, 13:32   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Код:
procedure TForm1.FormPaint(Sender: TObject);
begin
   Canvas.Brush.Color := clWhite;
   SetBkMode(Canvas.Handle, Transparent); //  <--- Без этой строки текст выводится на белом фоне
   Canvas.TextOut(10, 10, 'textString');
end;
Кстати, какой надписи ? TLabel что-ли ?
alexBlack вне форума Ответить с цитированием
Старый 29.07.2008, 13:39   #5
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Код:
  Caption:=CreateWindowEx(0, 'Static', ProgrammName, WS_CHILD or SS_LEFT or WS_VISIBLE, 8, 8, 100, 15, UsersWindow, 0, HInstance, nil);
Мне на WinAPI надо
---
Цитата:
Сообщение от alexBlack
SetBkMode(Canvas.Handle, Transparent); // <--- Без этой строки текст выводится на белом фоне
Цитата:
Сообщение от AidarBik
SetBkMode(GetDC(Caption){Caption: HWND - Static}, TRANSPARENT);
AidarBik вне форума Ответить с цитированием
Старый 29.07.2008, 13:51   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Все равно не понял что должно быть прозрачным.
Вы хотите создать окно с формой по контуру текста ?
alexBlack вне форума Ответить с цитированием
Старый 29.07.2008, 14:02   #7
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Нет. Я на форму рисую битмап. Но Static рисуется со своим белым фоном, который портит картинку на окне. Как сделать чтобы Static не рисовал своего фона?
---

Вот что получается.

Последний раз редактировалось AidarBik; 29.07.2008 в 14:14.
AidarBik вне форума Ответить с цитированием
Старый 29.07.2008, 14:56   #8
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от AidarBik Посмотреть сообщение
Нет. Я на форму рисую битмап. Но Static рисуется со своим белым фоном, который портит картинку на окне. Как сделать чтобы Static не рисовал своего фона?
Ну не знаю. По-моему для CreateWindowEx/STATIC/WS_CHILD так не получится. А нельзя просто вывести текст в обработчике WM_Paint ?
alexBlack вне форума Ответить с цитированием
Старый 29.07.2008, 15:01   #9
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Ну тогда останется такая же проблема с кнопками. На картинке видно.
AidarBik вне форума Ответить с цитированием
Старый 29.07.2008, 15:07   #10
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Я бы сделал через SetWindowRgn
alexBlack вне форума Ответить с цитированием
Ответ


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