Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

TWinControl и наследование   Найти похожие ветки 

 
Ilg   (2003-06-21 12:34) [0]

Здравствуйте!
Скажите, кто-нибудь разбирался с TWinControl?
Проблема такая:
Если создавая компонент наследовать его класс от TControl, то компонент получается "прозрачным"... А если наследовать от TWinControl, то "залитым". Так вот какой метод в TWinControl (который сам является наследником TControl) делает заливку компонента.
Короче говоря, можно ли создать аналог TWinControl, но с "прозрачным" фоном?
Заранее, Большое спасибо!


 
MBo ©   (2003-06-21 12:35) [1]

WM_ERASEBKGND


 
Ilg   (2003-06-21 13:09) [2]

Я пытался перехватывать WM_ERASEBKGND, но нужного результата не добился.
В TWinControl это сообщение обрабатывается так:
procedure TWinControl.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
{ Only erase background if we"re not doublebuffering or painting to memory. }
if not FDoubleBuffered or
(TMessage(Message).wParam = TMessage(Message).lParam) then
FillRect(Message.DC, ClientRect, FBrush.Handle);
Message.Result := 1;
end;

Если убрать FillRect, то на месте компонента будет "дырка", а нужно, чтобы результат был аналогичен TControl (компонент имел "прозрачный фон")...
Что нужно для этого делать?


 
Юрий Федоров ©   (2003-06-21 13:15) [3]

Наверно, тебе нужен альфа-канал


 
Ilg   (2003-06-21 14:11) [4]

Извини, не понимаю...


 
han_malign ©   (2003-06-21 14:13) [5]

ControlStyle:=ControlStyle-[csOpaque];


 
Ilg   (2003-06-21 15:41) [6]

Какой метод TWinControl нужно переопределить, чтобы использовать ControlStyle:=ControlStyle-[csOpaque]?
Переопределяю Create, пишу:
inherited Create(aOwner);
ControlStyle:=ControlStyle-[csOpaque];

- никакого результата :-(
Однако, если наследовать TControl, переопределить Create:
inherited Create(aOwner);
ControlStyle:=ControlStyle+[csOpaque];

фон окажется залитым.
Ничего не понимаю!...


 
Юрий Федоров ©   (2003-06-21 15:52) [7]

с ControlStyle ничего не выйдет.
Насчет альфа-канала - у формы есть св-во AplhaBlend - регулирует прозрачность окна (TWinControl - окно). Можно покопаться в коде VCL и выяснить, как это реализовано

Два "но"
1. Я не уверен, что это св-во есть в D5
2. Работать будет только под Win2000 и далее

А ты уверен, что тебе нужен именно WinControl? Если он должен быть прозрачным? Поясни


 
Ilg   (2003-06-21 16:51) [8]

От TWinControl я хочу наследовать классы новых компонентов, в частности, мне нужна TRadioButton, имеющая свойство Transparent, как TLabel. И насколько я понимаю AplhaBlend не совсем то, что нужно.
Предупреждая вопрос "Почему бы не скачать подходящий компонент с Torry.net?" отвечу, что смотрел некоторые компоненты... Все они созданы наследованием от TGraphicControl (который как и TControl имеет прозрачный фон) и не имеют некоторых важных свойств TWinControl.


 
Юрий Федоров ©   (2003-06-21 16:59) [9]

Боюсь, что все же придется наследоваться от TControl.
Насколько я понимаю, единственный способ сделать окно прозрачным - альфа канал.
А каких именно важных св-в TWinControl не хватает?


 
Victor_Cr ©   (2003-06-21 17:46) [10]

А нечто типа TCustomControl тебе не подойдет?


 
Ilg   (2003-06-22 12:41) [11]

TCustomControl сам наследуется от TWinControl...



Страницы: 1 вся ветка

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
7-7730
Piero
2003-04-07 10:25
2003.07.03
Как закрыть чужой exe-шник из своей проги


14-7647
6Labs
2003-06-16 08:46
2003.07.03
Модули в играх


14-7659
INTAARI
2003-06-16 11:11
2003.07.03
программа которая должна работать постоянно


3-7307
Explorer
2003-06-05 11:40
2003.07.03
Данные из Excel в MS SQL


6-7583
alik_os
2003-04-29 16:57
2003.07.03
список компьютером включенные в данный момент в локальной сети