![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определить откуда создавался component [D6, WinXP]
webpauk © (2006-03-14 13:56:00)в своем компоненте я использую Tlabel.
1.
constructor TMyComponent.Create;
begin
label:=Tlabel.create(MainForm);
label.parent =MainForm;
Label.onClick:=MainForm.labelonclick;
end;
procedure MainForm.labelonclick(Sender:Tobject);
begin
... как отсюда получить доступ к TMyComponent.end;
Жуков Олег (2006-03-14 21:01:00) [1]Здесь просто недописАл, чтобы не было недоразумений:
if Assigned(FOnLabelClick) then
FOnLabelClick( Self)
Жуков Олег (2006-03-14 20:51:00) [2]> webpauk
Как вариант:
Определи новое событие у своего компонента
private
FOnLabelClick: TNotifyEvent;
published
property OnLabelClick: TNotifyEvent read FOnLabelClick write FOnLabelClick;
Назначь событию Label.OnClick метод своего компонента (реализованный не в классе формы, а в твоём компоненте,
procedure TMyComponent.LabelClick(Sender...)),
а в этом методе уже вызывай OnLabelClick (если назначен такой обработчик)
if Assigned(FOnLabelClick) then
FOnLabelClick
Твой компонент ничегоне должен знать про MainForm. По многим причинам, одна из них - ты же хочешь, что бы твой компонент можно было использовать на произвольной форме, а не только в главной форме конкретно этой одной программы, иначе вообще, зачем он нужен.
Жуков Олег (2006-03-14 20:39:00) [3]> Sender as TMyComponent
Sender будет label а не MyComponent.
Leonid Troyanovsky (2006-03-14 19:06:00) [4]
> webpauk (14.03.06 13:56)
> procedure MainForm.labelonclick(Sender:Tobject);
> begin
> ... как отсюда получить доступ к TMyComponent.end;
Sender as TMyComponent
--
Regards, LVT.
Leonid Troyanovsky (2006-03-14 19:05:00) [5]
> Джо © (14.03.06 16:41) [1]
> > label:=Tlabel.create(MainForm);
> Так делать нельзя категорически.
Как, собс-но, и две следующие.
--
Regards, LVT.
Джо (2006-03-14 16:41:00) [6]1.
> constructor TMyComponent.Create;
Это неправильный конструктор для наследников TComponent;
2.
> label:=Tlabel.create( MainForm);
Так делать нельзя категорически.