Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Transparent static-окна 
:(
    Опции темы
Dmitry_177
Дата 22.11.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Создаю на форме (которая была создана hWindow := CreateWindowEx(WS_EX_LAYERED, WindowName, WindowName, WS_POPUP or WS_SYSMENU, cw_UseDefault, cw_UseDefault, 283, 149, 0, 0, HInstance, nil);) STATIC-окно что бы оно было прозрачным, т.е. Transparent, чтобы прямоугольник был прозрачным кроме текста, но этого почему-то не происходит... Создаю это окно так: CreateWindowEx(WS_EX_TRANSPARENT, 'STATIC', '00:00:00', SS_LEFT or WS_CHILD or WS_VISIBLE, 18, 34, 168, 52, hWindow, 0, HInstance, nil); Почему оно не прозрачное если стоит стиль WS_EX_TRANSPARENT? Нашел в интернете такой пример, чтобы static-окно было Transporent, обработку сообщения WM_CTLCOLORSTATIC:
Код

WM_CTLCOLORSTATIC: begin
                     SetTextColor(WParam, $FF0000);  // можно и цвет текста поменять
                     SetBkMode(WParam, TRANSPARENT);
                     Result := GetStockObject(NULL_BRUSH);
                   end;

Все хорошо, действительно текст transparent, но вся проблема в том, что если его изменить, т.е. послать сообщение WM_SETTEXT, то текст пишется поверх уже написанного, т.е. тот который был 
написан не стирается и получается текст на тексте... Что делать? Подскажите пожалуйста... 

Это сообщение отредактировал(а) Dmitry_177 - 22.11.2006, 21:34
PM MAIL   Вверх
bems
Дата 23.11.2006, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



SetBkMode(WParam, TRANSPARENT);-тут ты явно просишь рисовать текст, не меняя фона
Result := GetStockObject(NULL_BRUSH);- а тут перед прорисовкой предлагаешь "закрасить" фон прозрачной кистью.
Вобщем результат и должен быть таким.

Если тебе нужна прозрачность слоистого окна то пользуйся или UpdateLayeredWindow или SetLayeredWindowAttributes
Первая требует самостоятельной прорисовки всего на битмапе, что дает огромные возможности, но усложняет работу.
Вторая позволяет только установить степень прозрачности окна или прозрачный цвет (в VCL обертка именно для нее). Это проще сделать.

А от статика можно и вообще отказаться.


Это сообщение отредактировал(а) bems - 23.11.2006, 02:09


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0998 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.