Jeankiki
Messages postés18Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention11 août 2003
-
13 août 2002 à 22:14
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 2005
-
16 août 2002 à 00:07
Salut à tous,
Je cré une application MDI, la fenêtre principal est mis comme FormStyle= fsMDIForm, mais j'aimerai mettre toutes les fenêtres dont FormStyle= fsMDIChild dans une DLL.
Dans la DLL elles sont mise sur FormStyle= fsMDIChild mais quand j'exécute je reçois le message d'erreur:
"Exception class EInvalidOperation with message 'Cannot create form. No MDI forms are currently active.'....
Voici le code qui fait appelle à la DLL
procedure TMainForm.Messagerie1Click(Sender: TObject);
var
DLLHandle: THandle;
AffichMess:procedure(Sender: TObject); stdcall;
begin
DLLHandle:= LoadLibrary('DllMessgerie.dll');
if DLLHandle= 0 then
ShowMessage('Erreur dans le chargement de la DLL');
AffichMess:= GetProcAddress(DLLHandle, 'AffichMess');
AffichMess(MessagerieForm);
end;
Merci pour votre aide.
Jeankiki
A voir également:
Runtimeerror: too early to create image: no default root window
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 13 août 2002 à 23:31
Salut !!
D'une, y a juste un petit problème qui pourrait entrainer une "erreur fatale" dans certain cas :
tu as mis :
if DLLHandle= 0 then
ShowMessage('Erreur dans le chargement de la DLL');
AffichMess:= GetProcAddress(DLLHandle, 'AffichMess');
AffichMess(MessagerieForm);
Donc, si jamais la DLL n'était pas chargée pour une quelconque erreur, le prog essaiera quand même d'utiliser la procedure AffichMess... pour palier à ce problème, tu peux utiliser un bloc "Try" avec un "Except" à la fin, ou mettre "if DLLHandle= 0 then
begin
ShowMessage('Erreur dans le chargement de la DLL');
Exit;
end;"
Sinon, pour ton "vrai" problème, il faudrait d'après moi que tu éclaircisses deux trois trucs : à quoi correspond "MessagerieForm" ? Si le paramètre de AffichMess est bel et bien Sender, alors c'est "MainForm" qu'il faut donner... Je me trompe ?
A moins que MessagerieForm soit elle aussi en "fsMDIForm"...
Peut-être pourrais-tu donner la partie du code de AffichMess qui ouvre la fenêtre ?
Voilà... J'espère avoir bien compris ce que tu demandais, et t'avoir aidé un peu !
Bestiol.
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 14 août 2002 à 13:14
Salut !!
Peut-être vais-je dire une bétise, mais ne devrais-tu pas remplacer "TMessagerieForm.Create(Application);" par "TMessagerieForm.Create(Sender);"
Ainsi, d'après moi (je ne peux malheureusement pas faire de test !), la form sera bien créée avec pour parent la form que tu as passé en paramètre de ta procédure... il faut donc bien que tu passes MainForm en paramètre de AffichMess dans ton prog...
Bien sûr, ta form MessagerieForm doit être en fsMDIChild, ce que tu as déjà fais, si j'ai bien compris !
Voilà, essaie ça et dit moi comment ça se présente, stp !!
Bestiol.
Vous n’avez pas trouvé la réponse que vous recherchez ?