Форум: "Начинающим";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
Внизclick по вложеным объектам Найти похожие ветки
← →
_Asph © (2007-06-22 14:34) [0]Делаю компонент на 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;
← →
Инс (2007-06-22 14:37) [1]Да не нужно перекрывать Click, просто назначьте в конструкторе
Img.OnClick:=Self.OnClick;
PS: Поля в секции published - не хорошо
← →
Однокамушкин (2007-06-22 14:50) [2]
> Инс (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:57) [3]
> Однокамушкин (22.06.07 14:50) [2]
Ну, раз уже говорить про хороший стиль, то строить такие вот составные компоненты, а потом думать, как это все сделать одним целым - тоже не хорошо. Вместо того же TImage можно просто рисовать картинку в обработчике WM_PAINT и будет вам счастье...
← →
_Asph © (2007-06-22 15:00) [4]а можно
> procedure ImageClick(Sender: TObject);
> Img:TImage; // !!!!!!! Не нужно помещать поля в published,
> для этого есть свойства
перенести в секцию protected?
Иначе Img надо переписать как FImg.
В общем конечно не принципиально, но хочется понять.
← →
Инс (2007-06-22 15:01) [5]
> Иначе Img надо переписать как FImg.
Да нет, нужно объявить property Img: TImage read FImg;
Слышали термин "Инкапсуляция"?
← →
Ega23 © (2007-06-22 15:04) [6]
> перенести в секцию protected?
> Иначе Img надо переписать как FImg.
> В общем конечно не принципиально, но хочется понять.
Назвать хоть буквой "Зю" можно. Не в этом дело.
Чем private отличается от protected, public и published?
← →
_Asph © (2007-06-22 15:15) [7]
> Вместо того же TImage можно просто рисовать картинку в обработчике
> WM_PAINT и будет вам счастье...
Ну это пока для меня сложно.
Требуемые функции компонент выполняет)
Только вот с кликом (вообще с событиями), не могу до конца понять.
Все подсказки услышал. Спасибо.
у меня есть Fonclick: TNotifyEvent;
и property Onclick: TNotifyEvent read Fonclick write Fonclick;
сделал по аналогии с умными книжками)))
На форме куда кладу компонент, у него появлятся Event.
А вот как его с кликом то связать.
Читаю, а догнать не могу.
Вот с имиджем за 5 минут помогли)))
а я вчера весь день проэксперементировал.
← →
Ega23 © (2007-06-22 15:24) [8]
> На форме куда кладу компонент, у него появлятся 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;
Что-то типа этого...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.053 c