Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо