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 :

Empêcher ouvrir une form deux fois


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut Empêcher ouvrir une form deux fois
    Bonjour,

    Ma question est dans le intitulé de mon message. J'ai une form MDI faisant appel au form fsMDIChild de cette manière en passant par les menus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form1 := TForm1.Create(Application);
      Form1.Width := 870;
      Form1.Height := 606;
    En cliquant plusieurs fois sur le menu en question on peux ouvrir la form autant de fois que l'on veux. Y'at-il un code en Delphi permettant de créer une seul la form?.
    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 679
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 679
    Points : 13 082
    Points
    13 082
    Par défaut
    Si Form1 est assigné, la fiche existe déjà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if not Assigned(Form1) then
    begin
      Form1 := TForm1.Create(Application);
      Form1.Width := 870;
      Form1.Height := 606;
    end;

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 846
    Points
    24 846
    Par défaut
    En complément, tu peux ajouter un Show pour afficher la fenêtre au premier plan si celle-ci est caché par une autre ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TMDIMainForm.MenuClick(Sender: TObject);
    begin
      if not Assigned(Form1) then
      begin
        Form1 := TForm1.Create(Application);
        Form1.Width := 870;
        Form1.Height := 606;
      end;
     
      Form1.BringToFront();
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Merci a vous tous ça marche.
    Bon courage.

  5. #5
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Salut,

    Je reviens sur ma question d'hier. A la suite de la mise en pratique de if not Assigned, j'ai remarqué quelque chose.
    Si on clique sur un menu et la form se créée, ensuite on ferme la form, et enfin on clique à nouveau sur le menu pour ouvrir la fiche fermée auparavant il y'a une violation d'accès. Pourquoi.
    En clair il n'est plus possible de d'ouvrir une form fermée il y'a un instant.
    Merci de me guider à nouveau.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 679
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 679
    Points : 13 082
    Points
    13 082
    Par défaut
    Form1 est invalide si tu ne le forces pas à nil.

    Il faut savoir depuis où tu libère la fiche.

    Si c'est par une action extérieure à la fiche, utilise FreeAndNil(Form1).
    Si c'est depuis la fiche, ajoute dans OnDestroy:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Form1 := nil;
    end;

  7. #7
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    C'est correcte. Merci de m'avoir enseigné.

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

Discussions similaires

  1. [C#] Comment ouvrir une form dans un panel
    Par Le Basque dans le forum Windows Forms
    Réponses: 7
    Dernier message: 28/02/2007, 12h31
  2. [C#2] Empêcher qu'une form prenne le contrôle
    Par DeusXL dans le forum Windows Forms
    Réponses: 7
    Dernier message: 17/06/2006, 20h18
  3. [C#] Impossible d ouvrir une Form
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/04/2006, 14h28
  4. (VB6)Ouvrir une form en mode ajout à parti d'une autre
    Par djancof dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 13/02/2006, 14h40
  5. Ouvrir une form via une ComboBox
    Par Conficius dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/11/2005, 16h11

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