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 :

probleme d'affichage IHM 'Parametre incorrect'


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 18
    Points : 22
    Points
    22
    Par défaut probleme d'affichage IHM 'Parametre incorrect'
    Bonjour,
    Je gere un programme qui lance une fenêtre principale, ensuite si je sélectionne un menu, j'ouvre une seconde IHM du type TForm.
    Cette IHM contient des 80 images qui doivent être actualisée selon des valeurs qui sont récupéré par le programme.

    Un boucle for est donc chargé de récupéré ces image et de les actualiser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (i=0;i<80;i++)
      {
      aComponent = "image" + IntToStr(i);
      iIm = (Timage*)  FindComponent (aComponent);
      ilImages->GetBitmap(2,bImage); // ilImages appartien classe TImageList
      iIm->Picture->Bitmap->Canvas->Lock();
      iIm->Picture->Bitmap->FreeImage();
      iIm->Picture->Bitmap->ReleaseHandle();
      iIm->Picture->Bitmap->Assign(bImage);
      iIm->Picture->Bitmap->Canvas->Unlock();
      }
    Le probleme, c'est que lors de l'exécution du programme, une IHM d'erreur Window est affiché.
    "Paramètres Incorrectes"
    Et certaines Image n'apparaissent pas sur l'IHM.

    Je pense que cela doit venir, d'un problème de synchronisation, Windows doit demander un rafraîchissement de notre IHM pendant que les image sont 'lock' donc, il détecte une erreur.

    Je voudrais savoir si il est possible d'interdir à Windows de rafraîchier, pendant biensur une courte période ?

    Merci

    Je tiens à préciser que l'erreur apparait une fois sur 6.

    Balises [Code] rajoutées par Ricky81
    Merci d'y penser à l'avenir

  2. #2
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Tu peux regarder du côté de l'API LockWindowUpdate, ou du message WM_SETREDRAW pour interdire le raffraichissement d'un contrôle.

    Cordialement,

    Arnaud

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Greybird
    Tu peux regarder du côté de l'API LockWindowUpdate, ou du message WM_SETREDRAW pour interdire le raffraichissement d'un contrôle.
    Mon compilateur Builder 6 ne connait pas WM_SETREDRAW !
    Et pout l'API, ce n'est pas dangereux de toucher au API windows ?

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for (i=0;i<80;i++) 
      { 
      Sleep(30);
      aComponent = "image" + IntToStr(i); 
      iIm = (Timage*)  FindComponent (aComponent); 
      ilImages->GetBitmap(2,bImage); // ilImages appartien classe TImageList 
      iIm->Picture->Bitmap->Canvas->Lock(); 
      iIm->Picture->Bitmap->FreeImage(); 
      iIm->Picture->Bitmap->ReleaseHandle(); 
      iIm->Picture->Bitmap->Assign(bImage); 
      iIm->Picture->Bitmap->Canvas->Unlock(); 
      }
    J'ai un rajouter un sleep dans la boucle,
    Mes image s'affiche en chenillard, biensur, mais au bout de 40 essais, aucun défaut n'est apparut !!
    C'est une astuce je suis sûre qu'il y a une solution. En tout cas ça montre que le probleme vient de la synchronisation !!

    Si vous avez des solutions ...

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    avec
    dans la boucle plus de probleme, juste un chenillard qui s'affiche...
    tanpis, mais c'est jolie ! [/code]

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Citation Envoyé par GENERYS
    Et pout l'API, ce n'est pas dangereux de toucher au API windows ?
    Bien sur que non tant qu'on sait ce qu'on fait. Dans ce cas précis, il s'agit d'indiquer à Windows que le contrôel ne doit pas être redessiné. Ca peut être utilisé notamment quand on veut remplir une ListBox, pour ne pas qu'elle se raffraichisse à chaque fois qu'on ajoute un élément.

    Cordialement,

    Arnaud

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

Discussions similaires

  1. problem d'affichage dans IHM
    Par jean1979 dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 04/12/2011, 17h27
  2. Probleme d'affichage IHM
    Par ZuluLa dans le forum SWT/JFace
    Réponses: 10
    Dernier message: 10/01/2008, 08h46
  3. [SWT][IHM]Probleme d'affichage des icones
    Par barbu0055 dans le forum SWT/JFace
    Réponses: 6
    Dernier message: 03/03/2006, 12h05
  4. [langage] Problème d'affichage
    Par marcoss dans le forum Langage
    Réponses: 3
    Dernier message: 29/08/2003, 13h05
  5. IE [Applet] Plug-in problème d'affichage
    Par Tonton Luc dans le forum JBuilder
    Réponses: 4
    Dernier message: 19/06/2003, 08h28

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