Главная страница
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.019 c
3-7305
Fantasy
2003-06-09 05:06
2003.07.03
Пример простого лукап поля


14-7631
Vlad Oshin
2003-06-18 10:08
2003.07.03
Почти Евдокимов


4-7763
BJValentine
2003-04-29 17:43
2003.07.03
DeleteFile


3-7288
Саня
2003-06-07 10:59
2003.07.03
Может ли EhLib подсчитать


11-7373
-Alex-
2002-10-26 17:26
2003.07.03
Пытаюсь отследить завершение работы Windows...