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 :

Dessiner sur un composant sans Canvas


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut Dessiner sur un composant sans Canvas
    Bonjour,

    J'aimerais ajouter une image de fond sur un TRichEdit et sur un TMemo.
    Problème: ces deux composants , qui dérivent de TCustomMemo, n'ont pas de Canvas.

    Y a t'il un moyen de peindre l'arrière plan avec un Bitmap (autre qu'un Bitmap de 8x8 tel que proposé par Brush) ?

  2. #2
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    A tout hasard (je n'ai pas essayé), ne peut tu pas jouer avec un TControlCanvas ?
    (en désignant l'objet 'cible' par la propriété Control du TControlCanvas)

    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    En lisant la doc sur le constructeur du TControlCanvas, il est précisé qu'il ne faut pas l'appeler directement dans une application mais que les composants qui l'utilisent l'appellent dans leur propre constructeur.

    Et à priori, TRichEdit et TMemo n'utilisent pas de TControlCanvas .

    Il y a la solution de dessiner entièrement le contrôle. Pour un TMemo, ça ne parait pas insurmontable. Mais pour un TRichEdit, ça me paraît nettement plus compliqué !

  4. #4
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut, j'ai déjà était confronté à ce problème il y a peu de temps avec un TShape.

    Plusieurs solutions ont été donné sur le post.

    Bon courage

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    La différence est que le TShape est un descendant de TGraphicControl qui possède un Canvas. Pas TWinControl .

  6. #6
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Ché po si il ne faut pas l'appeler directement ou pas, mais lors d'un petit test il n'a pas l'air de trop broncher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TControlCanvas *pCn;
    pCn = new TControlCanvas();
    pCn->Control = Memo1;
    pCn->Rectangle(1, 1, 10, 10);
    Je suppose qu'il doit en être de même pour toutes les autres fonctions du Canvas ...

    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Effectivement, merci, ça dessine bien dans le contrôle. Je vais voir si je peux m'en sortir avec ça.

    Si vous avez d'autres idées, je suis preneur !

  8. #8
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    On peut éventuellement affecter un Bitmap à Brush.
    Voir l'aide pour TBrush::Bitmap.
    Ca fonctionne pour TForm mais c'est à tester sur un TMemo et un TRichEdit.

    Une autre solution serait de refaire un TMemo à partir d'un TCustomControl.
    Ce n'est pas très compliqué sauf que, ce faisant, on a cette désagréable impression de réinventer la roue !

    A plus !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Le Bitmap affecté à Brush est malheureusement limité à un pavé de 8 sur 8.
    Refaire un TMemo, éventuellement. Refaire un TRichEdit complet, je risque d'y passer un bout de temps !
    Merci pour vos conseils. Je vous tiens au courant pour mes essais avec TControlCanvas.

  10. #10
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Avec ma pauvre version BCB3 Pro, je viens de faire le test avec un bitmap 256*196 !
    Pour le fond, ça fonctionne, sauf que le TMemo redessine les chaînes en mode opaque, le fond disparait au fur et à mesure que l'on rempli le TMemo.

    Il faudrait juste savoir si le TMemo est construit à partir du memo de windows, et dans ce cas, voir s'il y a possiblité de le modifier à ce niveau la en rédéfinnissant ses paramètres avec TWinControl::CreateParams.
    Ca peut donc dépendre des options possibles prévues par Windows.

    Ca reste vrai pour le TRichEdit.

    Pour tester l'option avec le bitmap j'ai fait (bêtement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Memo1->Brush->Bitmap = Image1->Picture->Bitmap;
    Voir également du coté de SynEdit, s'il s'agit d'une coloration syntaxique.

    A plus !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    ok, je vais essayer aussi. Je me suis contenté de la doc où il est précisé que si le Bitmap fait plus de 8 sur 8, seul le pavé supérieur gauche de 8x8 est pris en compte. J'avoue que du coup, je n'ai pas testé. Merci pour l'info.

Discussions similaires

  1. Dessiner sur un Jpeg sans perte de qualité
    Par poly128 dans le forum Langage
    Réponses: 3
    Dernier message: 03/09/2007, 21h35
  2. [SWING]Dessiner sur un composant
    Par Tarteens dans le forum AWT/Swing
    Réponses: 22
    Dernier message: 02/07/2007, 10h50
  3. Dessiner sur un composant sans Canvas
    Par bandit boy dans le forum C++Builder
    Réponses: 6
    Dernier message: 08/02/2007, 13h12
  4. dessiner sur un composant picturebox
    Par xantares dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 03/01/2007, 12h05
  5. Comment dessiner sur un Bitmap sans scintillement ?
    Par TOTO32 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/01/2005, 10h11

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