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 :

Tableau de shape dans une PaintBox


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 Tableau de shape dans une PaintBox
    Bonjour à tous,

    [BUILDER 2007] Je voudrais savoir comment on peut dériver la classe TShape pour faire en sorte que les éléments de Shape soit dessinés dans une Paint Box.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DrawingBoard->Canvas-> Ellipse(20, 20, 226, 144);
    PaintBox1->Canvas->Draw(0, 0, DrawingBoard);
    Le code ci-dessus permet d'afficher une ellipse dans une PaintBox. Le problème, c'est que j'aimerais pouvoir enregistrer cette ellipse dans un tableau de façon à pouvoir la redessiner ultérieurement. Il est - à priori - facile de créer des tableaux de formes (en particulier avec TShape), mais comment utiliser le canvas de PaintBox après ??

    Comme le site http://www.functionx.com/bcb/gdi/drawing1.htm le préconise, j'utilise la PaintBox au lieu du canevas de la form pour pallier à l'inconvénient du rafraichissement du dessin (tout s'efface quand une autre fenêtre passe sur le canevas).

    Je vous remercie pour votre aide

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    C'est un peu dommage de mélanger du TShape avec du TPaintBox !

    En dérivant de TComponent, on peut développer une classe de base dont on fait ensuite dériver d'autres classes pour se constituer un bestaire graphique.
    On peut rajouter une autre classe toujours dérivée de TComponent pour servir de propriétaire des objets graphiques et agir tel un superviseur sur tous ces objets.
    On n'est pas obligé d'en faire des composants (style palette ...) !

    A partir de là, en matière de graphisme on fait ce que l'on veut !

    Au passage, on n'est pas obligé d'utiliser un TPaintBox pour dessiner !
    Et contrairement à ce que tu peux penser, une Form fait très bien l'affaire ... en passant par un bitmap bien sûr !

    Donc ça te fait déjà une solution !

    A plus !

  3. #3
    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 cette réponse. J'ai essayé l'inclusion d'un bitmap sur le canevas de la Form avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      Graphics::TBitmap *bitmap = new Graphics::TBitmap();
      bitmap->Width = Width;    
      bitmap->Height = Height;
     
      bitmap->Canvas->Pen->Color = clMaroon;
      bitmap->Canvas->MoveTo(0, 0);
      bitmap->Canvas->LineTo(100,100);
      Canvas->Draw(0,0,bitmap);
    cela fonctionne sauf que tout est à nouveau effacé lorsqu'on passe une autre fenêtre dessus.

    Comment gère t'on les bitmaps ??

    Merci d'avance

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    En supposant que l'on ait juste besoin d'une simple accumulation de figures géométriques.
    Dans ce cas, le bitmap en est la mémoire.
    Vis à vis de la form, il suffit de déclarer une méthode qui sera sollicitée dans sa OnPaint et sa OnResize :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    public :
    Grapics::TBitmap *Bitmap;
    void __fastcall DrawBitmap(); 
    ...

    Dans le constructeur de la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Bitmap = new Graphics::TBitmap;
    // Si le bitmap est une simple lucarne dont les dimensions sont connues
    // Bitmap->Width = 
    // Bitmap->Height =
    // A ce stade on peut l'effacer, lui doner une couleur de fond
    //...
    Dans la OnClose de la form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete Bitmap;
    Bitmap = NULL; // <<< au cas où !!!
    Dans la OnPaint et la OnResize de la form :

    La méthode elle-même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall TForm1::DrawBitmap()
    {
    if(Bitmap != NULL) // << au cas où !!!
        {
        Canvas->Draw(...., ... Bitmap);
        }
    }
    Si tu souhaites utiliser TPaintBox, dans ce cas, DrawBitmap n'a pas de raison d'être.
    Il suffit d'exploiter sa OnPaint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
    {
    if(Bitmap != NULL)
        {
        // Comme la méthode est membre de TForm1 ...
        // j'avais donc une erreur ici :
        PaintBox1->Canvas->Draw(0, 0, Bitmap);
        }
    }
    Si on travaille avec des objets graphiques (placer, sélectionner, déplacer, supprimer, redimensionner), dans ce cas, il faudra objétiser !
    Et ce ne serait pas plus compliqué que ce qui vient d'être montré !

    A plus !

  5. #5
    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
    C'est tout bon, merci beaucoup.

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

Discussions similaires

  1. afficher un tableau 2 dimensions dans une fenetre
    Par igor24 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 29/04/2006, 13h50
  2. Réponses: 6
    Dernier message: 16/02/2006, 14h40
  3. Réponses: 2
    Dernier message: 17/01/2006, 13h18
  4. [JpGraph] Passage d'un tableau en paramètre dans une URL pour JPgraph
    Par crazydiver_e2 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 16/01/2006, 16h15
  5. Passer un tableau en parametre dans une fonction js
    Par hellmaster78 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/06/2005, 14h35

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