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

WinDev Discussion :

ouvrir une fenêtre depuis une classe


Sujet :

WinDev

  1. #1
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut ouvrir une fenêtre depuis une classe
    Bonjour,
    J'ai une classe qui ouvre une fenêtre depuis à partir de son constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PROCEDURE Constructor()
    Open(MyForm,DonneGUID)
    // Faire d'autre traitement ...
    trace("Fenêtre ouverte")
    // Code d’instanciation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    o is object MyClass
    La fenêtre s'ouvre mais le code qui se trouve après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     // Faire d'autre traitement ...
    trace("Fenêtre ouverte")
    ne s’exécute pas !
    comment faire pour qu'il s’exécute ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Bonjour,
    Ouvre() est une fonction bloquante, il faut utiliser ici OuvreSoeur().

    Tatayo.

  3. #3
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    J'obtiens l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Vous avez appelé la fonction OuvreSoeur.
    Le traitement en cours n'est pas celui d'une fenêtre ou d'un de ses champs.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Peut-être OuvreFille() alors ?
    Sinon il faudra faire autrement...

    Tatayo.

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    je pense que le code Trace devrait ne s'exécuter que lorsque la fenêtre finit de s'ouvrir soit dans le code de fin d'initialisation de MyForm ...

    bon courage,

    Nicolas

  6. #6
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    c'est ça ce que je cherche le code après l'ouverture de la fenêtre doit s'exécuter en parallèle que l'ouverture de la fenêtre elle même
    J'ai essayé une piste c'est d'ouvrir cette fenêtre depuis un Thread, mais j'arrive pas !
    tatayo => la OuvreFille() ou même MDIOuvre est idem

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    556
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 556
    Points : 1 198
    Points
    1 198
    Par défaut
    Bonjour,

    vous pouvez vous inspirer de cet exemple :
    http://doc.pcsoft.fr/fr-FR/?3077015&...ead_secondaire

    Qui est un extrait du projet exemple : "WD Messagerie instantanée"

    Cordialement.

  8. #8
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    Il faut utiliser OuvreSoeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE OuvertureChat(nParam,nContact)
    OuvreSoeur(FEN_Message, nContact)

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    Bonjour,
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Ouvre() est une fonction bloquante, il faut utiliser ici OuvreSoeur().

    Tatayo.
    Citation Envoyé par tunizar Voir le message
    Bonjour,
    J'obtient l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Vous avez appelé la fonction OuvreSoeur.
    Le traitement en cours n'est pas celui d'une fenêtre ou d'un de ses champs.

    Citation Envoyé par tunizar Voir le message
    Bonjour,
    Il faut utiliser OuvreSoeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE OuvertureChat(nParam,nContact)
    OuvreSoeur(FEN_Message, nContact)
    J'ai raté un épisode ?

    Tatayo.

  10. #10
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    non, t'as rien raté
    je n'ai pas dis que la solution est dans OuvreSoeur mais j'ai dis que l'exemple parle de OuvreSoeur et au début de la discussion j'ai noté que ce n'est pas possible vu l'erreur que j'ai signalé

    là j'essaye de passer par Thread et je pense qu'une solution dans ce sens verra le jour ce weekend
    à moins que t'as une autre ?

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 247
    Points : 12 885
    Points
    12 885
    Par défaut
    La différence entre ton code et l'exemple (enfin ce que j'en ai vu) est que l'ouverture de la fenêtre se ferait non dans le constructeur de la classe, mais dans un thread d'une fenêtre.
    Le constructeur de la classe se "borne" à envoyer un signal à cette fenêtre.
    C'est une piste à creuser.

    Tatayo.

  12. #12
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    C'est ok avec les Thread , ça marche
    la solution :
    L'ouverture de la fenêtre se fait dans une méthode de la classe (une procédure globale marche mieux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE ThreadMethode(sThreadName is string)
    IF WinStatus(::WINDOW_FILE_NAME) = NotFound THEN 
    	Open(::WINDOW_FILE_NAME)
    END
    ThreadWait(sThreadName,100)
    Création du thread dans le constructeur du classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // proc global
    ThreadExécute(::csThreadSuffix+:ThreadId,threadNormal,ThreadProcGlob,::csThreadSuffix+:ThreadId)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Méthode
    ThreadExécute(::csThreadSuffix+:ThreadId,threadNormal,ThreadMethode,::csThreadSuffix+:ThreadId)
    ainsi à partir d'une classe l'ouverture de la fenêtre n'est plus bloquante et il est possible d'agir sur cette fenêtre depuis la classe !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gObjControl = new ClassControl()
    gObjControl.ChangingTitle()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    PROCEDURE ChangingTitle()
    Trace("code exécuté après l'ouverture de la fenêtre"+CR+...
    dbgInfo(dbgTraitement,dbgTraitementEnCours)+CR+...
    dbgInfo(dbgTraitement,dbgTraitementEnCours))
    IF YesNo(No,"Voulez vous agir sur la fenêtre") THEN
    	Info("Réponse oui")
    	MainWindow..Title =  "Je suis modifiée par ma classe : "+object..Class
    		ELSE
    		Error("Réponse Non !!!")
    		MainWindow..Title = MainWindow..Name
    END
    Info(MainWindow..Title)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2015, 21h19
  2. Réponses: 1
    Dernier message: 12/05/2010, 16h07
  3. Afficher une fenêtre depuis une DLL
    Par swayvill dans le forum C++
    Réponses: 1
    Dernier message: 07/01/2007, 16h43
  4. [JAVASCRIPT] Renseigner un champ d'une fenêtre depuis une autre fenetre
    Par cobol60 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/07/2006, 13h05
  5. Fermer une fenêtre depuis une autre...
    Par nicolb dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/03/2005, 10h22

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