silmortes
Messages postés1Date d'inscriptionmardi 18 mars 2003StatutMembreDernière intervention 7 août 2003
-
7 août 2003 à 14:53
cs_Shagshag
Messages postés2Date d'inscriptiondimanche 2 mai 2004StatutMembreDernière intervention18 mai 2005
-
9 mai 2004 à 23:30
Slt !!!!
J'ai un soucis j'ai un objet TIBDatabase que je créé dynamiquement dans ma dll :
je cherche à associé à son Evènement BeforeDisconnect à une procédure :
PROCEDURE TDatabaseDisconnect(Sender: TObject); que j'ai créé mais ca passe pas à la compil sur
Database.BeforeDisconnect := TDatabaseDisconnect;
il me dit Types Incompatibles(Pointeur de Méthode et procédure norale)...
j'ai vu d'autre post sur le sujet mais toujours dans des forms, pas dans une dll, donc je sais pas trop ce qu'il manque dans mon source pour que cela fonctionne ....
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 8 août 2003 à 01:10
Quelle est la différence entre une procédure et une méthode ?
Réponse : une procédure est une procédure.
Une méthode est une procédure d'un objet !
Si tu as vu des procédures déclarées dans des classes, alors ça s'appelait des méthodes.
Inutile de créer un descendant de TForm. N'importe quelle classe peut convenir :
type
TDummy = class
private
procedure TDatabaseDisconnect(Sender: TObject);
end;
var
Dummy: TDummy;
Ici, la déclaration est faite dans la section Private. Elle pourrait l'être dans une section public ou Protected que celà n'y changerait rien sauf si tu fais référence à cettte classe à partir d'une autre unité. Dans ce dernier cas, la déclaration dans une section Public semble toute indiquée.
Ensuite, tu implémentes normalement :
procedure TDummy.DatabaseDisconnect(Sender: TObject);
begin
//ton code ici
end;
Bien entendu, tu devras créer une instance de la classe TDummy avant de l'utiliser. Celà peut se faire dans une section Initialization, par exemple, et sa destruction dans la partie...Finalization. Si tu ne disposes pas de fiche ni de DataModule, c'est la manière la plus pratique :
Pour le reste, ton code est juste. Il faut juste veiller à déclarer la classe TDummy avant d'affecter le pointeur sur la méthode DataBaseDisconnect.
Enfin, pour finir, si tu regardes comment est déclarée la méthode BeforeDisconnect de TIbDataBase, tu remarqueras la déclaration suivante :
property BeforeDisconnect: TNotifyEvent read...
et, TNotifyEvent est ainsi déclaré :
TNotifyEvent = procedure (Sender: TObject) of object;