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# Discussion :

c# - graphique déroulant


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 12
    Par défaut c# - graphique déroulant
    bonjour,

    poussé par des forces qui échappent à mon contrôle, .. je débarque dans le C#.
    donc, je commence gentillement par refaire mes petits programmes..
    mon but est de faire déjà un composant graphique qui doit afficher quelques courbes, et les faire défiler. ajouté à ça, il me faut un timer qui gère la ms.
    les courbes devraient pouvoir dérouler très vite...
    donc, ben, bon, on va dire que techniquement, ça marche..
    par contre, c'est moche. le graphe 'clignote' tant qu'il peut.
    ce qui est vexant, c'est qu'avec le même principe, en VB6 et freebasic, j'obtenais un résultat impeccable.

    donc, je vous soumets mon petit code..
    et j'aurais quelques questions : qu'est ce que j'ai raté? je suis manifestement passé à coté de quelque chose...
    aussi, surement, (!!!), un tas de truc peut être amélioré..
    si qq a l'amabilité de jeter un coup d'oeil...
    et m'indiquer des voies de correction..

    merci par avance.

    Edit : ce n'est pas le genre de chrono auquel je pensais.. peut être, je reposterais ^^
    voilà une version de démo !
    ++
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 12
    Par défaut un problème de plus en moins!
    le problème du scintillement lors de l'affichage des courbes est réglé, avec le BufferedGraphics et BufferedGraphicsContext.
    le graphique est bien devenu véloce!!
    reste toutefois un ou deux trucs à comprendre..
    je posterais la démo finale quand je l'aurais terminée..
    si ça peut aider les petits gars comme moi..

    je suis toujours preneur de commentaires!

  3. #3
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,

    Deux trois remarques :

    Tu as ajouté SetStyle(...) dans le constructeur de Form1, mais le contrôle qui dessine c'est Graph, c'est à lui d'avoir ces styles.
    Utilise ControlStyles.OptimizedDoubleBuffer plutot que ControlStyles.DoubleBuffer.
    Rien qu'avec ça il n'y a plus de scintillement sur le graph.

    Tu as une grosse faute dans ton OnPaint, qui ne se voit que quand on active le doublebuffer justement. A la fin de la méthode tu fais un g.Dispose().
    Cet objet ne t'appartient pas, il ne faut pas le disposer.

    D'ailleurs, en parlant de .Dispose, utilises plutôt la syntaxe using.

    Après tu peux aussi pousser le bouchon, ce n'est pas forcément judicieux selon tes besoins mais tu peux optimiser le dessin en bufferisant "manuellement". J'entends par là qu'il y a des choses que tu recalcule pour redessiner alors que tu pourrais les converser. Tout ce qui est statique en gros, c'est à dire la légende, la grille, etc...

    En réalité, tu pourrais même ne pas redessiner la totalité des points.
    Tu fais une image de la taille du contrôle (tu peux régler la hauteur histoire de limiter la taille de l'image à la hauteur maximale de la courbe) avec un fond transparent, tu dessines tes points dessus. A chaque itération, plutôt que de tout redessiner, tu reprend l'image de l'itération précédente, tu la décale sur la gauche et tu dessine le trait entre le dernier point et le nouveau.

    En faisant ce genre de chose tu limites le nombre de calcules et surtout tu ne dessine et le OnPaint se contente finalement de 2/3 opérations de copie d'image. Cependant, c'est au prix d'une plus forte consommation en mémoire puisque tu conserves des bitmaps supplémentaires.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 12
    Par défaut so good!
    merci, ctxnop, pour ton temps, et ton partage.

    j'ai bien compris le SetStyle(...), et aussi pour g, qu'il ne faut pas détruire.. même que si j'avais fais plus attention....
    le coup du using, c'est trop fort...

    pour une raison qui m'échappe (pour le moment! ^^) je n'ai pas réussi à activer le double buffer sur le graph, autrement que manuellement. peu de modifs du code, somme toute, et pour un résultat très valable. donc, j'adopte la technique..
    le step suivant sera, comme tu le mentionne, un dessin par 'partie'.. En faisant les découpages intelligemment, niveau benchmarking, ça pourrait être rentable..
    je suis dans le proof-of-concept pour le moment...

    je ne clôture pas le sujet de suite..
    le temps d'achever rapidement un chrono qui tient la route (j'ai cru voir que viser une résolution à la dizaine de µs n'était pas utopique!), et je poste un lien vers la source finale..

    Bonne continuation!!!!

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

Discussions similaires

  1. graphique déroulant sous Python
    Par Arduibob dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 11/03/2014, 12h07
  2. Réponses: 1
    Dernier message: 05/07/2007, 12h20
  3. Créer un Graphique déroulant
    Par LePtitVever dans le forum Excel
    Réponses: 1
    Dernier message: 24/05/2007, 10h11
  4. [VBA-E] Selectionner un graphique via une liste déroulante
    Par lapa-jh dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/05/2007, 21h26
  5. Programmation graphique : menu déroulant
    Par ivan33 dans le forum Pascal
    Réponses: 1
    Dernier message: 17/02/2007, 06h35

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