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

Windows Discussion :

Affichage dans un edit text


Sujet :

Windows

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut Affichage dans un edit text
    Bonjour,

    je sollicite une fois de plus un peu d'aide pour quelque chose de surement tout bête mais qui me prend le choux depuis quelques heures sans que je n'arrive à trouver la solution:

    Dans une boucle de mon programme je désire afficher dans un edit text (qui contient déjà plusieurs lignes d'affichées) le temps de conversion de ma fonction (elle dure de 10s à 5mn selon la taille du fichier que je traite). Je veux donc placer mon curseur à un endroit précis et afficher la valeur d'un entier qui est fonction du temps (j'utilise la fonction time). C'est pas compliqué hein ?! Eh bien je n'arrive pas à me dépatouiller de ces commandes d'edition, l'affichage ne se fait pas à l'endroit prévu, je dois avoir une "cacade" mais je ne vois pas quoi ni où, si quelqu'un peut m'ouvrir les yeux



    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)"\r\n\r\n");
    debut_temps = time(NULL); // T0

    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)"Durée de conversion : "); // affichage d'un masque
    while( FichierPlein )
    {

    fin_temps = time(NULL);
    duree = fin_temps-debut_temps;
    if (duree != anc_duree) // pour ne pas afficher 36 fois le même chiffre
    {
    oss.str("");
    oss << duree; // conversion entier vers string
    mess_resultat = oss.str();
    nbre_ligne =SendMessage(EditHandle, EM_GETLINECOUNT, 0, 0); //nombre de ligne dans mon edit text
    nbre_carac =SendMessage(EditHandle, EM_LINEINDEX, nbre_ligne-1, 0); // nombre de caractère dans mon edit text
    if (duree <= 10) SendMessage(EditHandle, EM_SETSEL, nbre_carac, nbre_carac-1); // affichage sur 1 chiffre
    else if (duree <=100) SendMessage(EditHandle, EM_SETSEL, nbre_carac, nbre_carac+2); // affichage sur 2 chiffres
    else if (duree <=1000) SendMessage(EditHandle, EM_SETSEL, nbre_carac-3, nbre_carac); // affichage sur 3 chiffres

    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)mess_resultat.c_str()); // envoi du message
    }
    anc_duree = duree;

    ... // la boucle continue

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Je pense que vous avez la tête un peu trop dans le guidon.

    Le problème dans votre programme, c'est que vous envoyez à vos fenêtres des messages, mais que vous ne donnez pas à ces fenêtres de temps pour réagir à ces messages.

    La solution la plus simple pour implémenter une tâche longue, avec des modification de l'affichage durant cette tâche, est l'utilisation du multi-threading.

    Un thread est créé pour exécuter la tâche longue tandis que le thread initial continue de réagir aux messages envoyés aux fenêtres de l'application.

    http://msdn.microsoft.com/en-us/libr...cb(VS.80).aspx

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    L'extrait de programme que j'ai mis ici est déjà le contenu d'un thread et ce thread envoie donc les messages à une unique fenêtre. Que puis-je faire de mieux ?

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    J'ai résolu mon problème : exit les fonctions EM_LINEINDEX et EM_LINECOUNT qui me généraient le bug de focntionnement, j'utilise tout simplement GetWindowTextLength qui me donne en une fois le nombre de caractère de mon edit control et tout marche au poil la matinée commence plutot bien

    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)"\r\n\r\n");
    debut_temps = time(NULL); // T0

    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)"Durée de conversion : "); // affichage d'un masque
    while( FichierPlein )
    {

    fin_temps = time(NULL);
    duree = fin_temps-debut_temps;
    if (duree != anc_duree) // pour ne pas afficher 36 fois le même chiffre
    {
    oss.str("");
    oss << duree; // conversion entier vers string
    mess_resultat = oss.str();
    nbre_carac =GetWindowTextLength(EditHandle); //nombre de caractère dans mon edit text

    if (duree <= 10) SendMessage(EditHandle, EM_SETSEL, nbre_carac-1, nbre_carac); // affichage sur 1 chiffre
    else if (duree <=100) SendMessage(EditHandle, EM_SETSEL, nbre_carac-2, nbre_carac); // affichage sur 2 chiffres
    else if (duree <=1000) SendMessage(EditHandle, EM_SETSEL, nbre_carac-3, nbre_carac); // affichage sur 3 chiffres

    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)mess_resultat.c_str()); // envoi du message
    }
    anc_duree = duree;

    ... // la boucle continue

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

Discussions similaires

  1. Problème d'affichage dans un Edit Text
    Par Constant_Conbustion dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 12/05/2008, 11h38
  2. [SQL] Problème d'affichage dans un champ text
    Par lefreeman42 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/07/2007, 09h54
  3. Aide sur l'affichage dans une zone texte
    Par Xsniepr dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 03/07/2007, 02h09
  4. Mettre le Chemin dans un Edit.text
    Par bastion dans le forum Delphi
    Réponses: 5
    Dernier message: 25/06/2007, 10h52
  5. Réponses: 12
    Dernier message: 01/06/2006, 15h32

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