Développement graphique dans C++ Builder 6?

Résolu
J'essaie actuellement de créer un jeu simple dans Borland C++ Builder 6 mais j'ai certains problèmes avec l'affichage des graphiques. Par exemple, voici le code faisant rebondir horizontalement un graphique contenu dans ImageList1:

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Canvas->Pen->Color = clMaroon;
    Canvas->Brush->Color = clBlack;
    Canvas->Rectangle(0, 0, Width, Height);
    if (posx>=Width-16) direction=1;
    if (posx<=-16) direction=0;
    if (!direction) posx+=4;
    else posx-=4;
    ImageList1->Draw(Canvas,posx,32,0,1);
}


Tout fonctionne bien mais on peut remarquer une bande noire passant par dessus le graphique par intermittence, montrant que le canvas se rafraichit après toutes modifications et non pas seulement à chaque paint(). Comment faire pour que le canvas se rafraishisse seulement après y avoir mis tous les graphiques?

8 réponses

  1. Bonjour je voudrai télécharger c buider 6, pour programmer mais ji arrive pa
    . j'ai un pc pour bureau et g vista
    comment dois-je faire?
    svp aidez moi
    jen ai besoin pour bosser et m'entrainer j'ai un examen à passer
    svp
    2
    1. En général, pour éviter ce genre de problème, on travaille dans un bitmap temporaire et une fois le dessin terminé dans le bitmap, on le transfère dans le canvas.
      1
      1. Est-ce que je pourrais connaitre la bonne façon de faire ça? J'ai essayé de dessiner dans un contrôle Image temporaire et de le transférer sur un autre mais ça ne fonctionne pas, il y a toujours un glitch.
        0
      2. Voilà ce que cela pourrait donner avec une image stockée dans un TImage :
        void __fastcall TForm1::Timer1Timer(TObject *Sender)
        {
          static int posx = 0;
        
          // Création d'un bitmap temporaire
          Graphics::TBitmap *bitmap = new Graphics::TBitmap();
          bitmap->Width = Width;    // Donne les dimensions du Canvas au bitmap
          bitmap->Height = Height;
        
          // On dessine dedans
          bitmap->Canvas->Pen->Color = clMaroon;
          bitmap->Canvas->Brush->Color = clBlack;
          bitmap->Canvas->Rectangle(0, 0, Width, Height);
          posx += 20;  // Translation en X de 20 pixels
        
          // Pour la demo, j'utilise une image que j'ai mis dans un TImage
          bitmap->Canvas->Draw(posx,0,Image1->Picture->Graphic);
        
          // On recopie le bitmap dans le Canvas de la form
          Canvas->Draw(0,0,bitmap);
        
          // Suppression du bitmap temporaire
          delete bitmap;
        }
        
        0
      3. @lirey83Je suis très surpris mais ça marche bien! Merci infiniment!
        0
    2. slt je viens de debuter avec c++ builder et j'aimerai avoir des cours ou des tutos pour pouvoir bien maitriser le logiel.
      merci d'avance.
      1
    3. je doi pouvoire construire un graph de control a partir d1 programme ecrit en pascal esk kelk1 pourait m'aidé.help me plz
      merci d'avance
      0
      1. salut nabila je suis brahim ingénieur en electronique ( USTHB) , je travail dans un centre de recherche a alger , je développe quelque logiciels j'aimerai echanger qlque idéés avec vous et te connaitre si c'est pôssible bien sur
        0
    4. svp je cherche du documentation ou de code source pour en c++ builder pour representer des graphique ou histogramme et comment faire translater une image et le faire tourner dans toute les direction et comment binarise une image
      0
      1. donner moi le logiciel c++ builder 6
        et merci
        0
        1. C++Builder 6 c'est payant
          0
      2. je veux un catalogue d'utilisation de c++ builder
        0
        1. C'est quoi ça ?
          0
        2. @Célienje pense qu'il voulait un manuel (un mode d'emploi)
          0
      3. Je ne suis pas sûr que ce soit ça le problème mais si tu utilises des graphiques qui se rafraîchissent il faut toujours mettre ta Form contenant ce graphique en DoubleBuffered, ça permet d'éviter le scintillement car l'image est d'abord placé dans un buffer avant d'être affichée.
        0