Главная страница
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
1-7397
Maxim Pshevlotsky
2003-06-23 04:53
2003.07.03
Перетаскивание формы курсором мыши


14-7722
swordent
2003-06-17 10:45
2003.07.03
TWebBrowser


14-7610
som
2003-06-18 16:48
2003.07.03
Удаление компонент


1-7437
Сушняк
2003-06-23 13:36
2003.07.03
String в записи и связанные с этим проблемы


14-7700
Inkognito_Man
2003-06-12 17:26
2003.07.03
AcrobatReder