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

Delphi Discussion :

XE7 [VCL-FMX] Fermeture d'une fenêtre


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut XE7 [VCL-FMX] Fermeture d'une fenêtre
    Bonjour,

    j'ai résolu mon problème autrement mais je me pose toujours la question (valable aussi bien pour une Form appelée par Show que par ShowModal).

    Dans une séquence d'affichage d'une Form à partir de quel comment et comment peut-on fermer cette Form ?

    Mon problème était celui-là :

    Une Form1 dispose d'une dbGrid. Un double-clic sur une ligne ouvre (Show ou ShowModal suivant les circonstances) une Form2 qui active son Query pour bloquer l'enregistrement. Si cela se passe mal, je veux que ma Form2 se ferme automatiquement.
    L'activation du Query était placée initialement dans le Create de la Form2... L'exception déclenchée par le Query ne ferme pas à ce niveau la Form2.

    J'ai réglé le problème à partir de la Form1. Mais quand même...

    En supposant que le déclenchement d'une exception dans le Create d'une Form se déclenche, comment ferme-t-on automatiquement cette Form ?

    Procédure d'appel en VCL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TfElv.btUPDClick(Sender: TObject);
    begin
      gelID := DBGrid1.DataSource.DataSet.FieldByName('elID').AsString;
      if not Assigned(fElvUID) then begin
        with TfElvUID.Create(nil) do
          try
            ShowModal;
          finally
            Free;
          end;
          DBGrid1.DataSource.DataSet.Refresh;
      end;
    end;
    Merci.
    Dernière modification par Invité ; 29/11/2014 à 13h44. Motif: Abonnement mail

  2. #2
    Invité
    Invité(e)
    Par défaut
    ... sinon autre solution : lancer un Timer (Intervall = 1) dans le Create de Form2 (appelée ici fElvUID)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TfElvUID.FormCreate(Sender: TObject);
    begin
      tiCREATE.Enabled  := True;
     {IHM}
      RAZ(TForm(Sender));
      INSEEmess.Caption := '';
    end;
    Si on place un TForm.Close dans une exception figurant dans le code du Timer, l'instruction est exécutée :
    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
    procedure TfElvlUID.tiCREATETimer(Sender: TObject);
    var
      bOK : boolean;
    begin
      tiCREATE.Enabled := False;
      [...]
    { mySQL identification}
      bOK := False;
      with mySQLQuery do try
        TableName := 'xxxxxxx';
     
        with SQL do begin
          Clear;
          Add(sREQ);
        end;
        MacroByName('TABLE').Value := TableName;
     
        with Params do begin
          ParamByName('paID').AsString := lsAID;
        end;
        Open;
        if isEmpty then begin
          MessageDlg( 'Aucun enregistrement.',
                      TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOK], 0);
          Close;
        end else begin
           [...]
           Close;
           bOK := True;
         end;
      except
         {$IFDEF DEBUG}
          on E: EFDDBEngineException do  begin
            Showmessage(E.Errors[0].Message);
          end;
         {$ELSE}
          Close;
         {$ENDIF}
      end;
      if not bOK then begin
        MessageDlg(  'La lecture de l''enregistrement est impossible. ',
                     TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
        Close; //<-- Fermeture de la Form
      end else begin
         with elCODE do begin
          SetFocus;
          SelStart := Length(Text);
        end;
      end;
    end;
    Or pendant le Timer, parallèlement est exécutée une partie du code de création et d'affichage de la fenêtre... D'où la question initiale : à partir de quel événement dans la séquence de création/affichage d'une TForm, un Close est-il utilisable ?
    Dernière modification par Invité ; 29/11/2014 à 13h42.

Discussions similaires

  1. Evènement sur le body lors de la fermeture d'une fenêtre
    Par Yaz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/09/2005, 17h54
  2. Exécuter une action à la fermeture d'une fenêtre
    Par wwave dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 28/07/2005, 15h15
  3. Fermeture d'une fenêtre .dos
    Par VirginieGE dans le forum Windows
    Réponses: 2
    Dernier message: 03/06/2005, 13h56
  4. executer une fonction à la fermeture d'une fenêtre
    Par Oluha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2005, 09h46
  5. Arrêter un ttmt en cours, lors de la fermeture d'une fenêtre
    Par teska dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/12/2004, 14h08

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