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

GTK+ avec C & C++ Discussion :

Probleme affichage avec un GtkTextView (affichage ligne par ligne)


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 34
    Points
    34
    Par défaut Probleme affichage avec un GtkTextView (affichage ligne par ligne)
    Bonjour a tous

    J'aimerais implementer une zone de texte dans mon appli, afin de rapporter a l'utilisateur les differentes etapes de la connexion serie.

    Pour afficher les messages dans ce textview je procede ainsi:

    Dans le main je declare le Widget TextView.

    C'est dans le callback de mes boutons que je rempli mon TextBuffer et fait afficher son contenu dans le textview, mais le probleme c'est que l'affichage est effectif uniquement a la fermeture de ma fonction callback, alors que j'aimerais que les phrases s'affichent au fur et à mesure des etapes de connexions, je pense que vous comprendrez mieux avec le code:

    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
     
    /* PREPARATION DU BUFFER POUR AFFICHAGE DES MESSAGES DANS LA ZONE DE TEXTE */
    /* Recuperation du buffer */
        pTextBuffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
    /* Suppression des donnees du buffer */
    /*  |_ Recuperation de l'origine du buffer */
        gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
    /*  |_ Recuperation de la fin du buffer */
        gtk_text_buffer_get_end_iter(pTextBuffer,&iEnd);
    /*  |_ Vidage du buffer */
        gtk_text_buffer_delete(GTK_TEXT_BUFFER(pTextBuffer),&iStart,&iEnd);
     
     
    /* Determine l'etat actuel du bouton */
        if(strstr(sButtonName,"_Disconnect")==NULL)
        {
    /* Le bouton etait en etat "Connect" on le place en "Disconnect" => Modification
    de l'apparence du bouton (Label "_DisConnect" / Item: GTK_STOCK_DISCONNECT */
            gtk_label_set_text_with_mnemonic(GTK_LABEL(pItemFromBox),"_Disconnect");
            gtk_image_set_from_stock(g_list_nth_data(glistLevel2,1),GTK_STOCK_DISCONNECT,GTK_ICON_SIZE_BUTTON);
     
    /* Ouverture du Port Serie */
            SerialErr=OpenSerialPort(SerialConfig);
     
    /* Affichage du message d'information sur l'ouverture du Port Serie */
            switch(SerialErr)
            {
                case _ErrorNone:
                    sStatusText=g_strdup_printf("Vous avez choisi le port %s et un débit de %ld bps.\n",
                                                SerialConfig->ComPort,
                                                SerialConfig->BaudRate);
                    sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                    //gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                    //gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                    gtk_text_buffer_set_text(pTextBuffer,sStatusText,-1);
                    g_free(sStatusText);
     
                    /* Construction de la trame de connexion au Progger */
                    if(!BuildFrame("CONNECT",chBuffer,&lgFrameLength))
                    {
                        sStatusText=g_strdup_printf("Trame trop longue\n");
                        sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                        gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                        gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                        g_free(sStatusText);
                    }
                    else
                    {
                        /* Envoi de la trame de connexion au Progger */
                        SerialErr=WriteCom(chBuffer,lgFrameLength);
                        if(SerialErr==_ErrorTx)
                        {
                            sStatusText=g_strdup_printf("Erreur de transmission\n");
                            sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                            gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                            gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                            g_free(sStatusText);
                        }
                        else
                        {
                            SerialErr=ReadCom(chBuffer,&lgFrameLength,6);
                            if(SerialErr==_ErrorRx)
                            {
                                sStatusText=g_strdup_printf("Erreur de réception\n");
                                sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                                gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                                gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                                g_free(sStatusText);
                            }
                            else if(SerialErr==_ErrorTimeout)
                            {
                                sStatusText=g_strdup_printf("Erreur de délais: Vérifier que le progger est connecté sur le bon Port, s'il est alimenté\n");
                                sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                                gtk_text_buffer_get_end_iter(pTextBuffer,&iStart);
                                gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                                g_free(sStatusText);
                            }
                            else
                            {
                                int i=0;
                                printf("%ld octets recus, contenu trame: ",lgFrameLength);
                                for(i=0;i<6;i++)
                                    printf("<%x>",chBuffer[i]);
                                printf("\n");
     
                                /* Determination de l'etat du progger, ACK ou NAK recu? */
     
                                if(CheckCRC16CCITT((chBuffer),3))
                                    if(*(chBuffer+1)==ACK)
                                    {    /* Progger pret */
                                        printf("Progger pret\n");
                                    }
                                    else
                                    {    /* Progger pas pret */
                                        printf("Progger pas pret\n");
                                    }
                                else
                                {    /* Le CRC calcule ne correspond a celui envoye
                                    par le progger */
                                    printf("Erreur de CRC\n");
                                }
                            }
                        }
                    }
                    break;
     
                case _ErrorCreate:
                    sStatusText=g_strdup_printf("\nPort %s indisponible (une autre ressource l'utilise).\n",SerialConfig->ComPort);
                    sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                    gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                    gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                    g_free(sStatusText);
                    break;
     
                case _ErrorInexistant:
                    sStatusText=g_strdup_printf("\nLe port %s n'existe pas sur cette machine.\n",SerialConfig->ComPort);
                    sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                    gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                    gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                    g_free(sStatusText);
                    break;
     
                case _ErrorConfigPort:
                    sStatusText=g_strdup_printf("\nImpossible de configurer le port %s.\n",SerialConfig->ComPort);
                    sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                    gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                    gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                    g_free(sStatusText);
                    break;
     
                case _ErrorTimeout:
                    sStatusText=g_strdup_printf("\nImpossible de configurer les timeouts du port %s.\n",SerialConfig->ComPort);
                    sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
                    gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                    gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                    g_free(sStatusText);
                    break;
     
                default:
                    sStatusText=g_strdup_printf("\ndefault\n");
                    gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                    gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
                    g_free(sStatusText);
                    break;
            }
        }
        else
        {
    /* Le bouton etait en etat "Disconnect" on le place en "Connect" => Modification
    de l'apparence du bouton (Label "_Connect" / Item: GTK_STOCK_CONNECT */
            gtk_label_set_text_with_mnemonic(GTK_LABEL(pItemFromBox),"_Connect");
            gtk_image_set_from_stock(g_list_nth_data(glistLevel2,1),GTK_STOCK_CONNECT,GTK_ICON_SIZE_BUTTON);
     
    /* Fermeture du Port Serie */
            CloseSerialPort();
     
    /* Affichage du message d'information sur la fermeture du Port Serie */
            sStatusText=g_strdup_printf("\nLe port %s est maintenant fermé\n",SerialConfig->ComPort);
            sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
            gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
            gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
            g_free(sStatusText);
        }
    }
    J'ai essayé le mode suivant: connexion a un port qui existe, donc SerialErr=_ErrorNone ce qui me permet de rentrer dans le premier "cas" du switch.
    Dans ce cas ci, je devrais voir apparaitre dans le TextView la phrase:
    "Vous avez choisi le port xxx et un débit de xxx bps.", hors ce n'est pas le cas, le programme passe a la construction de la trame, qui reussi sans erreur, puis a l'envoi de la trame a la cible. La cible n'etant pas branchée, je me retrouve avec un "timeout" ==>SerialErr=_ErrorTimeout, je rajoute donc la phrase:
    "Erreur de délais: Vérifier que le progger est connecté sur le bon Port, s'il est alimenté", le textview etant toujours vierge. Le switch se termine, la fonction callback se termine egalement, et c'est a cet instant que je vois s'afficher dans le TextView:

    "Vous avez choisi le port xxx et un débit de xxx bps."
    "Erreur de délais: Vérifier que le progger est connecté sur le bon Port, s'il est alimenté"

    Comment se fait il que l'affichage soit réalisé a ce moment ci et pas au fur et a mesure du deroulement du code? Est ce que je m'y prends mal? ou est ce tout simplement pas possible?

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 34
    Points
    34
    Par défaut
    Personne

    Ce n'est pas possible de realiser ceci?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 34
    Points
    34
    Par défaut
    Je vais reformuler la question des fois qu'elle ne soit pas assez claire

    J'aimerais savoir s'il est possible de faire un affichage ligne par ligne dans un TextView. En fait j'ai une appli qui communique avec une carte electronique via le port serie. j'aimerais que l'utilisateur soit informé au fur et a mesure des etapes de connexions transfert via des messages qui s'afficheraient les uns apres les autres dans le TextView de ma fenetre principale.

    Pour l'instant j'essaie d'afficher les messages relatifs a la connexion (l'affichage est géré dans le callback de mon bouton "connect"). Je decris un peu le fonctionnement:

    Appui sur "Connect"
    Affichage: "Vous avec choisi le port COMx et un debit de X bps"

    Si la connexion réussie:
    Affichage: "Vous vous etes connecté avec succes"

    Si la connexion echoue:
    Affichage: "Impossible de se connecter, verifiez les connexions, les parametres, le port, etc..."


    Pour l'instant ce que j'ai codé ne fonctionne pas, puisque c'est a la fermeture du callback que l'affichage se fait, et toutes les lignes s'affichent en meme temps, plutot que de s'afficher une a une au fur et a mesure de l'avancement de la connexion.

    Comment faire SVP? si bien sur c'est possible

    Donc au fur et a mesure de l'avancement dans le "switch" j'aimerais que les messages correspondant s'affichent dans mon textview, comment faire SVP?


    Merci d'avance

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 34
    Points
    34
    Par défaut
    Je continue dans mes tests, ici je recupere le texte deja affiché, puis je rajoute le nouveau message a afficher pour tout réafficher. Toujours le meme probleme, tout le texte s'affiche dans le textview lorsque le callback du bouton connect se termine

    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
     
    /* Recupere le contenu du TextView dans sGetText*/
                                gtk_text_buffer_get_start_iter(pTextBuffer,&iStart);
                                gtk_text_buffer_get_end_iter(pTextBuffer,&iEnd);
                                sGetText=gtk_text_buffer_get_text(pTextBuffer,&iStart,&iEnd,TRUE);
     
                                /* Prepare le prochain message a afficher */
                                sStatusText=g_strdup_printf("Erreur de délais: Vérifier que le progger est connecté sur le bon Port, s'il est alimenté\n");
                                sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
     
                                /* Ajoute les precedents messages au buffer */
                                g_strlcat(sStatusText,sGetText,-1);
     
                                gtk_text_buffer_set_text(pTextBuffer,sStatusText,-1);
     
                                g_free(sStatusText);

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Je me penche sur ton problème, vais voir ca
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Bon je me suis fait un petit test et il est vrai que tant que le callback ne rend pas la main, le widget ne se met pas à jour:
    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
    static void cb_clicked (GtkWidget * p_wid, gpointer p_data)
    {
       GtkWidget      *  p_text   = p_data;
       GtkTextBuffer  *  p_buf    = NULL;
       GtkTextIter       end;
       int i = 0;
     
     
       p_buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (p_text));
       gtk_text_buffer_get_end_iter (p_buf, & end);
     
     
       for (i = 0; i < 5; i++)
       {
          gtk_text_buffer_insert (p_buf, & end, "Test d'affichage... !\n", 22);
       }
       g_usleep (G_USEC_PER_SEC * 2);
     
     
       (void) p_wid;
    }
    Peut-être un problème de priorité d'exécution du sous-programme ? Je ne sais pas trop pour le moment, je vais voir si je peut trouver des infos là dessus
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Franck.H
    Bon je me suis fait un petit test et il est vrai que tant que le callback ne rend pas la main, le widget ne se met pas à jour:


    Peut-être un problème de priorité d'exécution du sous-programme ? Je ne sais pas trop pour le moment, je vais voir si je peut trouver des infos là dessus

    Ah super je commencais a me demander si ca venait de moi ou pas

    Je continue les recherches egalement de mon coté des fois que

    Merci pour ton aide

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 34
    Points
    34
    Par défaut
    J'ai testé une autre méthode, qui plante également par moment:

    (ERREUR D'APPLICATION: la memoire ne peut pas etre read).

    Alors maintenant je fais la chose suivante:

    Je declare une chaine de caractere vide, que je remplie au fur et a mesure du deroulement de la connexion avec les messages a afficher, puis a la fermeture du callback associé au bouton "connect", la liste des messages s'affiche d'un seul coup, ca donne l'illusion que les messages s'affichent un a un et c'est bien suffisant

    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    /* Pour stocker les infos a afficher dans le TextView */
        gchar *sStatusText=NULL;    // pointeur sur le string a afficher
        gchar *pStatusText=NULL;    // pointeur sur le caractere '\0' du string
     
        sButtonName=gtk_label_get_label(GTK_LABEL(pItemFromBox));
     
    /* Association du buffer au TextView */
        pTextBuffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
     
    /* Determine l'etat actuel du bouton */
        if(strstr(sButtonName,"_Disconnect")==NULL)
        {
    /* Le bouton etait en etat "Connect" on le place en "Disconnect" => Modification
    de l'apparence du bouton (Label "_DisConnect" / Item: GTK_STOCK_DISCONNECT */
            gtk_label_set_text_with_mnemonic(GTK_LABEL(pItemFromBox),"_Disconnect");
            gtk_image_set_from_stock(g_list_nth_data(glistLevel2,1),GTK_STOCK_DISCONNECT,GTK_ICON_SIZE_BUTTON);
     
    /* Ouverture du Port Serie */
            SerialErr=OpenSerialPort(SerialConfig);
     
    /* Affichage du message d'information sur l'ouverture du Port Serie */
            switch(SerialErr)
            {
                case _ErrorNone:
                    sStatusText=g_strdup_printf("");
                    pStatusText=g_stpcpy(sStatusText,"Connexion etablie\n");
                    printf("%s",sStatusText);
     
     
                    /* Construction de la trame de connexion au Progger */
                    if(!BuildFrame("CONNECT",chBuffer,&lgFrameLength))
                    {
                        pStatusText=g_stpcpy(pStatusText,"Trame trop longue\n");
                        printf("%s",sStatusText);
                    }
                    else
                    {
                        /* Envoi de la trame de connexion au Progger */
                        SerialErr=WriteCom(chBuffer,lgFrameLength);
                        if(SerialErr==_ErrorTx)
                        {
                            pStatusText=g_stpcpy(pStatusText,"Erreur de transmission\n");
                            printf("%s",sStatusText);
                        }
                        else
                        {
                            SerialErr=ReadCom(chBuffer,&lgFrameLength,6);
                            if(SerialErr==_ErrorRx)
                            {
                                pStatusText=g_stpcpy(pStatusText,"Erreur de reception\n");
                                printf("%s",sStatusText);
                            }
                            else if(SerialErr==_ErrorTimeout)
                            {
                                pStatusText=g_stpcpy(pStatusText,"Erreur Timeout\n");
                                printf("%s",sStatusText);
                            }
                            else
                            {
                                /* Determination de l'etat du progger ACK ou NAK? */
                                if(CheckCRC16CCITT((chBuffer),3))
                                {
                                    if(*(chBuffer+1)==ACK)
                                    {
                                        pStatusText=g_stpcpy(pStatusText,"Progger pret\n");
                                        printf("%s",sStatusText);
                                    }
                                    else
                                    {
                                        pStatusText=g_stpcpy(pStatusText,"Progger pas pret\n");
                                        printf("%s",sStatusText);
                                    }
                                }
                                else
                                {    /* Le CRC calcule ne correspond a celui envoye
                                    par le progger */
                                    pStatusText=g_stpcpy(pStatusText,"Mauvais CRC\n");
                                }
                            }
                        }
                    }
                    break;
     
                case _ErrorCreate:
                    sStatusText=g_strdup_printf("");
                    pStatusText=g_stpcpy(sStatusText,"Le port est indisponible (une autre ressource l'utilise)\n");
                    break;
     
                case _ErrorInexistant:
                    sStatusText=g_strdup_printf("");
                    pStatusText=g_stpcpy(sStatusText,"Ce port n'existe pas sur cette machine\n");
                    break;
     
                case _ErrorConfigPort:
                    sStatusText=g_strdup_printf("");
                    pStatusText=g_stpcpy(sStatusText,"Configuration des parametres du port impossible\n");
                    break;
     
                case _ErrorTimeout:
                    sStatusText=g_strdup_printf("");
                    pStatusText=g_stpcpy(sStatusText,"Configuration des timeouts du port impossible\n");
                    break;
     
                default:
                    sStatusText=g_strdup_printf("");
                    pStatusText=g_stpcpy(sStatusText,"Default\n");
                    break;
            }
            gtk_text_buffer_set_text(pTextBuffer,sStatusText,-1);
            printf("%s",sStatusText);
            g_free(sStatusText);
        }
        else
        {
    /* Le bouton etait en etat "Disconnect" on le place en "Connect" => Modification
    de l'apparence du bouton (Label "_Connect" / Item: GTK_STOCK_CONNECT */
            gtk_label_set_text_with_mnemonic(GTK_LABEL(pItemFromBox),"_Connect");
            gtk_image_set_from_stock(g_list_nth_data(glistLevel2,1),GTK_STOCK_CONNECT,GTK_ICON_SIZE_BUTTON);
     
    /* Fermeture du Port Serie */
            CloseSerialPort();
     
    /* Affichage du message d'information sur la fermeture du Port Serie */
            sStatusText=g_strdup_printf("Le port %s est maintenant fermé\n",SerialConfig->ComPort);
            sStatusText=g_locale_to_utf8(sStatusText,-1,NULL,NULL,NULL);
            gtk_text_buffer_get_end_iter(pTextBuffer,&iStart);
            gtk_text_buffer_insert(pTextBuffer,&iStart,sStatusText,-1);
            g_free(sStatusText);
        }

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Marmoccelle
    J'ai testé une autre méthode, qui plante également par moment:

    (ERREUR D'APPLICATION: la memoire ne peut pas etre read).
    Ca je crois que c'est une erreur assez typique de Windows mais il me semble que cela ai surtout un rapport avec le système, surement par rapport à une chose que ton programme fait que l'OSi n'aime pas trop mais je ne saurais t'en dire d'avantage
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Franck.H
    Ca je crois que c'est une erreur assez typique de Windows mais il me semble que cela ai surtout un rapport avec le système, surement par rapport à une chose que ton programme fait que l'OSi n'aime pas trop mais je ne saurais t'en dire d'avantage
    En effet je "desallouais" mal la mémoire

    Donc résolu

    Merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/06/2009, 09h57
  2. Réponses: 11
    Dernier message: 11/05/2009, 20h29
  3. Probleme de lenteur a l'affichage avec IE7
    Par Evenmor dans le forum JSF
    Réponses: 3
    Dernier message: 18/09/2008, 17h33
  4. affichage ligne par ligne du fichier ascII
    Par khayate dans le forum VB.NET
    Réponses: 15
    Dernier message: 06/06/2007, 14h14
  5. [ Problème d'affichage de données ligne par ligne ]
    Par Arkoze dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 05/06/2007, 09h45

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