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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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.

  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
    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.

  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();
    }

+ 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