Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 2013
-
8 sept. 2008 à 12:49
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
10 sept. 2008 à 09:11
Bonjour ,
Dans une classe je fais ceci
(constructeur / destructeur et co = ok )
type
TMyClass = class(TObject)
private
fMyEvent : TNotifyEvent;
public
procedure ProcedureXY;
property MyEvent : TNotifyEvent read fMyEvent write fMyEvent ;
end;
implementation
procedure TMyClass.ProcedureXY;
begin
...
if(Assigned(fMyEvent )) then fMyEvent(self);
...
end;
quand je crée une occurrence de TMyClass je fais donc
procedure MonEventDansLautreClass
begin
// trt quelconque de l'event
end;
var
i : TMyClass;
begin
i := TMyClass.Create( ... );
i.MyEvent := MonEventDansLautreClass;
mais ça ne compile pas ,
Types incompatibles : 'pointeur de méthode et procédure normale'
Comment k'on fait alors ?
plus sérieusement je ne comprends pas de trop donc si une âme charitable passe par ici , qu'elle m'explique cela calmement
Merci
{ ----- }
public
class function NewInstance: TObject; override;
procedure FreeInstance; override;
end;
var
EventManager : TConsoleEventManager = nil;
class function TConsoleEventManager.NewInstance: TObject;
begin
if EventManager = Nil then
begin
EventManager := TConsoleEventManager(inherited NewInstance);
Result := EventManager;
end
else
begin
raise Exception.Create(ClassName + ' : This object is used at singleton.');
end;
end;
procedure TConsoleEventManager.FreeInstance;
begin
inherited FreeInstance;
EventManager := Nil;
end;
{ Coder Events }
procedure TConsoleEventManager.DoEventA(Sender: TObject);
begin
writeln('Hello World!');
end;
procedure TConsoleEventManager.DoEventB(Sender: TObject);
begin
writeln('I''m the king of the world!');
end;
{ * Event Manager End * }
type
TTestEvent = procedure(Sender: TObject) of object;
TTest = class
private
fEvent: TTestEvent;
public
procedure RunEvent;
property Event: TTestEvent read fEvent write fEvent;
end;
procedure TTest.RunEvent;
begin
if Assigned(fEvent) then
fEvent(Self);
end;
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 8 sept. 2008 à 23:41
Types incompatibles : 'pointeur de méthode et procédure normale'
ca veut dire que les procedures ne sont pas du meme type. en l'occurence, on attend une procedure d'un objet, mais tu lui fournit un procedure globale (ie. pas d'objet).
Dans le cas d'un evenement, cela vient du fait que le type est declaré comme suit :
type
TNotifyEvent = procedure(Sender:TObject) of object ;
qui signifie que la fonction associée a l'evenement doit appartenir a un objet.
donc rien ne t'empeche de definir ton propre type pour remplacer TNotifyEvent
type
TNormalNotifyEvent = procedure(Sender: TObject);