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

Discussion :

Utilisation de QserialPort

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut Utilisation de QserialPort
    Bonjour à tous,

    Je me présente Jérémy, 39 ans, fan de microcontrôleur. Je programme mes petites bêtes en C .
    Actuellement je travaille avec un module radio pour piloter un robot ( pour mes enfants).

    Ce module radio se branche sur un port USB, et avec un émulateur UART je communique avec lui (j'utilise realterm).


    Voila pour la présentation !

    Rentrons dans le vif du sujet . Je souhaite créer avec Qt, une fenêtre possédant des boutons ( avancer , reculer etc...).
    J'ai donc suivant les cours d'open classroom. J'avoue le C++ , me parait bien compliqué au premier abord, surtout dans sa configuration, et ses multiples fichiers trés déroutants.

    Pour faire simple au départ, j'aurais aimé créer seulement un bouton dans une fenêtre qui, quand on clic dessus envoie une série de chiffres( Bytes) .
    Cette série de chiffre est destinée à être envoyer au module radio qui va à son tour envoyer une commande au robot par voie radio.

    Mon module radio se trouve sur le port "COM7".
    Le série de chiffre à envoyer est [2,0,1,5,6] en décimal.

    A force de lecture et d’exemple j'ai réussis à envoyer une trame après la compilation mais c'est tout lol.

    Je confonds un peu tout et je ne sais plus comment créer un bouton qui pourrait exécuter une fonction. cette fonction enverrai la série de bytes. Pour le moment je configure mon port et j’envoie tout de suite ma trame.
    Mon module radio allume ca led prouvent qu'il a bien recu la trame!

    Voila mon travail pour le moment.

    .pro
    Code Qt-pro : 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
    #-------------------------------------------------
    #
    # Project created by QtCreator 2018-11-04T09:00:39
    #
    #-------------------------------------------------
     
    QT       += core gui
     
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
     
    TARGET = sans_titre
    TEMPLATE = app
     
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which has been marked as deprecated (the exact warnings
    # depend on your compiler). Please consult the documentation of the
    # deprecated API in order to know how to port your code away from it.
    DEFINES += QT_DEPRECATED_WARNINGS
     
    # You can also make your code fail to compile if you use deprecated APIs.
    # In order to do so, uncomment the following line.
    # You can also select to disable deprecated APIs only up to a certain version of Qt.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
     
    CONFIG += c++11
     
    QT += serialport
     
    SOURCES += \
            main.cpp \
            mainwindow.cpp
     
    HEADERS += \
            mainwindow.h
     
    FORMS += \
            mainwindow.ui
     
    # Default rules for deployment.
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target


    mainwindow.h
    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
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QMainWindow>
     
    namespace Ui {
    class MainWindow;
    }
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
     
    private:
        Ui::MainWindow *ui;
    };
     
    #endif // MAINWINDOW_H

    main.ccp
    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
    #include "mainwindow.h"
    #include <QApplication>
    #include <QSerialPortInfo>
    #include <QSerialPort>
    #include <QDebug>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
     
     
     
        QSerialPort serial;
        serial.setPortName("COM7");
     
        // Si le port est ouvert je le configure
        if(serial.open(QIODevice::ReadWrite)){
            if(!serial.setBaudRate(QSerialPort::Baud9600))
                qDebug()<<serial.errorString();
     
            if(!serial.setDataBits(QSerialPort::Data8))
                qDebug()<<serial.errorString();
     
            if(!serial.setParity(QSerialPort::NoParity))
                qDebug()<<serial.errorString();
     
            if(!serial.setStopBits(QSerialPort::OneStop))
                qDebug()<<serial.errorString();
     
            if(!serial.setFlowControl(QSerialPort::NoFlowControl))
                qDebug()<<serial.errorString();
     
            QByteArray ba;  //je creer un tableau de bytes
            ba.resize(5);	// Je lui affecte 5 cases
            ba[0] = 2;		// je le remplis de ma série de bytes
            ba[1] = 0;
            ba[2] = 1;
            ba[3] = 5;
            ba[4] = 6;
            serial.write(ba); // J'envoie la trame au port serie
     
            if(serial.waitForReadyRead(100)){
                //Data was returned
                qDebug()<<"Response: "<<serial.readAll();
            }else{
                //No data
                qDebug()<<"Time out";
            }
     
            //I have finish alla operation
            serial.close();
        }
        // Si le port n'as pas été ouvert je l'indique
        else{
            qDebug()<<"Serial COM7 not opened. Error: "<<serial.errorString();
        }
     
     
        MainWindow w;
        w.show();
     
        return a.exec();
    }

    mainwindow.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
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    le fichier mainwindow.ui
    Je ne peux pas le copier. il s'agit d'une fenêtre ou j'ai place un Bouton nommé "BoutonAvance"

    Voila j’espère qu"une âme charitable maitrisant ce langage pourra me guider sur le chemin de la réussite !

    Merci de m'avoir lu !

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Par défaut
    Bonjour, tu mets un slot(une methode) void on_BoutonAvance_clicked() dans ta classe MainWindow et tu déplaces dedans(dans son implementation) ton code d'ecriture sur le QSerialPort que tu avais mis dans le main.cpp (ou alors tu appelles ton slot différemment,mais dans ce cas il faut faire un connect dans le constructeur de MainWindow.)

    mainwindow.h
    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
     
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QMainWindow>
     
    namespace Ui {
    class MainWindow;
    }
     
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    public slots:
       void on_BoutonAvance_clicked(); //slot click du bouton
    private:
        Ui::MainWindow *ui;
    };
    #endif // MAINWINDOW_H
    mainwindow.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
    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
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    void MainWindow::on_BoutonAvance_clicked()
    {
    QSerialPort serial;
        serial.setPortName("COM7");
     
        // Si le port est ouvert je le configure
        if(serial.open(QIODevice::ReadWrite)){
            if(!serial.setBaudRate(QSerialPort::Baud9600))
                qDebug()<<serial.errorString();
     
            if(!serial.setDataBits(QSerialPort::Data8))
                qDebug()<<serial.errorString();
     
            if(!serial.setParity(QSerialPort::NoParity))
                qDebug()<<serial.errorString();
     
            if(!serial.setStopBits(QSerialPort::OneStop))
                qDebug()<<serial.errorString();
     
            if(!serial.setFlowControl(QSerialPort::NoFlowControl))
                qDebug()<<serial.errorString();
     
            QByteArray ba;  //je creer un tableau de bytes
            ba.resize(5);	// Je lui affecte 5 cases
            ba[0] = 2;		// je le remplis de ma série de bytes
            ba[1] = 0;
            ba[2] = 1;
            ba[3] = 5;
            ba[4] = 6;
            serial.write(ba); // J'envoie la trame au port serie
     
            if(serial.waitForReadyRead(100)){
                //Data was returned
                qDebug()<<"Response: "<<serial.readAll();
            }else{
                //No data
                qDebug()<<"Time out";
            }
     
            //I have finish all operation
            serial.close();
        }
    }
    le on_bouton_ clicked() c'est un raccourci de Qt, sinon il faut mettre un connect(ui->BoutonAvance,SIGNAL(clicked()),this,SLOT(MonSlot())); dans le constructeur si tu appelles ton slot différemment.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut
    Bonjour Stéphane,

    Déjà un grand merci car ton code fonctionne parfaitement.

    J'étais justement en train de créer un slot pour mon bouton, mais pas de la même manière que toi. En tout cas j'étais sur la bonne voie , et ça donne du baume au cœur.

    J'ai donc essayer en mode réel ! en modifiant la trame a envoyer au robot . Et miracle il avance !!!!!!!

    cependant si tu as encore un peu de temps à m'accorder j'ai quelques questions.

    Après acidification je ne sais pas pourquoi mais j'ai une erreur qui s'affiche. sur la premiere ligne il m'indique "unterminated conditional directive" et le mot "ifndef" est souligné en rouge ?
    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
    #ifndef MAINWINDOW_H    
     
    #define MAINWINDOW_H
     
    #include <QMainWindow>
     
    #include "mainwindow.h"
    #include <QApplication>
    #include <QSerialPortInfo>
    #include <QSerialPort>
    #include <QDebug>
     
    namespace Ui {
    class MainWindow;
    }
     
      class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
     
    public slots:
       void on_BoutonAvance_clicked(); //slot click du bouton
     
    private:
        Ui::MainWindow *ui;
    };
     
    #endif // MAINWINDOW_H
    Pour effectuer un test en réel sur mon robot j'ai donc du mettre les vrais valeurs. mais mes vrais valeurs sont des unsigned char ( 0 à 255) , ou peut etre des int dans le langage C++ .
    J'ai donc écrit et modifié comme cela mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            QByteArray ba;  //je creer un tableau de bytes
            ba.resize(10);	// Je lui affecte 5 cases
            ba[0] = 2;		// je le remplis de ma série de bytes
            ba[1] = 0;
            ba[2] = 6;
            ba[3] = 150;
            ba[4] = 128;
            ba[5] = 128;		// je le remplis de ma série de bytes
            ba[6] = 128;
            ba[7] = 0;
            ba[8] = 128;
            ba[9] = 146;
    Sur chaque valeur strictement supérieur à 127 j'ai message d'avertissement ( en jaune) m'indiquant : "implicit conversion from 'int' to 'char' ..... "
    J'ai donc supposé que "QByteArray ba; me crée un tableau de char et non de int . Comment puis-je modifier cela pour mettre des int dans le tableau ou des char unsigned ?
    edit : En regartdant l'aide de la fonction , effectivement il créer un tableau de const char. Qui en C++ doivent etre des signés donc de -128 à 127.
    Je pense que ma méthode est donc pas la plus adéquat

    J'ai également un autre probléme mais pas lié au code cette fois, mais au logiciel et peut être que tu l'as déjà rencontré. Les copié/collé ne fonctionne plus . j'ai un curseur d'insertion qui se met, je ne peux plus supprimer avec suppr et pas mal d'autre bug dans l’éditeur de texte. as-tu une idée d’où sa peut venir ? car c'est pas évident de programmer dans ces conditions.

    Je vais donc essayer de continuer à améliorer mon programme. Notamment créer une boucle qui envoie les trames tant que le bouton est pressé. Et envoi une autre trame pour le relâchement pour arreter le robot. Ainsi tant que le bouton est pressé , il avancera et au relâchement il s’arrêtera !

  4. #4
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Par défaut
    j'ai fait une erreur de copier coller, j'ai oublié le #endif // MAINWINDOW_H à la fin de mainwindow.h d'où ton erreur pour ton premier pb.
    pour le deuxième pb,peut être peux tu essayer avec la méthode qint64 QIODevice::write(const char *data, qint64 maxSize) du QSerialPort et remplacer ton QByteArray par un tableau de unsigned char que tu passes en paramètre de write avec sa taille donc par exemple 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char arraybytes[]={2,0,6,150,128,128,128,0,128,146};

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut
    Re,

    J'avoue que tu emploi des termes techniques plutot dur à assimiler . Cela ne fait que 2 jours que je suis les cours . lol.

    Je n'ai pas trouvé d'oubli dans ton copier/coller . en comparant avec d'autre code je pense que je suis OK mais pourtant il m'indique une erreur sur la ligne 1 . Cela ne m’empêche pas de compiler en tout cas .
    Pour mo itotu parait nickel j'ai bien le "endif" a la fin
    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
    #ifndef MAINWINDOW_H
     
    #define MAINWINDOW_H
     
    #include <QMainWindow>
     
    #include "mainwindow.h"
    #include <QApplication>
    #include <QSerialPortInfo>
    #include <QSerialPort>
    #include <QDebug>
     
    namespace Ui {
    class MainWindow;
    }
     
      class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
     
    // Ici je créer mes slots public pour que l'utilisateur puisse s'en servir
    public slots:
          void on_BoutonAvance_clicked();      //slot click du bouton quand on click sur le bouton pour avancer
          void on_BoutonConnexion_clicked();   // slot pour se connecter au port
          void on_BoutonDeconnexion_clicked(); // slot pour se DEconnecter du au port
     
     
    private:
        Ui::MainWindow *ui;
        QSerialPort serial;		// Je créer un attribut "port" que je nomme serial
     
    };
     
    #endif // MAINWINDOW_H
    Pour le deuxième probléme , je dois confesser que je n'ai pas compris ce que tu voulais que je test.

    J'en ai profiter pour rajoputer deux bouton, un pour se connecter au port et un autre pour se déconnecter. pour le moment ca fonctionne.
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QApplication>
    #include <QSerialPortInfo>
    #include <QSerialPort>
    #include <QDebug>
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
     
    /********************************************************
       Cette fonction ouvre le port COM7 et le configure
    ********************************************************/
    void MainWindow::on_BoutonConnexion_clicked()
    {
     
         serial.setPortName("COM7"); // Je lui donne le nom de "COM7" celui qui est utilisé
     
        // Si le port est correctement ouvert je le configure
        if(serial.open(QIODevice::ReadWrite)){
            if(!serial.setBaudRate(QSerialPort::Baud9600))
                qDebug()<<serial.errorString();
     
            if(!serial.setDataBits(QSerialPort::Data8))
                qDebug()<<serial.errorString();
     
            if(!serial.setParity(QSerialPort::NoParity))
                qDebug()<<serial.errorString();
     
            if(!serial.setStopBits(QSerialPort::OneStop))
                qDebug()<<serial.errorString();
     
            if(!serial.setFlowControl(QSerialPort::NoFlowControl))
                qDebug()<<serial.errorString();
     
            if(serial.waitForReadyRead(100)){          //Data was returned
                qDebug()<<"Response: "<<serial.readAll();
              }
              else{
                //No data
                qDebug()<<"Time out";
              }
            qDebug()<<"Serial COM7 est ouvert "<<serial.errorString();
     
          }
          // Si le port n'as pas été ouvert je l'indique
          else{
               qDebug()<<"Serial COM7 not opened. Error: "<<serial.errorString();
           }
    }
     
    /********************************************************
       Cette fonction envoi la trame pour AVANCER
    ********************************************************/
    void MainWindow::on_BoutonAvance_clicked()
    {
     
       QByteArray ba ;  //je creer un tableau de bytes
       ba.resize(10);	// Je lui affecte 5 cases
       ba[0] = 2;		// je le remplis de ma série de bytes
       ba[1] = 0;
       ba[2] = 6;
       ba[3] = 150;
       ba[4] = 128;
       ba[5] = 128;		// je le remplis de ma série de bytes
       ba[6] = 128;
       ba[7] = 0;
       ba[8] = 128;
       ba[9] = 146;
     
       serial.write(ba); // J'envoie la trame au port serie
     
    }
     
    /********************************************************
       Cette fonction ferme la connexion envoi la trame pour AVANCE
    ********************************************************/
    void MainWindow::on_BoutonDeconnexion_clicked()
    {
        qDebug()<<"La connexion est finie";
        serial.close();
    }
    Je vais m'attaquer à plus dur . faire une combo-box pour choisir le port com possible sur lequel se connecter. J'ai cru avoir lu une focntion qui me renvoi la liste des port disponible.

    A très vite je pense lol .

    PS: pour mon probléme de copier/coller je n'en peut plus . Je vais peut être désinstallé et reinstallé le logiciel, car au début ca ne me le faisait pas

  6. #6
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Par défaut
    Si j'ai rajouté apres le #endif dans le code et il faut peut etre que tu fasses un rebuild de ton projet pour qu il prenne en compte le changement du header
    ton probleme de copier /coller dans QtCreator c'est peut etre tout simplement qu il faut rappuyer sur la touche inser de ton clavier car tu as du appuyer dessus sans le voir et ca change le mode d'insertion

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut
    Re,

    Pour mon probléme de ifndef , en fait j'avais un #include "mainwindow.h" , de trop dans le fichier: "mainwindow.h"
    En le supprimant le probléme disparait . oufff !!!

    Pour le truc bizarre du copier coller . Pareil j'ai fais des manip de la mort avec des raccourcis. et j'ai enfin réussis a le débloquer, mais je ne sais pas comment j'ai fais;
    pas grave c'est donc tout nickel pour le moment.

    Je continue d'essayer d'obtenir les PORT com de dispo

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

Discussions similaires

  1. [Visual Studio] Utilisation de QSerialPort
    Par jackk dans le forum EDI
    Réponses: 3
    Dernier message: 26/05/2016, 16h24
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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