Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прозрачность в TWinControl


Den_is ©   (2006-07-10 14:35:00) 

Добрый день! У меня простой вопрос. А вот ответ, как оказалось, сложный. Я весь интернет перерыл, ответа не нашел.
Собственно вопрос - как сделать прозрачным компонент, унаследованный от класса TWinControl?
Заранее спасибо.


DimaBr   (2006-07-11 08:34:00) [1]


> Юрий Зотов ©

А прикольно получилось. Кликаешь на ссылку "Прозрачность в TWinControl" - "Перемещено в конференцию "Основная". Кликаешь на неё - "Перемещено в конференцию "Компоненты". Получилось два топика - брак.


Ketmar   (2006-07-10 21:25:00) [2]

ещё можно почитать про регионы.


Юрий Зотов   (2006-07-10 21:14:00) [3]

> Den_is ©   (10.07.06 15:32) [2]
> Непонятно, почему этот топик перемещен в форум "Основная".

Мне тоже. Поэтому перенес обратно.

По сабжу - обратите внимание на [10]. Как минимум, это именно тот путь, по которому и надо двигаться.


Мефисто   (2006-07-10 20:20:00) [4]

constructor TCustomPl.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 ControlStyle := ControlStyle + [csOpaque];
end;

procedure TCustomP.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.ExStyle := Params.ExStyle + WS_EX_TRANSPARENT;
end;

procedure TCustomP.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
 Message.Result := 1;
end;


Den_is   (2006-07-10 19:40:00) [5]

Сорри в пункте 1 опечатка. Имеется ввиду, что хочу переделать класс-родитель с TCustomControl на TWinControl.


Den_is   (2006-07-10 19:38:00) [6]


> Плохиш ©   (10.07.06 18:30) [6]
>
> > Den_is ©   (10.07.06 16:05) [5]
>
> А Вам ответ в каком виде хотелось бы услышать?


1. Я уже написал свой компонент, наследуя от TCustomControl. Причем компонент получился громоздкий, так как пришлось навешивать функциональность TWinControl. Поэтому хочу переделать наследника на TWinControl. Мешает прозрачность.
2. В невозможность сделать прозрачность я не верю. Все возможно!
3. Если советуют переписать "обработчик рисования компонента", то хотелось бы узнать, как это сделать? Ну, дурак я. Мне этой информации недостаточно.


Ketmar   (2006-07-10 19:01:00) [7]

видимо, в виде кода, готового к copy/paste.


Плохиш   (2006-07-10 18:30:00) [8]


> Den_is ©   (10.07.06 16:05) [5]

А Вам ответ в каком виде хотелось бы услышать?


Den_is   (2006-07-10 16:05:00) [9]

Black Krok
Смотрел, менял, крутил эти флаги - не помогает.

Плохиш
В "вашем" инернете нет ответа на мой вопрос. Либо советуют использовать TCustomControl, либо говорят, что это невозможно, либо дают абстрактные советы - типа перепиши обработчик рисования компонента.


Плохиш   (2006-07-10 15:49:00) [10]


> Den_is ©   (10.07.06 15:32) [2]
> Непонятно, почему этот топик перемещен в форум "Основная".

Скорее всего из-за " Я весь интернет перерыл". Радуйся, что не в "Начинающие".
Посмотри ещё в нашем интернете http://www.yandex.ru/yandsearch?stype=&nl=0&text=delphi+TWinControl+%EF%F0%EE%E7%F0%E0%F7%ED%EE%F1%F2%FC


Black Krok   (2006-07-10 15:40:00) [11]

Посмотрите все же свойство ControlStyle и флаги csOpaque, csParentBackground


Den_is   (2006-07-10 15:32:00) [12]

Непонятно, почему этот топик перемещен в форум "Основная". Вопрос связан именно с разработкой компонентов.
Я пишу компонент - наследник от TWinControl и столкнулся с проблемой прозрачности при написании этого компонента. Поэтому считаю, что все-таки этой ветке место в разделе "Компоненты"


Black Krok   (2006-07-10 14:58:00) [13]

Может это поможет?

procedure TCustomPanel.SetParentBackground(Value: Boolean);
begin
 { TCustomPanel needs to not have csOpaque when painting
   with the ParentBackground in Themed applications }
 if Value then
   ControlStyle := ControlStyle - [csOpaque]
 else
   ControlStyle := ControlStyle + [csOpaque];
 FParentBackgroundSet := True;
 inherited;
end;


Это реализация свойства TPanel.ParentBackground, делающего панель прозрачной
ControlStyle свойство TControl


Наверх

Титульная страница Поиск, карта сайта Написать письмо