![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Transparent label on WinAPI
AlexZ © (2004-07-03 19:49:00)Добрых суток, мастерам! Возник один вопрос насчёт создания label'a с прозрачным фоном. Уверен на 99,9% - что это не тег, указываемый в стилях (создаю label по CreateWindow).
Намекнул бы кто по этому поводу...
AlexZ (2004-07-05 00:10:00) [1]Ок! Спасибо за ответы! Задача решена - тема закрыта :)
Nick Denry (2004-07-04 13:54:00) [2]Как альтернатива предложенному уже мной (это не только теория :))
можно обработывать соообщение WM_CTLCOLORSTATIC
WM_CTLCOLORSTATIC : {Обработка label's}
Begin
SetBkMode(Wparam,TRANSPARENT);
Result:=GetStockObject(Null_Brush);
// if (wparam<>0) and (lparam=label6) then
begin
SetTextColor(wparam,rgb(0,0,255));
end;
End;
Это работает в *любом случае * с окнами класса STATIC. Отнеситесь внимательно к этому :
Return Values
If an application processes this message, the return value is the handle of a brush that Windows uses to paint the background of the static control.
Григорьев Антон (2004-07-04 07:12:00) [3]Вывести прозрачную надпись на канву и сделать прозрачным окно статитческого текста - принципиально разные задачи. Окно по умолчанию занимает отведённый ему прямоугольник целиком. Чтобы элемент был прозрачным, во-первых, родительское окно не должно иметь стиль WS_CLIPCHILDREN, во-вторых, сам элемент должен поставить пустой обработчик на WM_ERASEBKGND, а то по умолчанию его окно будет закрашиваться при обработке этого сообщения. ИМХО, возиться с этим слишком муторно - я бы просто выводил текст в обработчике WM_PAINT основного окна.
AlexZ (2004-07-04 02:25:00) [4]Дело в том, что "примерно" - я знаю как, и кручусь возле этих функций, однако написанные мной коды неработают, т.к. проверено на практике. Теоретически, Ваш ответ правильный.
Подсмотрел я FAQ (Q:="Как вывести надпись с прозрачным фоном на Bitmap" - то, что надо!), там на VCL. Переписал на АПИ, запустил - фон прозрачным НЕ становиться.
Решение так и не найдено, но всё равно - спасибо за ответ.
Nick Denry (2004-07-04 01:02:00) [5]Примерно:
var Label : HWND; TDC : HDC;
....................
TDC := GetDC(Label);
SetBkMode(TDC, TRANSPARENT);
.................
ReleaseDC(TDC);//
или WM_PAINT