![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прозрачный компонент (наследник TWinControl) [D7, Win2k, WinXP]
Vladix © (2006-11-15 16:03:00)День добрый!
Вопрос практически весь в теме. Нужно сделать компонент (наследник TWinControl - это обязательное условие!) прозрачным. Что для этого нужно перекрыть в TWinControl'е, чтобы он не трогал фон родительского окна?
DVM (2006-11-17 15:38:00) [1]
> т.к. винда считает что на этом месте что-то по-любому должно
> отрисоваться и в целях оптимизации не дает родителю рисовать
> в "заявленной" компонентом области.
Неправда. Это зависит от стилей родительского и дочернего окон.
WS_CLIPSIBLINGS и WS_CLIPCHILDREN
Vladix (2006-11-16 14:04:00) [2]Спасибо, при регионы-то я пока даже и не думал в этом контексте. Обязательно попробую
Наиль (2006-11-15 16:39:00) [3]Поставь кнопку на Image с рисунком.
Испытай такой код:
procedure TForm2.Button1Click(Sender: TObject);
Var
Region:HRGN;
begin
Region:=CreateEllipticRgnIndirect(Button1.ClientRect);
SetWindowRgn(Button1.Handle,Region,True);
DeleteObject(Region);
end;
Такой способ подходит для компонент, которые редко меняют размер. Например, для кнопок.
Vladix (2006-11-15 16:37:00) [4]Может быть моих знаний не хватает... Мне нужен компонент, способный быть контейнером для других компонентов, принимающий сообщения Windows и к этому еще и прозрачный; причем он должен быть прозрачным, а расположенные на нем компоненты - нет.
thevalery (2006-11-15 16:18:00) [5]Можно перебить обычную отрисовку и стирание фона (WM_ERASEBKGND), но это чревато мусором, т.к. винда считает что на этом месте что-то по-любому должно отрисоваться и в целях оптимизации не дает родителю рисовать в "заявленной" компонентом области. Единственное что приходит на ум - воспользоваться механизмом "фигурных" форм (с помощью маски прозрачности), но применимо ли это здесь - не в курсе. Может проще постановку задачи подправить? ;-)