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 :

Inclure un objet pour le calcul dans environnement wxWidgets


Sujet :

wxWidgets

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Par défaut Inclure un objet pour le calcul dans environnement wxWidgets
    Bonjour,

    Je suis en train d´ecrire un petit soft pour des raisons affectives. Dans une vie anterieure (en these) j´ai ecrit un petit programme c++ pour faire mes calculs, que je voudrais rendre utilisable par d´autre, grace a une jolie interface - presque finie - ecrite avec wxWidgets. Seulement voila, il faut faire tourner mon petit programme d´avant - bete mode console - puisque c´est lui qui devrait produire les resultats a afficher avec wxChart (la partie tracee est pas encore commencee, et pour cause : il n´y a rien a tracer). Je suis en train d´essayer quelques trucs, mais je rencontre un petit probleme delicat : ca plante...
    Pour le moment, ce que j´ai fait, c´est creer dans mon objet freevol_frame un objet membre de type essai_saut, cad la classe que j´ai creer pour faire mes calculs. Evidemment, essai_saut c´est du c++ de base, avec des doubles, des int des tableaux de double, etc. Pour l´instant, j´ai modestement cree un bouton de type OK auquel j´ai lie comme event une fonction membre de freevol_frame, evidemment. Cette fonction membre doit initialiser l´objet essai_saut (valeurs des parametres). Pour le moment ca se fait dans le programme, sans recuperer de valeurs de l´utilisateur, mais ca plante deja... Je ne sais pas trop ce que je dois faire ? Si quelqu´un a des suggestions...

    Ci-dessous des extraits du code :

    ---------------------------------------------------------------------
    freevol_frame.h :
    ---------------------------------------------------------------------
    Code : C++
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #ifndef _FREEVOLFRAME_H_
    #define _FREEVOLFRAME_H_
    #include "freevol_model.h"
    #include <wx/listctrl.h>
    #include <wx/button.h>
     
    class wxFreeVolFrame: public wxFrame
    {
     
       DECLARE_EVENT_TABLE()  //table des événements
     
       public:
     
    wxFreeVolFrame(wxWindow* parent, wxWindowID id = -1,
                    const wxString& caption = _("FreeVol v0.1"),
                    const wxPoint& pos = wxDefaultPosition,
                    const wxSize& size = wxDefaultSize,long style = wxDEFAULT_FRAME_STYLE);
     
    ~wxFreeVolFrame();
     
    bool Create(wxWindow* parent, wxWindowID id = -1,
                const wxString& caption = _("FreeVol v0.1"),
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize,
                long style = wxDEFAULT_FRAME_STYLE);
     
     
       protected:
    // l´objet du probleme : issu de la class essai_saut, qui peut faire les calculs
    essai_saut* essai;
     
    void CreateMenu();
    void CreateControls();
    void OnMnuQuit(wxCommandEvent& event);
    void OnButtonOKG(wxCommandEvent& event);
     
       private:
     
     
    // textctrl pour menu de la partie gauche de la fenetre principale + bouton OK
    wxTextCtrl* m_ctrl_ax;
    wxTextCtrl* m_ctrl_kr;
    wxTextCtrl* m_ctrl_ceq;
    wxTextCtrl* m_ctrl_V;
    wxTextCtrl* m_ctrl_epoc;
    wxTextCtrl* m_ctrl_E;
    wxTextCtrl* m_ctrl_T;
    wxTextCtrl* m_ctrl_cfi;
     
    wxButton* boutonOKG;
    // textctrl (temporaire) pour la partie droite
    wxTextCtrl* m_PtieDroite;
     
     
    wxMenu* m_MnuFile;
    wxMenu* m_MnuSteady;
    wxMenu* m_MnuHelp;
     
    wxString m_ax;
    wxString m_kr;
    wxString m_ceq;
    wxString m_V;
    wxString m_epoc;
    wxString m_E;
    wxString m_T;
    wxString m_cfi;
     
     
    };
    #endif // _FREEVOLFRAME_H_

    ------------------------------------------------------------
    La fonction qui plante dans freevol_frame.cpp : celle appelee par l´event du bouton OK (il n´y a que des initialisations, esentiellement, et le squelette de la fonction pour quand tout ira bien en commentaires):
    ------------------------------------------------------------
    Code : C++

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    void wxFreeVolFrame::OnButtonOKG(wxCommandEvent& event)
    {
    essai = new essai_saut;
     
    //vérifie qu'il y a bien un parcours meca (drapeau) sinon, le signale et skip,
    /*
    cfinit= 1e-12
    n= 0
    sigmainit= 0
    Et_int1= 0
    pcision= 1e-3
    k= 1.38e-23
    */
    essai->ax = 0.1;
    //récupère les valeurs des paramètres
     
    m_ax = m_ctrl_ax->GetValue();
    m_kr = m_ctrl_kr->GetValue();
    m_ceq = m_ctrl_ceq->GetValue();
    m_V = m_ctrl_V->GetValue();
    m_epoc = m_ctrl_epoc->GetValue();
    m_E = m_ctrl_E->GetValue();
    m_T = m_ctrl_T->GetValue();
    m_cfi = m_ctrl_cfi->GetValue();
     
    //convertit les valeurs en double
     
    //assigne les valeurs à l'objet modele et lance le calcul
     
    essai->ax = 0.1;
    essai->kr = 0.1;
    essai->cf_eq = 1e-12;
    essai->Cf_int1 = 1e-12;
     
    essai->invcfinit = essai->Cf_int1;
    essai->Ep0c = 2.81E8;
    essai->T = 683;
    essai->E = 10e9;
    essai->V = 160E-30;
     
     
    //affiche le résultat, change un drapeau pour permettre enregistrement du fichier résultat
     
     
    event.Skip();
    }


    ---------------------------------------------------------
    Le fichier freevol_model.h qui contient la classe essai_saut :
    ---------------------------------------------------------
    Code : C++

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #ifndef _FREEVOLMODEL_H_
    #define _FREEVOLMODEL_H_
     
     
    #include <math.h>
    #include <string.H>
    #include <stdio.h>
    #include <fstream>
    #include <iostream.h>
    #include <time.h>
    #include <stdlib.h>
     
    struct res_calcul
    {
    float sigma_int1, Cf_int1, Et_int1;
    int n;
    };
     
    struct prmsauts
    {
    float prmepp[10];
    float prmep[10];
    int J;
    };
     
    struct manip
    {
    float cont[1000];
    float def[1000];
    float temps[1000];
    int tai;
    };
     
     
    class essai_saut
    {
        public :
     
        int n, N, j, J, i, kontrole;
        double Ep0c, V, k, T, E, ax, kr, cf_eq, dt;
     
        double Cf[10000], sigma[10000], Eppe[10000], Et[10000], temps[10000];
        double Ept, pcision;
        double prm[20], epsilon[10], epsilon_point[10],relax[10];
        res_calcul Tempo ;
        double Cf_int1 , invcfinit;
        double ax_sur_kr;
        prmsauts param ;
     
    int Enregistre(int);
    int essai();
    res_calcul calcul_modele(int ni, double sigma_int1, double Cf_int1, double Et_int1, double Ept, double pcision, double dmanip);
    double creani(double c, double epp);
     
    };
     
     
    #endif  // _FREEVOLMODEL_H_


    ------------------------------------------------

    Voila, je sais pas si c´est tres clair... ?

    Bien cordialement,

    Hugo

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    620
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 620
    Par défaut
    C´etait la position du DECLARE_EVENT_TABLE qui foutait tout en l´air... il doit etre a la derniere ligne de la class...

    Marc

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

Discussions similaires

  1. appel de fonctions pour faire calculs dans une procédure sub
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 09/08/2012, 18h14
  2. Message "#Erreur" pour calculs dans formulaire
    Par tieuphuong dans le forum IHM
    Réponses: 10
    Dernier message: 09/08/2007, 12h27
  3. Réponses: 2
    Dernier message: 22/05/2007, 16h15
  4. Réponses: 9
    Dernier message: 02/05/2007, 14h59
  5. [POO] Inclure php objet dans html
    Par Matgic95 dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2006, 09h51

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