Bonjour à tous,
Mon problème est simple :
J'ai une fenêtre, et je souhaite que si l'utilisateur ferme la fenêtre alors qu'il a modifié quelque chose, une petite boite de dialogue lui demande s'il souhaite enregistrer ses modifications ou pas. Jusque là rien de bien sorcier.
Sauf que tout en se passe pas comme prévu :
Premier cas : il n'a rien modifié, il ferme la fiche => pas de message de confirmation => ça c'est ok c'est normal
Deuxième cas : il a modifié quelque chose, une boite de dialogue s'affiche => il répond oui => et là bha ma fenêtre ne se ferme pas !!!
J'ai essayé de mettre CanClose à true etc mais rien y fait ... la seule solution que j'ai trouvé c'est à la fin de mon CloseQuery faire Close() mais cela ne me convient pas du tout (a moins de ne pas avoir le choix ?) :
Voici mon code (enfin la partie qui nous intéresse) :
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 procedure TfrmCalibrageCamera.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if (fModifie and (MessageDlg( 'Voulez-vous enregistrez ces nouveaux paramètres avant de fermer ?', mtConfirmation, [mbYes,mbNo], 0) = mrYes)) then btEnregistrer.Click(); ResetEvent(fEventPrisePhoto); delierComposantsCamera(); // CanClose := true; Ne change rien // Close; Fonctionne mais a mon avis y'a mieux à faire end; procedure TfrmCalibrageCamera.btEnregistrerClick(Sender: TObject); begin fModifie := false; if btAppliquer.Enabled then btAppliquer.Click(); btAppliquer.Enabled := false; btEnregistrer.Enabled := false; fThreadsCamera[fNumSelect].EnregistrerParametresCamera('./camera'+IntToStr(fNumSelect)+'.ini'); end; procedure TfrmCalibrageCamera.btAppliquerClick(Sender: TObject); begin with fThreadsCamera[fNumSelect] do begin SetVideoFormat(StrToInt(cbVideoFormat.Text)); SetVideoMode(StrToInt(cbVideoMode.Text)); SetHauteur(StrToFloat(edHauteur.Text)); SetFocale(StrToFloat(edFocale.Text)); SetAngle(StrToFloat(edAngle.Text)); SetXPositionCamera(seXPosition.Value); SetYPositionCamera(seYPosition.Value); SetTailleCamera(seXTaille.Value,seYTaille.Value); InitialiserCamera(); ResetCamera(); end; // with btAppliquer.Enabled := false; end;
Voila comme ça vous avez tout ce qu'il faut
Merci à quiconque pourra m'aider
Partager