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

VB 6 et antérieur Discussion :

Problèmes avec circle et line dans une picturebox


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut Problèmes avec circle et line dans une picturebox
    Bonjour/bonsoir à tous.

    Après avoir obtenu un buffer correspondant à un enregistrement sonore, je désire représenter sa forme d'onde sur un cercle (car c'est un phénomène répétitif).

    Dans l'ensemble, j'ai résolu la question, à l'aide de la fonction Line, en calculant les sinus et cosinus qui vont bien. Ça, j'ai su le faire, et j'obtiens bien mon onde qui "tourne".

    Alors maintenant, avant d'inscrire de nouveaux segments, je désire effacer les précédents. J'ai essayé de le faire avec la fonction Circle, en précisant l'angle de départ là où va commencer ma nouvelle Line, puis un angle un peu plus grand et une couleur vbWhite...

    Eh bien je n'arrive à rien. J'ai l'impression que l'utilisation des divers attributs "solid", "transparent" et autres "FillStyle"ne correspond pas à la doc µ$.

    J'espère avoir réussi à faire comprendre mon problème : si ça n'est pas le cas, je peux donner plus d'explications.

    J'espère qu'il va se trouver quelqu'un ici qui va savoir m'expliquer ce que je fais mal...

    Merci d'avance.

    AMIcalement.

  2. #2
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    Bon, je vais poser mon problème plus simplement.

    J'ai essayé de simuler mon problème plus simplement : dans une form, j'ai mis une picturebox et un timer. A chaque déclenchement du timer, je trace un segment correspondant à une fraction de cercle, depuis le point précédent, mais en faisant varier un peu le rayon aléatoirement : la figure qui se dessine est une ligne brisée autour d'un cercle. Si je laisse tourner assez longtemps, j'obtiens un cercle avec un contour épais.

    Ce que je n'arrive pas à faire, c'est à effacer "en avant" du segment que je vais tracer, de façon à ce que ma figure ne se recouvre pas elle-même.

    Il me semble que, pour faire ça, il faut jouer sur les drawmode et fillmode et autres de la picturebox, et tracer un arc de cercle devant le futur segment. Mais si je modifie ces paramètres, la picturebox fait un CLS.

    Est-ce plus clair ?

    Merci de me lire.

    AMIcalement.

  3. #3
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 176
    Points
    17 176
    Par défaut
    Salut

    Citation Envoyé par MSDN
    Pour remplir un cercle, définissez les propriétés FillColor et FillStyle de l'objet sur lequel est dessiné le cercle ou l'ellipse. Seule peut être remplie une figure fermée, à savoir cercle, ellipse ou secteur (arcs dont les deux rayons aux extrémités sont dessinés).
    Peut être, pour l'effacement, jouer sur l’épaisseur du trait (DrawWidth).
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    Merci pour la suggestion. Sur un programme d'essai, j'ai pu la faire marcher, mais il y a deux raisons pourquoi ça ne va pas répondre à mon problème :
    1) L'épaisseur du trait se donne en pixels, et je travaille en scalewidth etc...
    2) d'après ce que je vois (je tourne en Windows 10 sur une machine bi-processeur, je ne sais pas si ça joue), le tracé des points, le remplissage des formes etc... semble se faire en multithread, car ça marche très bien si je mets une largeur de trait de l'ordre de 10, mais au delà, je commence à voir mon tracé, derrière, qui "perd des points", ce que j’interprète comme l'effet du thread qui trace le trait large en blanc, et qui est "en retard", sur la suite de mon programme qui trace un trait en noir.

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Pas certain d'avoir "cerné" le point soulevé.
    Je rappelle à toutes fins ce que l'on peut lire dans l'aide VB6 (désolé, mon aide est en anglais) :
    Cls clears text and graphics generated at run time by graphics and printing statements. Background bitmaps set using the Picture property and controls placed on a Form at design time aren't affected by Cls. Graphics and text placed on a Form or PictureBox while the AutoRedraw property is set to True aren't affected if AutoRedraw is set to False before Cls is invoked. That is, you can maintain text and graphics on a Form or PictureBox by manipulating the AutoRedraw property of the object you're working with.
    Le reste n'est que question de stratégie. (AutoRedraw à True -->> desssin "constant" -->> puis autoredraw à False -->> dessin ajouté effaçable par cls, etc ...

    EDIT : sans compter que (de mémoire) on peut également jouer en plus avec les propriétés Picture et Image d'une PictureBox
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 176
    Points
    17 176
    Par défaut
    Salut

    Pour ceux qui, comme moi, ne sont pas très bon dans la langue anglaise ....
    Citation Envoyé par MSDN en français
    La méthode Cls efface le texte et les graphiques générés au moment de l'exécution à l'aide d'instructions graphiques et d'impression. Les images bitmap en arrière-plan définies à l'aide de la propriété Picture et les contrôles placés sur un objet Form au moment de la conception ne sont pas traités par la méthode Cls. Les graphiques et le texte placés sur un objet Form ou PictureBox lorsque la propriété AutoRedraw a pour valeur True ne sont pas modifiés si la propriété AutoRedraw a pris la valeur False avant que la méthode Cls ne soit invoquée. Il est donc possible de conserver des textes et des graphiques sur un objet Form ou PictureBox en modifiant la propriété AutoRedraw de l'objet sur lequel vous travaillez.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

Discussions similaires

  1. Problème avec la multi-sélection dans une zone de liste
    Par Mimisio dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/07/2007, 16h23
  2. Problème avec 2 blocs IF dans une procedure
    Par asgard dans le forum Delphi
    Réponses: 14
    Dernier message: 13/01/2007, 03h07
  3. [SQL] Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 14/08/2006, 13h28
  4. Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/08/2006, 13h21
  5. [VB6] Problème avec la touche 0 dans une MaskEdBox
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/03/2006, 09h47

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