Bonsoir,
J'ai créé ce post mais j'ai résolu le problème sur un exemple simple mais pas dans mon application.
Voici donc le problème et le bout de code qui semble fonctionner en théorie
1. Est-il possible qu'une FORM_1 apelle une FORM_2 et que cette dernière demande ensuite la fermeture de FORM_1 tandis que FORM_2 est toujours active ?
FORM_1 est la fiche appelante
FORM_2 est la fiche appelée.
Remarque: il ne faut pas que la Form appelante soit la FORM 1 car sinon, c'est toute l'application qui se termine.
Je voudrais que la fiche Appelée se lance lorsque FORM_1 le demande et se ferme une fois que FORM_2 est lancée.
2. Si cela est viable, dans qu'elle événement de la Fiche appelée dois-je mettre la demande de fermeture de la FORM_1?
Dans mon exemple, je l'ai mis dans activate, je ne sais pas si c'est bien ici qu'il, faut la mettre.
Voici la capture d'écran et le code qui va avec:
En arrière plan (Fond Bleu nuit de la Fiche principale)
Et le code qui va avec de la Fiche appelante sur Fond jaune:
et de la fiche appelée (fond bleu clair):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.Button1Click(Sender: TObject); var H : THandle; begin H := FindWindow(nil,'FICHE APPELEE 2'); if H = 0 then Application.CreateForm(TForm2,Form2) else showmessage('La fiche existe déjà!'); end;
3. Quand je transpose ce code dans mon Application, J'ai une erreur OverStackFlow dans l'activate de la Fiche appellée! Là, je sèche...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 procedure TForm2.FormCreate(Sender: TObject); var H : THandle; begin H := FindWindow(nil,'FICHE APPELANTE 1'); if H = 0 then begin Left := Screen.Width div 2 - Width div 2; Top := Screen.Height div 2 - Height div 2; end else begin Left := Form1.Left + Form1.ClientWidth div 2 - Width div 2; Top := Form1.Top + 130; end; end; procedure TForm2.FormActivate(Sender: TObject); var H : THandle; begin H := FindWindow(nil,'FICHE APPELANTE 1'); if H <> 0 then begin if Form1.CheckBox1.Checked then Form1.Close; end; end;
Je suis preneur de vos remarques!
Bonne soirée
jlmat
Partager