Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
6-93603
Exceed
2003-11-25 00:25
2004.01.29
WebBrowser и прокси


14-93689
SH
2004-01-06 14:12
2004.01.29
Граббер картинок


3-93348
raptorus
2004-01-04 10:10
2004.01.29
Здравствуйте, Мастера. Подскажите как перерисовывавать ячейки


14-93694
Layner
2004-01-06 11:12
2004.01.29
А кому Майкла Джексона жаль?


3-93390
pashtet
2003-12-30 14:13
2004.01.29
TtreeView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский