![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Control "Has no parent window"
Ломов © (2007-01-15 15:07:00)Здравствуйте! Пытаюсь объеденить два компонента
Есть главный компонент от TScrollBox
type TMyClass = class(TScrollBox)
private
public
Finder: TFinder ;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
и
младший компонент от tpaintbox
type
TFinder = class(TPaintBox)
private
protected
procedure Paint; override;
procedure Painter;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
end;
в создателе главного я пишу так
constructor TMyClass.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent:=AOwner as TWinControl;
Finder := TFinder .Create(Self);
Finder .Parent:=self;
Finder .Visible := True;
end;
Младшего так
constructor TFinder.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
Это прекрасно работает
procedure TFinder.Paint;
begin
with inherited Canvas do
begin
Pen.Style := psDash;
Brush.color := clwhite;
Rectangle(0, 0, Width, Height);
end;
end;
а вот при вызове этой процедуры возникает сабжевое сообщение
procedure TFinder.Painter;
begin
with inherited Canvas do
begin
Pen.Style := psDash;
Brush.color := clwhite;
Rectangle(0, 0, Width, Height);
end;
end;
знаю, в инициализации второго объекта напортачил, а как, не доходит. Поможите
Ega23 (2007-01-16 11:36:00) [1]
> Перенесите присвоение парента вложенного компонента в перекрытие
> метода SetParent
Точно.
DimaBr (2007-01-16 09:25:00) [2]Перенесите присвоение парента вложенного компонента в перекрытие метода SetParent
Ломов (2007-01-16 06:24:00) [3]
> ors_archangel ©
Спасибо за внимание. Вопрос снят. Это я сам затупил. Пытался вызвать Painter посредством другой процедуры из конструктора TFinder, предварительно не позаботившись о флагах
ors_archangel (2007-01-16 06:06:00) [4]
> Finder .Visible := True;
зачем?
Когда вызывается Painter?
Ломов (2007-01-16 05:54:00) [5]
> ors_archangel © (15.01.07 15:37) [1]
Не помогло (
Может есть еще варианты?
ors_archangel (2007-01-15 15:37:00) [6]Можно банально
procedure TFinder.Painter;
begin
if HasParent thenwith inherited Canvas do begin
Pen.Style := psDash;
Brush.color := clwhite;
Rectangle(0, 0, Width, Height);
end;
end;