IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Problème de fermeture de l'application


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut Problème de fermeture de l'application
    Bonjour à tous,

    J'ai créé 3fiches, dont FSplash (Trouvé ds le FAQ Delphi), FLogin (pour l'identification de l'utilisateur) et la fiche principale FMain.

    En fait mon seul problème, c'est quand on clique sur annuler dans FLogin mais celui ci ne veut pas quitter.

    Voici le code du projet:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    program gecom;
     
    uses
      Forms,
      SysUtils,
      UMain in 'Source\UMain.pas' {FMain},
      ULogin in 'Source\ULogin.pas' {FLogin},
      UDM in 'Source\UDM.pas' {DMPOS: TDataModule},
      U_Societe in 'Source\U_Societe.pas' {F_Societe},
      U_Article in 'Source\U_Article.pas' {F_Article},
      USlpash in 'Source\USlpash.pas' {Splash},
      UDMEntreprise in 'Source\UDMEntreprise.pas' {DMEntreprise: TDataModule},
      Code in 'Source\Code.pas',
      CodeSQL in 'Source\CodeSQL.pas',
      UDMLocalite in 'Source\UDMLocalite.pas' {DMLocalite: TDataModule},
      U_Emp in 'Source\U_Emp.pas' {F_Emp},
      U_Emp_Ges in 'Source\U_Emp_Ges.pas' {F_Emp_Ges},
      CodeProc in 'Source\CodeProc.pas',
      U_Emp_Type in 'Source\U_Emp_Type.pas' {F_Emp_Type},
      U_Art_Cat in 'Source\U_Art_Cat.pas' {F_Art_Cat},
      UDB_Refresh in 'Source\UDB_Refresh.pas',
      U_ClientSel in 'Source\U_ClientSel.pas' {F_ClientSel},
      Fonction in 'Source\Fonction.pas',
      U_Art_Add in 'Source\U_Art_Add.pas' {F_Art_Add},
      UDMRapport in 'Source\UDMRapport.pas' {DMRapport: TDataModule};
     
    {$R *.res}
     
     
    begin
      	Application.Initialize;
     
      	Splash := TSplash.Create(Application);
      	Splash.Show;
      	Splash.Update;
     
      	Application.CreateForm(TFMain, FMain);
      	Application.CreateForm(TFLogin, FLogin);
     
    	Application.CreateForm(TDMPOS, DMPOS);
    	Application.CreateForm(TDMLocalite, DMLocalite);
    	Application.CreateForm(TDMRapport, DMRapport);
      	Splash.Close;
     
      	Splash.Release;
     
      	FLogin.Show;
      	REPEAT Application.ProcessMessages;
      	UNTIL(FLogin.Visible=False);
     
      	Application.Run;
    end.
    Et voici le code du Login:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    ....
     
    procedure TFLogin.Quitterlapplication1Click(Sender: TObject);
    begin
       AnimateWindow(FLogin.Handle, 400, AW_BLEND or AW_HIDE);
    	Application.Terminate;
    end;
     
    procedure TFLogin.FormShow(Sender: TObject);
    begin
    	E_Users.Clear;
       E_Pass.Clear;
       E_Users.SetFocus;
     
    	ServerStatus := True;
     
       // Message status du serveur
       if ServerStatus then begin
          SB.Panels[2].Text := MsgServerActif;
          end
       else begin
       	SB.Panels[2].Text := MsgServerInactif;
          end;
    end;
     
    procedure TFLogin.B_ConnecterClick(Sender: TObject);
    var User, Pass : string;
    	code : integer;
       result : boolean;
    begin
    	User := E_Users.Text;
       Pass := E_Pass.Text;
     
       if ServerStatus then begin
       	if (B_Connecter.Enabled) then begin
             // Vérification à la base de données
          	with FLogin do begin
             	Login.Active := False;
     
    				Login.SQL.Clear;
                Login.SQL.Add('SELECT EMPLOYE.ID_EMP, EMPLOYE.NOM, EMPLOYE.PRENOM,' +
    								  'EMPLOYE.ID_TYPEEMP, TYPE_EMP.DENOM');
                Login.SQL.Add('FROM EMPLOYE');
                Login.SQL.Add('INNER JOIN TYPE_EMP ON (EMPLOYE.ID_TYPEEMP = TYPE_EMP.ID_TYPEEMP)');
                Login.SQL.Add('WHERE (EMPLOYE.LOGIN = '+ Quotedstr(User) + ') AND (EMPLOYE.PASS = '+ QuotedStr(Pass) +')');
     
                Login.Active := True;
                code := Login.RecordCount;
     
                // Vérifier si le résultat est correct
                if (code = 1) then begin
                	with FMain do begin
                   	SB2.Panels[2].Text := Login.Fields.FieldByName('ID_EMP').AsString;
                      SB2.Panels[4].Text := Login.Fields.FieldByName('NOM').AsString + ' ' + Login.FieldByName('PRENOM').AsString;
                      SB2.Panels[6].Text := Login.Fields.FieldByName('ID_TYPEEMP').AsString;
                      SB2.Panels[8].Text := Login.Fields.FieldByName('DENOM').AsString;
                      Show;
                      end;
                   FLogin.Hide;
                   //FLogin.Destroy;
                   end
     
                // Si le résultat est incorrect, alors afficher le message d'erreur
                else begin
                	MessageDlg(MsgA003,mtError,[mbOk],0);
                   B_Connecter.Enabled := False;
                	E_Users.Clear;
                   E_Pass.Clear;
                   E_Users.SetFocus;
                   end;
     
    				end;
          	end
     
          // Si le nom utilisateur ou le mot de passe est vide
          else begin
          	E_Users.SetFocus;
          	MessageDlg(MsgA002,mtWarning,[mbOk],0);
       		end;
     
          end;
     
    end;
     
    procedure TFLogin.FormCreate(Sender: TObject);
    var hand : Thandle;
    begin
      hand := CreateRoundRectRgn(0,0,width, height, 15, 15);
      SetWindowRgn(handle, hand, true);
     
      IBDB.Connected	:= True;
      IBTrans.Active	:= True;
      end;
     
    procedure TFLogin.E_PassChange(Sender: TObject);
    begin
    	if ((E_Pass.Text = '') OR (E_Users.Text = '')) then B_Connecter.Enabled := False
       	else B_Connecter.Enabled := True;
    end;
     
    procedure TFLogin.E_UsersChange(Sender: TObject);
    begin
    	if ((E_Users.Text = '') OR (E_Pass.Text = '')) then B_Connecter.Enabled := False
       	else B_Connecter.Enabled := True;
    end;
     
    procedure TFLogin.FormDestroy(Sender: TObject);
    begin
    	IBDB.Connected := False;
       IBTrans.Active := False;
    end;
     
    end.
    Merci de m'aider.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Salut ;
    pour cacher la form en cours alors que tu veux me semble t'il la détruire

    donc a ce moment la tu mets a la place un
    Et sur ta forme tu crées un Onclose ' se que tu fais sur la fermeture la tu peux libérer ta mémoire, initialiser des variables globales ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TFLogin.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
         OnClose := Nil ;
         Action := CaFree ;
    end;
    et voici le minimum que doit contenir ton Onclose commence par dire que le onclose := nil que le action := caFree ( libération de l'objet) n'appel pas le onclose d'un objet détruit , et demande l'action de destruction.

    cela devrai fonctionner

    ton TFLogin.FormDestroy(Sender: TObject); est celon moi de trop, le destructeur va libérer automatiquement les IBDB et IBTrans ... mais ceci reste a vérifier je n'utilise pas .

    @ +++

    a j'oubliais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    FLogin.Show; 
         REPEAT Application.ProcessMessages; 
         UNTIL(FLogin.Visible=False); 
     // un simple Showmodal est sans doute plus adapté qu'un Show 
     // surtout si on libére l'objet sur le onclose :)
     // ca évite en plus le repeat qui ne fait que attendre

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Points : 90
    Points
    90
    Par défaut
    Merci bcq pour le tuyau, ca y est ca marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de fermeture de l'application
    Par corgato dans le forum Qt
    Réponses: 10
    Dernier message: 07/06/2010, 13h26
  2. problème de fermeture de l'application
    Par allanibu dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2008, 12h03
  3. Problème de fermeture de l'application
    Par devat27 dans le forum Langage
    Réponses: 9
    Dernier message: 20/03/2008, 12h05
  4. [VB2005] Problème de fermeture de l'application
    Par exclusif dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/08/2006, 15h32
  5. [C#] problème de fermeture d'une application
    Par padodanle51 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/05/2006, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo