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

Langage Delphi Discussion :

Tracer un cercle transparent


Sujet :

Langage Delphi

  1. #1
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut Tracer un cercle transparent
    Bonjour,

    je vous explique mon petit problème: je charge une image dans un TPaintbox. Je désire ensuite faire différentes figure sur le paintbox, entre autre des cercle mais je voudrais faire un cercle qui soit transparent (qu'on puisse voir le dessin derrière)
    Je crée un Tbitmap dans lequel je dessine le cercle et ensuite je dessine le bitmap sur le paintbox.
    Faut-il que j'utilise le bitmap.canvas.Ellipse() ? ou une autre technique ?
    C'est un peu le flou avec les propriétés transparent: sur un OS ca fonctionne, sur d'autres non...

    Merci d'avance !
    Voici la méthode de mon chef:

    copy (DateTimeToStr(Now),7,4)+
    copy (DateTimeToStr(Now),4,2)+copy (DateTimeToStr(Now),1,2)+copy (DateTimeToStr(Now),12,2)+
    copy (DateTimeToStr(Now),15,2)+copy (DateTimeToStr(Now),18,2)

    Je lui ai dit que FormatDateTime irait surement mieux


  2. #2
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    garde l'image dans un buffer (TBitmap)
    dessine le cercle directement sur TPaintBox avec la propriété Style du Pen à une valeur du genre psMerge etc... (test les valeurs).

    sinon, utilise une lib graphique qui comprend facilement l'alpha (GDI+, OpenGL etc.)


    ce qui donnerais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
       PaintBox1.Canvas.Draw(0,0, PictureBuffer); 
       PaintBox1.Canvas.Pen.Color := clFuschia;
       PaintBox1.Canvas.Pen.Style := psMerge;
       PaintBox1.Canvas.Brush.Color := PaintBox1.Canvas.Pen.Color;
       PaintBox1.Canvas.Ellipse(Zone1Rect);
    end;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  3. #3
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut
    Bonjour,

    merci pour ta réponse.


    Citation Envoyé par Dr.Who Voir le message
    garde l'image dans un buffer (TBitmap)
    dessine le cercle directement sur TPaintBox avec la propriété Style du Pen à une valeur du genre psMerge etc... (test les valeurs).
    Oui mais tous les dessins que je fais sont représentés sous formes d'objets qui sont ensuite ajoutés dans une liste d'objets de manière à ce que je puisse faire des Undo et Redo de mes actions. Ça va me faire une belle usine à gaz de déssiner quelques dessins dans des TBitmap et ensuite sur le PaIntbox et d'autres directement dans mon Paintbox...

    Citation Envoyé par Dr.Who Voir le message
    sinon, utilise une lib graphique qui comprend facilement l'alpha (GDI+, OpenGL etc.)
    J'aimerais garder, dans un premier temps les composants natifs de Delphi 7..pour plusieurs raisons...

    est-il envisageable d'utiliser un polyline pour dessiner un cercle ou est-ce une idée débile ?
    Voici la méthode de mon chef:

    copy (DateTimeToStr(Now),7,4)+
    copy (DateTimeToStr(Now),4,2)+copy (DateTimeToStr(Now),1,2)+copy (DateTimeToStr(Now),12,2)+
    copy (DateTimeToStr(Now),15,2)+copy (DateTimeToStr(Now),18,2)

    Je lui ai dit que FormatDateTime irait surement mieux


  4. #4
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    heu c'est débile oui ...

    utilise ellipse plutôt ... polyline ne sert qu'a déssiner des polygones bien angulaire ou des suites de lignes comme pour les graph par exemple.

    sinon, encore une autre solution, si ton cercle à toujours la meme taille, tu peux le mettre dans un PNG transparent que tu déssinera avec la méthode Draw du canvas.
    la transparence passe toute seule dans ce cas, je l'ai utilisé souvent dans la creation de petit jeux ou d'interface graphique.

    tu peux avoir quelques cercles PNG de taille différente (20x20, 40x40 etc) et hop.

    mais avec la pure GDI et les composant de base de D7, tu n'aura jamais une vrai transparence.

    avec la GDI+, assé simple à mettre en place, tu pourrais le faire aussi.
    mais limite la fonctionnalité à Windows!

    aprés, tu peux passé à OpenGL ... mais juste pour déssiné un cercle transparent ... c'est un peu lourd.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  5. #5
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut
    Merci Docteur pour tes réponses...je vais m'en dépatouiller !
    Voici la méthode de mon chef:

    copy (DateTimeToStr(Now),7,4)+
    copy (DateTimeToStr(Now),4,2)+copy (DateTimeToStr(Now),1,2)+copy (DateTimeToStr(Now),12,2)+
    copy (DateTimeToStr(Now),15,2)+copy (DateTimeToStr(Now),18,2)

    Je lui ai dit que FormatDateTime irait surement mieux


  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Cpt Anderson Voir le message
    Merci Docteur pour tes réponses...je vais m'en dépatouiller !
    quelque chose comme ça ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut
    Merci Paul.

    le secret était Canvas.Brush.Style:=bsClear ;

    Super ton programme, dire que je viens de passer je ne sais pas combien de jours à faire à peu près la même chose
    Voici la méthode de mon chef:

    copy (DateTimeToStr(Now),7,4)+
    copy (DateTimeToStr(Now),4,2)+copy (DateTimeToStr(Now),1,2)+copy (DateTimeToStr(Now),12,2)+
    copy (DateTimeToStr(Now),15,2)+copy (DateTimeToStr(Now),18,2)

    Je lui ai dit que FormatDateTime irait surement mieux


  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Cpt Anderson Voir le message
    Merci Paul.

    le secret était Canvas.Brush.Style:=bsClear ;

    Super ton programme, dire que je viens de passer je ne sais pas combien de jours à faire à peu près la même chose
    pas de soucis... ceci dit un cercle est "toujours" transparent...sinon c'est un disque
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. [infographie] tracer arc cercle
    Par orelero dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 11/08/2013, 11h40
  2. [fillOval]Tracer des cercles
    Par Fredo02 dans le forum 2D
    Réponses: 11
    Dernier message: 13/12/2006, 14h18
  3. Tracer un cercle en 3d
    Par zanouni dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/03/2006, 19h12
  4. [AS] Tracer un cercle
    Par pitchounette13 dans le forum Flash
    Réponses: 2
    Dernier message: 06/01/2006, 10h03
  5. [VB6] [Graphisme] Tracer un cercle avec pset
    Par bleuerouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/12/2002, 17h12

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