Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Начала ООП   Найти похожие ветки 

 
CMOS ©   (2006-02-05 20:52) [0]

Как своему классу (от TObject) добавить событие Click?
(и другие)


 
Zeqfreed ©   (2006-02-05 21:07) [1]

type
 TEventType = procedure(Sender : TObject); of object;

 TAClass = class
 private
   FOnEvent : TEventType;
 protected
   procedure Event; dynamic;
   property OnEvent : TEventType read FOnEvent write FOnEvent;
 end;

procedure TAClass.Event;
begin
 if Assigned(FOnEvent) then FOnEvent(Self);
end;


Мыслить нужно в таком ключе. :)


 
Sergey Masloff   (2006-02-05 22:12) [2]

В любом случае объект неоконный класс и клик в его контексте смысла не имеет. Ну или ты собираешься всю разницу между TObject и TWinControl  писать руками...


 
TUser ©   (2006-02-06 05:25) [3]

> TEventType = procedure(Sender : TObject); of object;

TNotifyEvent


 
ZeroDivide ©   (2006-02-06 09:13) [4]

Ну и соответственно, чтобы твое событие действительно работало, нужно его вызывать в коде твоего компонента.

Например

procedure TMyComp.DoSmth;
begin
...............
 if Assigned(FOnEvent) then
   FOnEvent(Self);
...........................
end;

Правда, зачем тебе, для наследника TObject событие OnClick? Для того, чтобы твой компонент ловил оконные сообщения, нужно чтобы он был контролом, т.е. имел хендл окна.

тогда процедура вызова события могда бы инициироваться, по сообщению твоему окну.

procedure MyMessageHandler(var Message: TMessage); message CM_XXXXXXXXX;

К тому же у TControl, событие OnClick уже есть, просто надо объявить его в published в своем классе.


 
Zeqfreed ©   (2006-02-06 15:01) [5]

[3] TUser ©   (06.02.06 05:25)
Кхм :) TEventType был дан для примера.


 
CMOS ©   (2006-02-13 14:43) [6]

Объект имеет координаты и размер. Работа с DirectDraw.
Движок TSpriteEngine не использую, его имеет смысл использовать только на десятых пентиумах.


 
Digitman ©   (2006-02-13 15:47) [7]


> CMOS ©   (13.02.06 14:43) [6]


При чем здесь какой-то там "Работа с DirectDraw",  "TSpriteEngine", "на десятых пентиумах" ?


 
CMOS ©   (2006-02-14 13:13) [8]

т. е. объект у меня будет бегать по двухмерной поверхности (Surface). По нему кликну - должен вызваться обработчик события


 
Игорь Шевченко ©   (2006-02-14 14:55) [9]


> По нему кликну - должен вызваться обработчик события


Кликай по поверхности, так вернее будет. А если координаты клика совпали с координатами объекта, то вызывай метод объекта типа Click, который, в свою очередь вызывает обработчик события или же сам какие действия делает, например, цвет на красный меняет.


 
CMOS ©   (2006-02-16 10:16) [10]

Все это можно сделать без объектно-ориентированного подхода. (*) В таймере проверять координаты и вызвать процедуру (не метод) обработчик. В конечном результате снизится производительность.
Хочется понять, как объекты реагируют на то или иное событие.
Хотя может быть по принципу (*), тогда не стоит ломать голову.


 
evvcom ©   (2006-02-16 11:01) [11]


> Хочется понять, как объекты реагируют на то или иное событие.

VCL - кладезь знаний, чти его!



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
2-1140249308
drink
2006-02-18 10:55
2006.03.05
Переменная в двух модулях (Unit).


2-1139912191
AlexF
2006-02-14 13:16
2006.03.05
Иконки в строках Memo


4-1134604307
Volf_555
2005-12-15 02:51
2006.03.05
Как изменить аттрибуты файла?


1-1138637444
lsp
2006-01-30 19:10
2006.03.05
отображение даты, в ZeosDBO 6.5.0 под Делфи для PostgresSQL


1-1138446074
YurySS
2006-01-28 14:01
2006.03.05
Настройка REPOSITORY