การสร้าง Event ของ Object มีขั้นตอนดังนี้
1. ประกาศตัวแปรชนิดใหม่โดยให้ type เป็น procedure of object เช่น
type TExampleEvent = procedure of object; หรือ
กรณีที่มีการส่ง Parameter เช่น
type TExampleEvent = procedure (Parameter1: String) of object;
2. ประกาศตัวแปรโดยอ้างถึงชนิดข้อมูลที่เราได้สร้างไว้ในขั้นตอนที่ 1 ซึ่งอาจจะประกาศเป็นแบบ Protect เช่น
Protected
fMyEvent: TExampleEvent;
3. สร้าง property โดยอ้างถึงตัวแปรที่เราประกาศไว้ในข้อ 2 และให้ ชนิดข้อมูลเป็นไปตามที่ประกาศไว้ในข้อ 1 ซึ่งการประกาศนั้นจะต้องเป็นแบบ published เช่น
Published
property OnNewEvent: TExampleEvent read fMyEvent write
fMyEvent;
4. สร้าง procedure เพื่อใช้ในการกำหนดตำแหน่งที่จะเกิด
Event โดยจะต้องมีการตรวจสอบการประกาศ ด้วยคำสั่ง Assigned
เช่น
private
procedure callEvent;
....
implementation
procedure callEvent;
begin
if assigned(fMyEvent) then
fMyEvent(parameter);
end;
5. เรียกใช้ procedure ที่สร้างไว้ในขั้นตอนที่ 4 ณ ตำแหน่งที่เราต้องการสร้าง event เช่น กรณีที่ Object ได้เริ่มทำงาน หรือทำงานเสร็จสิ้น เป็นต้น
ตัวอย่าง Class ที่สมบูรณ์
Type
TExampleEvent = procedure (parameter1: string) of
object;
TExample = class(TObject)
private
fMyEvent: TExampleEvent
procedure CallMyEvent;
procedure DoExecute;
published
property MyEvent: TExampleEvent
read fMyEvent write fMyEvent;
end;
Implementation
procedure DoExecute;
begin
//Start execute
...
//Call Event
CallMyEvent;
end;
procedure CallMyEvent;
begin
if assigned(fMyEvent) then
fMyEvent(parameter 1);
end;
ทำอย่างนี้เพื่ออะไรครับเนี่ย
เวลาใช้งาน คลาส TButton มั๊ยครับ คือคลาสปุ่มกดนะครับ เวลากดปุ่มจะเกิด Event การกดปุ่มนะครับ นั่นแหละครับคือ Event แล้ว ถ้าเราจะทำคลาสใหม่ขึ้นมาคลาสนึง แล้วต้องการให้สามารถตอบสนองเหตุการณ์ได้เหมือนกันก็ต้องเขียนแบบนี้ครับ