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

Langage Delphi Discussion :

[Thread] et [TImage]


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Thread] et [TImage]
    Bonsoir,

    J'ai un petit soucis du, surement, à une non compréhension
    du fonctionnement des Threads.

    J'ai un TImage dans une TForm où je dessin directement dans le canvas.

    J'ai un Thread, qui est dans une autre TForm, de mon programme qui
    s'occupe d'une lecture de socket et lors de la réception d'informations doit
    exécuter une fonction de mise à jour de mon TImage.

    Mon soucis est que lors que mon Thread exécute la fonction
    de ma fiche ou est mon TImage pour le mettre à jour mon,
    l'image disparaît de ma fenêtre.

    Et je ne veux pas faire de refresh qui ferait "scintiller" mon image
    car les mise à jour se fond à un rythme de 1 par seconde.

    Si c'est pas clair, je mettrai un exemple de mon code demain.

    Une piste, une idée ?

    D'avance, je vous remercie.

    Zaadum

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 531
    Points : 25 070
    Points
    25 070
    Par défaut
    Ne prend pas un TImage mais un TPaintBox, où tu défini le OnPaint qui va lire dans un BitMap (voir aussi DoubleBuffered sur la Form), et l'astuce est de gèrer deux TBitmap, pendant que le Thread dessine sur le Bitmap A, le PaintBox utilise le B, une fois que le Thread a fini, tu substitue A dans B (via SectionCritique ou dans un Synchronize), c'est ce que fait DirectDraw, méthode Switch ... cela évite des instabilité lié à la modification de control par le thread au même moment qu'ils sont lus par la Form ... Erreur 1400 garanti !

    Plus rapide que TPaintBox sujet à lire, et voir aussi les liens qu'il contient !

    Je savais bien que j'avais pondu ce code, voir "Problèmes étranges avec le dual core"
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. TImage.Repaint depuis un Thread
    Par khaled-benloucif dans le forum Langage
    Réponses: 2
    Dernier message: 03/05/2009, 11h13
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. TImage
    Par Thylia dans le forum C++Builder
    Réponses: 5
    Dernier message: 09/07/2002, 20h03
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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