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

wxWidgets Discussion :

interaction entre c++ function and dehors wxwidgets


Sujet :

wxWidgets

  1. #1
    Membre chevronné Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Par défaut interaction entre c++ function and dehors wxwidgets
    Bonjour,
    je me bats depuis quelques jours avec un problème de wxTextCtrl dans lequel je voudrais faire passer mes messages d'une importante fonction en pure c++.
    J'ai donc dans FilDatMain.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mTextLog = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 60), wxTE_MULTILINE|wxTE_READONLY);
    et FilDatMain.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wxTextCtrl* mTextLog;
    J'ai la fonction qui est appelée depuis FilDatMain.cpp comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void FilDatFrame::OnButton1Click(wxCommandEvent& event)
    {
    void makedata();
    }
    Dans void makedata() je veux faire entrer les messages (logs et autres) dans la *mTextLog.
    J'ai déjà tout essayé mais rien ne va sans erreurs comme par ex.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *mTextLog->AppendText(wxT("Hello, World!\n")); // ici est l'erreur
    qui donne makedata.cpp:88: error: void value not ignored as it ought to be

    J'ai essayé d'autres méthodes mais je fais que buter la tête contre le mur

  2. #2
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Déclarer un wxTextCtrl en global et l'affecter au moment du .h

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Quelque part inclu par tout le monde
    static wxTextCtrl gError=0;
     
    // Puis au moment de la déclaration
    gError = mTextLog = new wxTextCtrl(...);
     
    // Au final
    *gError << "Hello, World!\n";
    Sinon voir ce lien http://www.developpez.net/forums/d59...nction-membre/ pour cacher l'utilisation des wxWidgets au reste du code.

  3. #3
    screetch
    Invité(e)
    Par défaut
    c'est un probleme de syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *mTextLog->AppendText(wxT("Hello, World!\n")); // ici est l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mTextLog->AppendText(wxT("Hello, World!\n")); // ici est la solution
    la premiere version appelle la méthode AppendText puis utilise l'opérateur * sur le resultat, qui est de type void (donc pas de resultat) d'ou l'erreur.

  4. #4
    Membre chevronné Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //
    // Au final
    *gError << "Hello, World!\n";
    Ca donne un ambiguous overload for 'operator<<
    puisque cela peut être n'importe quoi
    Mais l'idée est bonne.

  5. #5
    Membre chevronné Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mTextLog->AppendText(wxT("Hello, World!\n")); // ici est la solution
    la premiere version appelle la méthode AppendText puis utilise l'opérateur * sur le resultat, qui est de type void (donc pas de resultat) d'ou l'erreur.
    En effet, mais n'écrit pas dans la wxTextCtrl.

  6. #6
    Membre chevronné Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Au final
    *gError << "Hello, World!\n";
    Corrigé ça fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *gError << wxT("Hello, World!)<<wxT(\n");
    Mais déjà dit par Ti-R.
    mais n'écrit pas non plus dans le wxTextCtrl.

    Enfin, j'ai commandé un bouquin pour la programmation de wxWidgets.
    L'ennui c'est que ce sera suelement livré dans une quinzaine.
    "Cross-Platform Gui Programming With wxWidgets" j'espère que j'ai fait le bon choix.

  7. #7
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Si c'est possible de fournir un exemple minimal et compilable du problème.
    Car j'utilise cette technique qui fonctionne bien.

    Il manque des guillemets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *gError << wxT("Hello, World!") << wxT("\n");

  8. #8
    Membre chevronné Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Par défaut
    Voici des extraits:
    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
     
    FilDatMain.cpp
    ....../.....
    FilDatFrame::FilDatFrame(wxWindow* parent,wxWindowID id)
    {
        //(*Initialize(FilDatFrame)
        wxFlexGridSizer* FlexGridSizer1;
     
        Create(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("wxID_ANY"));
        SetClientSize(wxSize(353,227));
        FlexGridSizer1 = new wxFlexGridSizer(5, 1, 0, 0);
        StaticText1 = new wxStaticText(this, ID_STATICTEXT1, _("Ready to make Data Files \?"), wxDefaultPosition, wxSize(343,30), 0, _T("ID_STATICTEXT1"));
        wxFont StaticText1Font(14,wxSWISS,wxFONTSTYLE_ITALIC,wxNORMAL,false,_T("Sans"),wxFONTENCODING_DEFAULT);
        StaticText1->SetFont(StaticText1Font);
        FlexGridSizer1->Add(StaticText1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    gError = mTextLog = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(400, 80), wxTE_MULTILINE|wxTE_READONLY);
    //    TextCtrl1 = new wxTextCtrl(this, ID_TEXTCTRL1, _("Text"), wxDefaultPosition, wxSize(320,87), 0, wxDefaultValidator, _T("ID_TEXTCTRL1"));
        FlexGridSizer1->Add(mTextLog, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
        Button1 = new wxButton(this, ID_BUTTON1, _("ok"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1"));
        FlexGridSizer1->Add(Button1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
        Button2 = new wxButton(this, ID_BUTTON2, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2"));
        FlexGridSizer1->Add(Button2, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
        SetSizer(FlexGridSizer1);
        FlexGridSizer1->SetSizeHints(this);
     
        Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&FilDatFrame::OnButton1Click);
        Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&FilDatFrame::OnButton2Click);
        //*)
    }
    ....../.....
    void FilDatFrame::OnButton1Click(wxCommandEvent& event)
    {
    void makedata();
    }
    makedata.cpp
    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
     
    .../..
    void makedata()
    {
    // allocate memory:
    illness = new char [length];
    symp = new char [llsymp+1];
    wbuf = new char [llwbuf];
    llbuf = new char [(unsigned) sizeof(int)];
    rlbuf = new char [(unsigned) sizeof(int)];
    hrbuf = new char [(unsigned) sizeof(int)];
    ifstream f1(fil1,ios::in | ios::binary);
     
    static wxTextCtrl *gError=0;
     
    if(f1.is_open())
     
    *gError << wxT("Hello, World!)<<wxT(\n");
     
    f1.close();
    }
    dans FilDatMain.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ../..
            wxButton* Button1;
            wxStaticText* StaticText1;
            wxButton* Button2;
            wxTextCtrl* mTextLog;
    ../..
    les ../.. veut dire que du texte inutile ? n'est pas affiché.

  9. #9
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void makedata()
    {
    ...
    static wxTextCtrl *gError=0;
    ... 
    if(f1.is_open())
      *gError << wxT("Hello, World!)<<wxT(\n");
    ...
    }
    La syntaxe est incorrecte dans "makedata()"

    La variable gError doit être placé en dehors d'une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    static wxTextCtrl *gError=0;
    void makedata()
    {
    ... 
    if(f1.is_open())
      *gError << wxT("Hello, World!)<<wxT(\n");
    ...
    }
    L'appel de makedata n'est pas correct.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void FilDatFrame::OnButton1Click(wxCommandEvent& event)
    {
    void makedata();
    }
    Pas de void devant l'appel juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void FilDatFrame::OnButton1Click(wxCommandEvent& event)
    {
     makedata();
    }

  10. #10
    Membre chevronné Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Par défaut
    Merciiiii beaucoup, ça marche.
    Mais seulement dans Code::Blocks. C.à.d. en lancant l'exécutable le widget est là mais le texte ne s'affiche pas ??

    Avec un petite faute de moi en plus que j'ai corrigé dans FilDatMain.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        gError = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(400, 180), wxTE_MULTILINE|wxTE_READONLY);
        FlexGridSizer1->Add(gError, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    je commençais à déespérer.....
    Entretemps j'ai reçu le livre "Cross-Platform GUI Programming with wxWidgets".
    Excellent, mais sans une bonne connaissance de C++ il ne sert à rien.
    J'ai donc mon passage de C à C++ à étudier mais aussi les wxWidgets.

    PS: c'est bizarre que je devais pas déclarer gError avant de l'utiliser dans FilDatMain.cpp.

  11. #11
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *gError << wxT("Hello, World!)<<wxT(\n");
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *gError << wxT("Hello, World!") << wxT("\n");
    Si cela ne s'affiche pas, il faudrait un mini exemple qui se compile et qui devrait logiquement afficher le message, mais ne fonctionne pas.

    A partir de là, je regarderais directement dans tout le code.

  12. #12
    Membre chevronné Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Par défaut
    Oui bien-sûr, je l'ai fait selon ta remarque précédente.

    La fonction makedata() est incluse dans FilDatMain.cpp en tant que makedata.cpp. Elle ne compile pas à part ( c.à.d. sans être incluse) sans nombre d'erreurs de 'multiple declarations'.

    Je comprends pas pourquoi ça marche impeccablement dans code::blocks (run) et non en stand-alone.

    Je récapitule ce que j'ai fait:

    Dans makedata.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ........
    static wxTextCtrl *gError=0;
    void makedata()
    {
    ifstream f1(fil1,ios::in | ios::binary);
    if(f1.is_open()) {
    for(int i=0; i<500; i++)
    *gError << wxT("Hello, World!")<<wxT("\n");
    f1.close();
    }
    }
    Dans FilDatMain.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "makedata.cpp"
    ....  
    gError = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(400, 180), wxTE_MULTILINE|wxTE_READONLY);
    FlexGridSizer1->Add(gError, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    .....
    void FilDatFrame::OnButton1Click(wxCommandEvent& event)
    {
    makedata();
    }

  13. #13
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    En stand-alone peut être qu'il n'arrive pas à ouvrir le fichier.

    Avec juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void makedata()
    {
    *gError << wxT("Hello, World!")<<wxT("\n");
    }
    Cela ne fonctionne pas également ?

  14. #14
    Membre chevronné Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Par défaut
    Merciiii... en effet, il faut donner le chemin complet au fichier.

    Même en étant dans le même directory.

    Cette fois c'est fait. Je pourrais continuer maintenant avec mon programme en AI qui va traiter les données. Il faut que je convertisse celui-là maintenant en C++ et wxWidgets.

    J'y serais pas parvenu tout seul à mon stade actuel.

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

Discussions similaires

  1. [Language]Interaction entre class
    Par LordBob dans le forum Langage
    Réponses: 10
    Dernier message: 14/12/2005, 10h14
  2. interaction entre mon programme & openOffice
    Par artatum dans le forum C
    Réponses: 4
    Dernier message: 10/10/2005, 22h28
  3. [VB .Net][Forms] Interaction entre deux forms
    Par plasticgoat dans le forum Windows Forms
    Réponses: 7
    Dernier message: 24/08/2005, 13h14
  4. [Collaboration/Interaction] Peut-on schématiser une interaction entre un bouton de commande et un autre objet ?
    Par manel007 dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 21/09/2004, 01h01

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