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

Composants VCL Delphi Discussion :

Comment attendre que la fiche MDI se termine avec de lancer mon process?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut Comment attendre que la fiche MDI se termine avec de lancer mon process?
    Bonjour à tous,

    Voilà je pense avoir un problème au niveau de la fonction Open de mon programme. Quand j'ouvre un de mes projets, j'ai parfois un message d'erreur m'indiquant :

    "Erreur lors de la lecture de tcBottom.Tab.Strings: Impossible de creer la fiche. Aucune fiche Non MDI active."
    Mais voilà sur mon ordi cela ne m'arrive qu'une fois sur 100 !! et chez certaines personnes (des clients) ils ont le message à chaque ouverture d'un projet et d'autres pas une fois depuis qu'ils utilisent le logiciel ?!?

    Vous imaginez tres bien que ce bug est un vrai casse-tête pour moi !!

    Voici mon bout de code pour l'ouverture de la fiche Child :

    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
    PROCEDURE TMain.aOpenExecute( Sender : TObject );
    var
      SR: TSelectRequest;
      i: Integer;
      Z: Boolean;
    begin
      SR:=TSelectRequest.Create(Self);
      try
        SR.Caption:='Open project...';
        if (SR.ShowModal=mrOk) then
        begin
          Z:=(MDIChildCount=0);
          for i:=0 to SR.Files.Count-1 do
            with TChild.Create(Self) do
            begin
              // Ce Load charge toutes les données du projet
              Load(SR.Files[i]);
              // Là je fais une sauvegarde du projet.
              CopyFile(PChar(FWorkingPath+'requests\'+SR.Files[i]+'\'+'data.mp'), PChar(FWorkingPath+'requests\'+SR.Files[i]+'\'+'data.BAK'), False);
            end;
          if Z then
            ActiveMDIChild.WindowState:=wsMaximized;
        end;
      finally
        SR.Release;
      end;
    end; {* PROC .aOpenExecute *}
    D'avance merci pour votre aide,
    Bruno

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Moi j'en reviejs toujours au meme point : Pourquoi utiliser les MDI la ou une simple Form les remplace convenablement dans 90% des cas ....
    D'autant que MDI n'ets plus supporté depuis au moins D6, si mes souvenirs sont bons

  3. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Citation Envoyé par Bruno13 Voir le message
    cela ne m'arrive qu'une fois sur 100 !
    C'est une fois de trop,

    Il y a une logique à ce défaut, cherche avec le pas-à-pas, ou du côté des paths et nom de fichiers, qu'à mon humble avis tu dois avoir ton z à zéro (pourquoi ?), et du coup pas de fiche MDI créée et planton...
    --
    jp

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut
    Salut Clorish et JPT,

    Pour l'histoire des MDI hélas je reprend un soft qui a plus de 4 ans.

    Apres pour l'histoire du Z qui est vide, il faut que je creuse cela.

    Question : Est-ce que cela peut provenir du fait que dans mon Load j'ai des affectations de texte à certains composants contenu dans la fiche Child.?

    D'avance merci

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    [QUOTE=Bruno13;2579071]
    Pour l'histoire des MDI hélas je reprend un soft qui a plus de 4 ans.[quote]
    Raison de plus pour en profiter de le faire evoluer ^^

    Citation Envoyé par Bruno13 Voir le message
    Question : Est-ce que cela peut provenir du fait que dans mon Load j'ai des affectations de texte à certains composants contenu dans la fiche Child.?
    C'est fort possible.
    Pourquoi ne pas creer un gestionaire "OnCreate" generique pour toutes les fiches et y placer le code de chargement ?
    Tu peux detecter qui est creer (pour charger Fiche[i]) via le sender ou un tag que tu auras placé precedement.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut
    Yop,

    ça m'interesse cette methode dans le OnCreate, par contre un petite aide de ce que je dois faire serait la bienvenue.

    Pour le passage MDI->SDI, hélas pas trop le temps hélas de refaire tout.

    Amitiés

  7. #7
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Pour la gestion des gestionnaires c'est tres simple. Il suffit de declarer dans la section private (ou public) une procedure de type Tnotifyevent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure ChildMDICreate(Sender : TObject);
    telle que l'aurait fait delphi.

    Ensuite on, affecte cette methode a toutes les fenetres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Child.OnCreate := Self.ChildMDICreate;
    On implemente cette fonction en y placant le code que tu souhaite effectuer en agisant sur TChild(Sender)

Discussions similaires

  1. Comment attendre un thread qu'il se termine?
    Par badreddine540 dans le forum Général Java
    Réponses: 1
    Dernier message: 15/10/2010, 12h29
  2. Réponses: 7
    Dernier message: 07/07/2010, 12h17
  3. Réponses: 6
    Dernier message: 27/03/2009, 13h16
  4. Comment attendre que tous les thread lancés soient morts pour lancer une action.
    Par rgesnot dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 31/03/2007, 20h27
  5. Réponses: 8
    Dernier message: 24/10/2006, 10h36

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