Jusque FlashPascal 12.06.25, l'unité Flash8 déclarait les événements sous la forme:
type
MovieClip = external class
property onPress: procedure of object;
end;
Il était possible d'affecter une méthode à cette propriété ou de créer une méthode portant le même nom.
type
MonClip = class(MovieClip)
procedure onPress; // méthode portant le même nom
procedure m2Press; // méthode qui sera affectée à la propriété
end;
var
m1: MonClip;
m2: MovieClip;
begin
m1 := MonClip.Create(_root, 'm1', 1); // la méthode onPress est automatiquement appelée quand on clique sur le clip
m2 := MovieClip.Create(_root, 'm2', 2);
m2.onPress := m1.m2Press; // on attache le code de m2Press à l'événement onPress
end;
Depuis la version 12.07.02, les événements sont déclarés comme des méthodes virtuelles:
type
MovieClip = external class
procedure onPress; virtual;
end;
Il est alors possible de surcharger cette méthode avec le mot-clé override.
Mais il est toujours possible de lui assigner une méthode ! De plus, la méthode en question
peut déclarer un paramètre Sender suplémentaire qui pointe sur l'objet appelant.
type
MonClip = class(MovieClip)
procedure onPress; override; // override est ici nécessaire
procedure m2Press; // même principe qu'avec la propriété
procedure m3Press(Sender: TObject); // même principe mais avec un "Sender"
end;
var
m1: MonClip;
m2: MovieClip;
m3: MovieClip;
begin
m1 := MonClip.Create(_root, 'm1', 1); // même fonctionnement que précédemment
m2 := MovieClip.Create(_root, 'm2', 2);
m3 := MovieClip.Create(_root, 'm3', 3);
m2.onPress := m1.m2Press; // même fonctionnement que précédemment
m3.onPress := m1.m3Press; // même fonctionnement que précédemment, mais avec un Sender
end;
Notez que lorsque vous affectez une méthode à une méthode virtuelle, seule l'instance
modifiée est affectée. Pour modifier le comportement de la classe, il faut obligatoirement
surcharger sa méthode par un override.