Форум: "Основная";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c