Les événements

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.