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 fonctionnement du Canvas


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut Problème de fonctionnement du Canvas
    Bonsoir à tous,
    Depuis 2 jours, le canvas n'affiche rien. Exemple tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
            Form1->Canvas->Brush->Color=clWhite;
            Form1->Canvas->Rectangle(0,0,15,15);
    }
    Resultat : La Form ne bronche pas.
    Si je pouvais avoir une solution à ce problème merci...

  2. #2
    Membre chevronné Avatar de winow
    Inscrit en
    Novembre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Novembre 2004
    Messages : 669
    Par défaut
    Essai sans mettre "Form1->"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Canvas->Brush->Color = clRed;
    +A

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Est ce que ce n'est pas ce que tu cherche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    // mise en couleur de la forme fond blanc
    Form1->Color = clWhite;
     
    // dimensionner la forme en haut a gauche
    // longeur 105 hauteur 105
    Form1->Top = 0;
    Form1->Left = 0;
    Form1->Height = 105;
    Form1->Width = 105;
    }
    //---------------------------------------------------------------------------

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    No Blondelle
    ce que je voulais c'était juste faire un carré sur la Form pour vérifier que mon Canvas marchait
    D'ailleurs ca ne marche toujours pas.
    Je ne vois pas d'où celà peut provenir... Peut-être des options du projet.

    PS : Le canvas ne marche ni sur la form ni sur la PaintBox... .
    Voici la fonction en question...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    void Redraw(TForm1 *Form)
    {
    int i,j,k;
    TPaintBox *pBox;
            for (i=0; i<3; i++){
                    for (j=0; j<3; j++){
                            for (k=0; k<6; k++){
                                    switch (k)
                                    {
                                    case 0 : pBox=Form->Front; break;
                                    case 1 : pBox=Form->Left; break;
                                    case 2 : pBox=Form->Right; break;
                                    case 3 : pBox=Form->Up; break;
                                    case 4 : pBox=Form->Down; break;
                                    case 5 : pBox=Form->Back; break;
                                    }
                                    switch (Cube[k][j][i])
                                    {
                                    case 1 : pBox->Canvas->Brush->Color=clWhite;                     break;
                                    case 2 : pBox->Canvas->Brush->Color=clBlue; break;
                                    case 3 : pBox->Canvas->Brush->Color=clRed; break;
                                    case 4 : pBox->Canvas->Brush->Color=clGreen; break;
                                    case 5 : pBox->Canvas->Brush->Color=clYellow; break;
                                    case 6 : pBox->Canvas->Brush->Color=clPurple; break;
                                    }
                            pBox->Canvas->Rectangle(i*40,j*40,i*40+40, j*40+40);
                            }
                    }
            }
    }

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    voila quelque chose qui marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    // mise en couleur fond blanc
    //Form1->Color = clWhite;
     
    // dimensionner la forme en haut a gauche
    // longeur 105 hauteur 105
    Form1->Top = 0;
    Form1->Left = 0;
    Form1->Height = 400;
    Form1->Width = 400;
    Image1->Canvas->Brush->Color = clWhite;
    Image1->Canvas->Rectangle(0, 0, 100, 100);
     
    }
    //---------------------------------------------------------------------------
    Est tu sur que tous les Canvas sont visible il est possible que le Canvas de certains composant soient invisible

  6. #6
    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 !

    Celà vient du fait que le dessin par le canvas est temporaire.
    Il faut solliciter la méthode qui dessine dans les événements OnPaint et OnResize de la Form.

    Ca reste vrai pour un TPaintBox pour ce qui est de l'événement OnPaint.

    A plus !

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Par défaut
    Voici un exemple de Canvas qui marchait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    switch (Recover[q][f])
         {
         case 1 :   pBox->Canvas->Brush->Bitmap=Form->_1->Picture->Bitmap; break;
        case 2 : pBox->Canvas->Brush->Bitmap=Form->_2->Picture->Bitmap; break;
        case 3 : pBox->Canvas->Brush->Bitmap=Form->_3->Picture->Bitmap; break; // etc...
                                                    }
    pBox->Canvas->Rectangle(r*20,s*20,r*20+20,s*20+20);
    Aucune différence hors mis le fait que cet exemple se sert de bitmap...
    Le canvas est ici utilisé sur la PaintBox...
    J'ai beau crée un rectangle par défaut sur ma Form rien ne se fait rien ne se crée... Et je n'avais pas besoin d'un évènement OnPaint ou OnResize pour dessiner à ma guise les rectangles ou les TBitmap...

  8. #8
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Bonsoir,

    J'essaie de résoudre ce problème, est je suis tombé sur un os moi aussi. Je profite donc de ce post afin d'exposer mon problème.

    Voici mon .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //---------------------------------------------------------------------------
     
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
            void __fastcall FormCreate(TObject *Sender);
    private:	// Déclarations utilisateur
                    Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
    public:		// Déclarations utilisateur
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    Et voici mon .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      image->Canvas->Brush->Color=clWhite;
      image->Canvas->Rectangle(0,0,15,15);
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormPaint(TObject *Sender)
    {
      Canvas->Draw(0,0,image);
    }
    Et l'erreur généré par BCB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C++ Erreur] Unit1.h(17): E2233 Impossible d'initialiser un membre de classe ici
    Je ne comprends pas trop comment faire pour le déclarer en global.

    Sinon, j'ai un bout de code qui est tiré de BCB est qui pourrait être intéressant pour Julien_C++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void __fastcall TForm1::Button1Click(TObject *Sender)
     
    {
      Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
      try
      {
        pBitmap->LoadFromFile("C:\\Program Files\\Common Files\\Borland Shared\\Images\\Splash\\256color\\factory.bmp ");
        pBitmap->Transparent = true;
        pBitmap->TransparentColor = pBitmap->Canvas->Pixels[50,50];
        Form1->Canvas->Draw(0,0,pBitmap);
        pBitmap->TransparentMode = tmAuto;  
        Form1->Canvas->Draw(50,50,pBitmap);
      }
      catch (...)
     
      {
        ShowMessage("Ne peut charger ni afficher le bitmap");
      }
      delete pBitmap;
    }
    Merci

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

Discussions similaires

  1. [Java2D] Problème de taille du canvas
    Par vero55 dans le forum 2D
    Réponses: 2
    Dernier message: 16/04/2007, 09h44
  2. Réponses: 5
    Dernier message: 16/12/2006, 12h24
  3. [HashTable] Problème de fonctionnement
    Par RR instinct dans le forum Langage
    Réponses: 8
    Dernier message: 22/06/2006, 14h01
  4. Datecalc : problème de fonctionnement
    Par mollux dans le forum Modules
    Réponses: 2
    Dernier message: 07/06/2006, 08h59
  5. [Tomcat] Problème de fonctionnement de Tomcat sous linux
    Par lautux dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 18/03/2006, 10h30

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