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 :

Canvas dans un constructeur FMX Builder 10.3 starter


Sujet :

C++Builder

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 130
    Points : 59
    Points
    59
    Par défaut Canvas dans un constructeur FMX Builder 10.3 starter
    Bonsoir,

    Pour me familiariser avec la POO, j'aimerais créer un bouton et notamment le dessiner dans un constructeur.
    Le problème est que la classe TCanvas n'est pas reconnue dans mon constructeur.
    Merci pour votre aide
    Cordialement


    Dans .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
     
    class TBouton
    {
        public:
     
    	TBouton(); //Constructeur
     
    	Void deplace(int x, int y);
            etc ...
     
    	private:
     
    	int m_longueur;
    	int m_hauteur;
    	int m_x;
            int m_y;
    	std:: string m_nomBouton;
    };
    dans .cpp
    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
     
    // constructeur
    TBouton::TBouton(): m_x(10), m_y(10),m_longueur(200),m_hauteur(100)
    {
      TRectF MyRect;   // pour dessiner un rectangle
      MyRect.init(m_x, m_y,m_longueur,m_hauteur);
     Canvas->BeginScene(); // [bcc32 Erreur] Unit1.cpp(22): E2451 Symbole 'Canvas' non défini
     
    }
     
    void __fastcall TForm1::Button1Click(TObject *Sender)   // là ça marche 
    {
      TRectF MyRect;   // pour dessiner un rectangle
      MyRect.init(10,10, 200, 100);
      Canvas->BeginScene();
      Canvas->Fill->Color = claRed;
      Canvas->FillRect(MyRect, 0, 0, AllCorners, 1);
      Canvas->EndScene();
    }

  2. #2
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Il ne faut pas dessiner dans le constructeur car sa va être impossible de rafraichir le dessin.

    La façon que je ferais serait de créer une classe qui hérite au moins de TControl et de mettre le code pour dessiner dans la méthode Paint.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 130
    Points : 59
    Points
    59
    Par défaut Canvas dans un constructeur FMX Builder 10.3 starter
    Merci Crayon

    En déclarant la classe de cette façon ?

    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
     
    class TBouton : public TControl
    {
        public:
     
    	TBouton(); //Constructeur
     
    	Void deplace(int x, int y);
            etc ...
     
    	private:
     
    	int m_longueur;
    	int m_hauteur;
    	int m_x;
            int m_y;
    	std:: string m_nomBouton;
    };

  4. #4
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Voici a peu près comment je le ferais:

    Dans le fichier d'entête:
    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
    class TBouton : public Fmx::Controls::TControl
    {
        typedef Fmx::Controls::TControl inherited;
     
    private:
        float m_longueur;
        float m_hauteur;
        float m_x;
        float m_y;
        std:: string m_nomBouton;
     
    protected:
        virtual void __fastcall Paint();
     
    public:
        __fastcall TBouton(System::Classes::TComponent* AOwner);
        inline __fastcall virtual ~TBouton() { }
     
        __property float X = {read=m_x, write=m_x};
        __property float Y = {read=m_x, write=m_y};
        __property float Longueur = {read=m_longueur, write=m_longueur};
        __property float Hauteur = {read=m_hauteur, write=m_hauteur};
    };
    Dans le fichier cpp:
    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
    33
    34
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        // Initialisation du contrôle dans la Form
        TBouton* FBouton = new TBouton(this);
        FBouton->Parent = this;
        FBouton->X = 50.0f;
        FBouton->Y = 50.0f;
        FBouton->Longueur = 100.0f;
        FBouton->Hauteur = 100.0f;
    }
    //---------------------------------------------------------------------------
     
    __fastcall TBouton::TBouton(System::Classes::TComponent* AOwner)
        : TControl(Owner)
        , m_x(0.0f)
        , m_y(0.0f)
        , m_longueur(1.0f)
        , m_hauteur(1.0f)
    {
     
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TBouton::Paint()
    {
        const TRectF LMyRect = TRectF(TPointF(this->m_x, this->m_x),
            this->m_longueur, this->m_hauteur);
        Canvas->BeginScene();
        Canvas->Fill->Color = claRed;
        Canvas->FillRect(LMyRect, 0, 0, AllCorners, 1);
        Canvas->EndScene();
    }
    //---------------------------------------------------------------------------
    J'ai testé et sa fonctionne bien

    Si tu veux changer le X, Y, H et L pendant l'exécution il va te falloir des setter pour tes propriétés qui appellent Repaint() pour faire un refresh.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 130
    Points : 59
    Points
    59
    Par défaut
    Merci Crayon pour tes réponses. Je vais étudier ton code. Bonne journée.

Discussions similaires

  1. Pb affichage du canvas dans une TImage
    Par Tango dans le forum Composants VCL
    Réponses: 28
    Dernier message: 11/10/2005, 13h57
  2. [Layout] Mettre un Canvas dans un GridBagLayout
    Par arnobidul dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 06/09/2005, 11h17
  3. [Plugin] Créer un Canvas dans un EditorPart
    Par Cyrion dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 07/04/2005, 15h31
  4. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52
  5. Liaison d'une dll Visual C++ dans un programme c++Builder
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/11/2003, 13h49

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