Application MDI

Jeankiki Messages postés 18 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 11 août 2003 - 13 août 2002 à 22:14
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Derniè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

7 réponses

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
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.
0
Jeankiki Messages postés 18 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 11 août 2003
13 août 2002 à 23:38
Merci pour ton aide, MessagerieForm est
var
MessagerieForm: TForm;

voici le code de AffichMess

procedure AffichageMessagerie(Sender: TObject);
begin
MessagerieForm:= TMessagerieForm.Create(Application);
end;

exports AffichageMessagerie name 'AffichMess';

Jeankiki
0
Youyou0214 Messages postés 89 Date d'inscription jeudi 11 avril 2002 Statut Membre Dernière intervention 3 juillet 2003
14 août 2002 à 03:38
Je vois que tu travsaille bien sur notre projet!
Aller, Bon courage!
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jeankiki Messages postés 18 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 11 août 2003
15 août 2002 à 01:29
Non cela ne vas pas car Sender est de type TObject et TMessagerieForm est de type TForm ;)
Merci quand même
Jeankiki
0
Jeankiki Messages postés 18 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 11 août 2003
15 août 2002 à 01:30
Merci mais tu sais je n'ai pas encore fait grand chose, mais bon j'y travaille
Jeankiki
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
16 août 2002 à 00:07
Rien ne t'empêche de changer les paramètres de ta procédure ! :)

Bestiol.
0
Rejoignez-nous