![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание своих VCL [D5, Win95/98, NT4]
Andre V. © (2002-04-08 10:24:00)Различие в design и run-time режимах
Свой визуальный компонент (от TRadioButton, TBitBtn и т.д.) в режиме design отображается нормально, в режиме run-time:
1. не отображается
2. отображается неправильно
3. наследуемые методы не вызываются
4. свои собственные методы (public) не вызываются
ЧТО ЭТО ТАКОЕ, С ЧЕМ ЕГО ЕДЯТ
P.S. Некоторые классыиз того же файла работают корректно
Игорь Шевченко (2002-04-09 11:20:00) [1]День добрый, Andre V,
Отлаживать, начиная с TSSRadioButton.WMPaint, TWinControl.WMDrawItem, TWinControl.WMMeasureItem
Для этого создавать свой компонент динамически в run-time и поэтапно смотреть, какие сообщения он вообще обрабатывает.
Кстати, CNDrawItem компоненту от TBitBtn приходит ?
С уважением,
Andre V. (2002-04-09 11:15:00) [2]Г-ну Шевченко!
Че отлаживать то?
На мой код не выходит. А отлаживать саму Винду???
С уважением,
Игорь Шевченко (2002-04-09 10:48:00) [3]День добрый,
Отладчик в руки - и вперед!
С уважением,
Andre V. (2002-04-09 10:42:00) [4]Уточняю: класс, наследник TBitBtn. Вставляю ейный компонент в форму. Ну его естественно видно, проперты разные у него есть,
установить их можно, поменять и т. д.
Компилирую, линкую, запускаю. Нет моего компонента. Его вооще
не видно. ГДЕ WMPaint?
Аналогично - наследник TRadioButton. Вызывается WMPaint для
TRadioButton.
КОНКРЕТНО:
написано:
private
{ Private declarations }
...
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
...
далее
procedure TSSRadioButton.WMPaint( Var Message : TWMPaint );
Var
AControlState : TControlState;
begin
AControlState := ControlState;
Include( AControlState, csCustomPaint );
ControlState := AControlState;
inherited;
Exclude( AControlState, csCustomPaint );
ControlState := AControlState;
end;
procedure TSSRadioButton.PaintWindow( DC : HDC );
begin
FCanvas.Lock;
try
FCanvas.Handle := DC;
try
TControlCanvas(FCanvas).UpdateTextFlags;
Paint;
finally
FCanvas.Handle := 0;
end;
finally
FCanvas.Unlock;
end;
end;
procedure TSSRadioButton.Paint;
begin
... рисуются феньки...
end;
Вот этих самых фенек и не видно в режиме run-time
MBo (2002-04-08 13:33:00) [5]вопросы неконкретные.