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

Вниз

Событийные процедуры.   Найти похожие ветки 

 
Zeon ©   (2004-01-16 21:44) [0]

Кто нибуть, покажите синтаксис создания собыитйных процедур для своего класса. Допустим у меня есть ской созданный класс, в нём есть какие-то методы. Я хочу создать для него событийные процедуры, что бы при вызове этого метода, автомаитчески выполнялась событийная процедура для него.
ЗЫ: Да, мне стыдно задавать подобный вопрос, просто раньше как-то обходился без них, вот и не знаю :)


 
Dred2k ©   (2004-01-16 22:26) [1]

Примерно так:



type
TMyCallback = procedure(ASender : TObject) of object;

TMyClass = class(TObject)
private
FCallback : TMyCallback;
// ...
public
constructor Create(ACallback : TMyCallback);
destructor Destroy; override;
procedure SomeCall;
published
property Callback : TMyCallback read FCallback write FCallback;
end;

constructor TMyClass.Create(ACallback : TMyCallback)
begin
inherited Create;
FCallback := ACallback;
end;

destructor TMyClass.Destroy;
begin
// ...
inherited Destroy;
end;

procedure TMyClass.SomeCall;
begin
// ...
if(Assigned(FCallback)) then
FCallback(Self);
// ...
end;


 
Dred2k ©   (2004-01-16 22:32) [2]

Используем так:

type

TForm1 = class(TForm)
// ...
procedure Callback(ASender : TObject);
// ...
end;

var Form1 : TForm1;

procedure TForm1.Callback(ASender : TObject);
begin
ShowMessage(ASender.ClassName);
end;

.......

var tmpMyClass : TMyClass;
begin
tmpMyClass := TMyClass.Create(Form1.Callback);
Application.CreateForm(TForm1, Form1);
try
Form1.Show;
// ...
tmpMyClass.SomeCall;
// ...
Form1.Close;
finally
// Form1.Free;
tmpMyClass.Free;
end;
end;


 
Zeon ©   (2004-01-18 00:56) [3]

Большое спасибо за подсказку.
Но я хотел бы немнего уточнить на более простом примере.
Допустим, у меня есть класс:
TMyClass = Class
Constructor Create;
Destructor Destroy;
end;
Как мне добавить в него событие, допустим, OnCreate ?


 
Palladin ©   (2004-01-18 01:55) [4]

именно OnCreate не получится
var
_counter:integer=1;

type

TMyClassEvent1=procedure (Sender:TObject) of object;
TMyClassEvent2=procedure (Sender:TObject;c:integer) of object;

TMyClass=class
private
m_nID:integer;
m_eventEvent1:TMyClassEvent1;
m_eventEvent2:TMyClassEvent2;
public
constructor Create;
procedure DoEvent1;
procedure DoEvent2;
property OnEvent1:TMyClassEvent1 read m_eventEvent1 write m_eventEvent1;
property OnEvent2:TMyClassEvent2 read m_eventEvent2 write m_eventEvent2;
end;

constructor TMyClass.Create;
begin
m_nID:=_Counter;
_Counter:=_Counter+1;
@m_eventEvent1:=nil;
@m_eventEvent2:=nil;
end;

procedure TMyClass.DoEvent1;
begin
if @m_eventEvent1<>nil then m_eventEvent1(self);
end;

procedure TMyClass.DoEvent2;
begin
if @m_eventEvent2<>nil then m_eventEvent2(self,m_nID);
end;

------------

TForm1=class(TForm)...
Object1,
Object2:TMyClass;
procedure ObjectOfMyClass1OnEvent1(Sender:TObject);
procedure ObjectOfMyClass2OnEvent2(Sender:TObject;c:integer);
end;

...
Object1:=TMyClass.Create;
Object1.OnEvent1:=ObjectOfMyClass1OnEvent1;
Object2:=TMyClass.Create;
Object2.OnEvent2:=ObjectOfMyClass2OnEvent2;

Object1.DoEvent1;
Object1.DoEvent2;
Object2.DoEvent1;
Object2.DoEvent2;

Object1.Free;
Object2.Free;
....


 
KSergey ©   (2004-01-18 06:48) [5]

А зачем вот эти строки:

Palladin © (18.01.04 01:55) [4]
constructor TMyClass.Create;
begin
m_nID:=_Counter;
_Counter:=_Counter+1;
@m_eventEvent1:=nil;
@m_eventEvent2:=nil;

end;


Ведь дельфи и без того обнуляет память, выделяемую под экземпляр. Или на всякий случай?


 
KSergey ©   (2004-01-18 06:49) [6]

В дополнение к KSergey © (18.01.04 06:48) [5]

Или причина этому TMyClass= class, т.е. тут не так, как для Object?


 
Думкин ©   (2004-01-18 07:10) [7]

> [6] KSergey © (18.01.04 06:49)

TMyClass=class == TMyClass=class(TObject)


 
KSergey ©   (2004-01-18 10:08) [8]

> Думкин © (18.01.04 07:10) [7]

Призн аюсь, все время путаю чего там по умолчанию от TObject: когда class, или когда object.
Спасибо за напоминание ;)



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
6-93609
Barmutik
2003-11-15 20:30
2004.01.29
Избранное Internet Explorer


1-93420
jiurajhgjhgty
2004-01-16 19:53
2004.01.29
OleContainer и excel


14-93625
Карелин Артем
2004-01-08 15:32
2004.01.29
Басик-> Дельфи или Басик-> Си. Где найти прогу для перевода?


1-93422
GrayFace
2004-01-16 19:00
2004.01.29
Как проверить, нажата ли средняя кнопка мыши?


7-93718
LORDIK
2003-11-10 20:36
2004.01.29
Осталось оперативки.