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

C++Builder Discussion :

problème de mise à jour de TEdit en thread


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Par défaut problème de mise à jour de TEdit en thread
    Bonjour à tous,

    Sous BCB C++, soit une TForm "principale" appelée Form1 qui contient un bouton. Ce bouton sert à ouvrir une seconde TForm appelée Form2.

    Je voudrais savoir (c'est très certainement une question basique) qu'elle est la différence entre réaliser l'ouverture de cette Form2 avec :

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TForm2 *F = new TForm2(this)
    F -> Show();
    2) ou tout simplement :

    Je demande cela car il m'est apparu un problème d'affichage de TEdit dans la Form2. En effet, si la Form2 contient un TEdit appelé Edit1, dans le cas où Form2 est ouverte par 1), le code :

    a)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form2->Edit1->Text = "essai";
    n'affiche rien (que le code soit placé à la création de Form2 ou bien suite à clic sur un bouton de Form2) tandis que :

    b)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Edit1->Text = "essai";
    Or dans le cas où Form2 et ouverte par 2), le code a) fonctionne.

    C'est peut-être insignifiant comme cela mais si l'on cherche à faire du thread sur Form2 et que Edit1 doit être mis à jour régulièrement (par ex. état d'avancement du sous-code de Form2 contenu dans son thread), eh bien on est coincé (rien ne s'affiche) si l'on utilise l'ouverture suivant 1) .

    Merci de m'indiquer également la différence entre this et NULL pour 1). Je pense qu'il s'agit de gérer la dépendance de Form2 vis-à-vis de Form1 mais je n'en suis pas sûr.


    Je vous remercie à l'avance pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Par défaut
    J'ajoute également que le fait d'activer Form2 par 2) fait perdre - apparemment - les propriétés du thread comme la gestion de l'événement OnTerminate qui n'est plus pris en compte.

  3. #3
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    L'explication est simple en effet, Form2 et F sont toute les deux des instance de ta classe TForm2 qui en l'occurrence est une fenêtre.
    Borland crée par défaut une instance de chaque fenêtre du projet au démarrage de ton appli, ce qui fait que tu n'est pas obligé de faire les new pour afficher tes Form, c'est ton objet Form2.
    Si tu créé une nouvelle instance de ta Form, en mettant le code a, il va aller mettre à jour l'instance Form2 puisque tu lui prescise Form2, mais toi tu affiche l'instance F qui n'est donc pas mise à jour.
    Par contre si tu met le code b, comme tu ne lui precise pas quel instance tu veut mettre à jour, il va mettre à jour l'instance courante de ta classe TForm2.

    J'espère que ce n'ai pas trop brouillon comme explication

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Par défaut
    Merci pour votre réponse; c'est ce que je pensais. Y a t'il un moyen préférentiel entre 1) ou 2) pour "bien développer", du moins "développer proprement" ?

  5. #5
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Ça dépend de chaque développeur.

    De mon coté, j'aime bien gérer moi même ce que font mes programmes et donc je creer (new) et detruit (delete) moi-même toutes mes TForm (sauf la forme principale).

    Donc dans Projet->Options onglet Fiche il n'y a que ma Form principale dans la liste de gauche, et toutes mes autres Form sont dans la liste de droite (Fiches disponibles).

    C'est la façon dont je développe, c'est la solution que je trouve la plus propre, mais ça reste un avis personnel.

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Personnellement je ne m'embête pas et je garde la 1, mais au niveau c++, il vaut mieux utiliser la 2, pour contrôler correctement ça mémoire par exemple, ce que je fait au niveau professionnelle.
    Pour désactiver la création automatique des Form, tu va dans les opions du projets, dans l'onglet Fiches, tu retire toute les fiches de la liste créé automatiquement sauf la principale, celle que Borland dois lancé au démarrage de l'appli.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 60
    Par défaut
    Merci pour ces réponses. Pour utiliser delete, où est ce qu'il faut le placer ? Si la Form2 s'ouvre par clic sur un bouton de Form1, je pense que l'on peut le mettre dans l'évènement OnExit du bouton. Mais qu'en est il à pour l'ouverture sur clic d'un élément (déroulant) d'une barre d'outil ?

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

Discussions similaires

  1. [MySQL] Problème de mise à jour d'une table
    Par SnickeursMan dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 17/01/2006, 11h39
  2. Problème de mise à jour de données avec IBClientDataset
    Par Papino dans le forum Bases de données
    Réponses: 6
    Dernier message: 26/09/2005, 14h04
  3. [2000 Server] Problème de mise à jour windowsupdate !!
    Par rohstev dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 24/08/2005, 15h03
  4. Problème de mise à jour de base de données
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 26/05/2004, 11h38
  5. problème de mise à jour de BD
    Par tidiane dans le forum Bases de données
    Réponses: 5
    Dernier message: 04/03/2004, 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