![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
click по вложеным объектам
_Asph © (2007-06-22 14:34:00)Делаю компонент на TWinControl лежит Img:Timage.
Как сделать чтобы Click срабатывал и по щелчку на Img?
Сейчас он срабатывает только по области не занятой вложенными объектами.
Вот сокращенный код.
Как вообще ловить клик по имиджу?
Tkvmec = class(TWinControl)
private
Fonclick: TNotifyEvent;
protected
procedure Click;override;
published
constructor Create(AOwner: TComponent); override;
Img:Timage;
property Onclick: TNotifyEvent read Fonclick write Fonclick;
end;
Ega23 (2007-06-22 15:24:00) [1]
> На форме куда кладу компонент, у него появлятся Event.
> А вот как его с кликом то связать.
> Читаю, а догнать не могу.
> Вот с имиджем за 5 минут помогли)))
> а я вчера весь день проэксперементировал.
type
TMyForm=class(TForm)
FOnMyClick : TNotifyEvent;
........
procedure FormClick(Sender : TObject);
property OnMyClick : TNotifyEvent read FOnMyClick write FOnMyClick;
constructor Create(AOwner : TComponent);
end;
constructor TMyForm.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
Self.OnClick := FormClick;
end;
procedure TMyForm.FormClick(Sender : TObject);
begin
if Assigned(FOnMyClick) then FOnMyClick(Sender);
end;
Что-то типа этого...
_Asph (2007-06-22 15:15:00) [2]
> Вместо того же TImage можно просто рисовать картинку в обработчике
> WM_PAINT и будет вам счастье...
Ну это пока для меня сложно.
Требуемые функции компонент выполняет)
Только вот с кликом (вообще с событиями), не могу до конца понять.
Все подсказки услышал. Спасибо.
у меня есть Fonclick: TNotifyEvent;
и property Onclick: TNotifyEvent read Fonclick write Fonclick;
сделал по аналогии с умными книжками)))
На форме куда кладу компонент, у него появлятся Event.
А вот как его с кликом то связать.
Читаю, а догнать не могу.
Вот с имиджем за 5 минут помогли)))
а я вчера весь день проэксперементировал.
Ega23 (2007-06-22 15:04:00) [3]
> перенести в секцию protected?
> Иначе Img надо переписать как FImg.
> В общем конечно не принципиально, но хочется понять.
Назвать хоть буквой "Зю" можно. Не в этом дело.
Чем private отличается от protected, public и published?
Инс (2007-06-22 15:01:00) [4]
> Иначе Img надо переписать как FImg.
Да нет, нужно объявить property Img: TImage read FImg;
Слышали термин "Инкапсуляция"?
_Asph (2007-06-22 15:00:00) [5]а можно
> procedure ImageClick(Sender: TObject);
> Img:TImage; // !!!!!!! Не нужно помещать поля в published,
> для этого есть свойства
перенести в секцию protected?
Иначе Img надо переписать как FImg.
В общем конечно не принципиально, но хочется понять.
Инс (2007-06-22 14:57:00) [6]
> Однокамушкин (22.06.07 14:50) [2]
Ну, раз уже говорить про хороший стиль, то строить такие вот составные компоненты, а потом думать, как это все сделать одним целым - тоже не хорошо. Вместо того же TImage можно просто рисовать картинку в обработчике WM_PAINT и будет вам счастье...
Однокамушкин (2007-06-22 14:50:00) [7]
> Инс (22.06.07 14:37) [1]
> Да не нужно перекрывать Click, просто назначьте в конструкторе
> Img.OnClick:=Self.OnClick;
И в результате этого при щелчке на Image программа получит Sender неизвестного ей компонента, да ещё почему-то имеющего тип TImage вместо Tkvmec... А вдруг пользователь компонента захочет реализовать какую-то логику с анализом Sender, типа назначения нескольким компонентам одного обработчика с анализом значения Tag? Лучше уж всё сразу делать по уму... Тем более что автору вопроса нужно, чтобы при нажатии на Image срабатывал Click, а не OnClick...
Tkvmec = class(TWinControl)
private
Fonclick: TNotifyEvent;
procedure ImageClick(Sender: TObject);
Img:TImage; // !!!!!!! Не нужно помещать поля в published, для этого есть свойства
protected
procedure Click;override;
...
end;
...
Img := TImage.Create;
Img.OnClick := ImageClick;
...
procedure Tkvmec.ImageClick(Sender: TObject);
begin
Click;
end;
Инс (2007-06-22 14:37:00) [8]Да не нужно перекрывать Click, просто назначьте в конструкторе
Img.OnClick:=Self.OnClick;
PS: Поля в секции published - не хорошо