Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.036 c
15-1182022461
DRK
2007-06-16 23:34
2007.07.15
Вопрос не по делфям))


2-1182106911
Dmitryfox
2007-06-17 23:01
2007.07.15
Как изменить дату фотографии ?


2-1182156046
a.s.popow
2007-06-18 12:40
2007.07.15
таблица Paradox


2-1181736895
DelphiN!
2007-06-13 16:14
2007.07.15
Мое приложение не дает сделать перезагрузку системы


2-1182221457
DartVader
2007-06-19 06:50
2007.07.15
Выгрузка в Excel!!!Помогите плиз!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский