USER CONTROL GRAPHIQUE VB 2005

zavier666 Messages postés 266 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 30 avril 2009 - 19 mai 2007 à 17:48
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010 - 16 oct. 2007 à 22:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42764-user-control-graphique-vb-2005

surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
16 oct. 2007 à 22:38
cs_Maxime31 Messages postés 79 Date d'inscription samedi 4 février 2006 Statut Membre Dernière intervention 28 juillet 2008
16 oct. 2007 à 19:31
Quelqu'un sait si il existe un équivalent pour creer des graphiques en "camembert" ?
cs_Maxime31 Messages postés 79 Date d'inscription samedi 4 février 2006 Statut Membre Dernière intervention 28 juillet 2008
16 oct. 2007 à 18:21
Réponse rapide et précise, merci beaucoup

Superbe cet outil ! Et Relativement simple a utiliser même pour des débutants. Du très beau boulot !
cs_Maxime31 Messages postés 79 Date d'inscription samedi 4 février 2006 Statut Membre Dernière intervention 28 juillet 2008
16 oct. 2007 à 09:26
Effectivement, une fois généré, le programme semble bien fonctionner. Un module UcGraph s'affiche.

Je me permet de reposer une question, car ce que tu as fait m'interesse beaucoup.

Comment je dois proceder pour integrer cet outil graphique à un autre programme que je suis en train de faire ?

Je te donne mon email si tu veux maximedarde chez yahoo.fr
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
15 oct. 2007 à 09:09
Quand tu as ajouté le fichier, il faut generer la solution pour referencer le module.

Normalement ca doit marcher apres cela
cs_Maxime31 Messages postés 79 Date d'inscription samedi 4 février 2006 Statut Membre Dernière intervention 28 juillet 2008
14 oct. 2007 à 22:05
J'ai
Type 'Graphique.UcGraph' introuvable. Assurez-vous que l'assembly qui contient ce type est référencé. Si ce type est un composant de votre projet de développement, assurez-vous que le projet a été créé comme il se doit.

Comment régler ca ? Je suis en VS 2005
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
4 oct. 2007 à 09:00
en fait une foi que tu as finit de suivre le tutoriel, tu n'as pas une seule ligne de code a taper tout ce parametre a la souris, sauf le conecteur de donné ou il faut quand même utiliser le clavier mais la encore ces dans partie graphique chez moi ma feuille de code est vide
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
4 oct. 2007 à 08:58
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
3 oct. 2007 à 14:18
Tu pourrais nous en dire plus, l'adresse par exemple, ca serait genial.
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
3 oct. 2007 à 13:15
j'ai pas encore réessayer mais hier je suis tombé sur une méthode expliquer sur le site de microsoft pour transformer la dll de office web componant en ocx et maintenant sous VB2005, dans ma barre d'outil j'ai axpivot, axchart etc ...
il suffit donc de le mettre sur une frm (comme ton control) mais la tu as toute les fonctions possible et inimaginable de courbe.
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
3 oct. 2007 à 11:43
Nonnonon, c'est du VB 2005... Ca marche avec le nouveau ZIP ?
nours87 Messages postés 33 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 5 octobre 2007
3 oct. 2007 à 10:00
Perso, je n'ai pas eu de soucis lors de mon dernier essai.

++
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
3 oct. 2007 à 09:54
Le code de départ a du etre fait avec VB 2003 ?
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
2 oct. 2007 à 17:38
J'ai remplacé le ZIP.
Cependant, si on integre dans un nouveau projet les trois fichiers UcGraph, ca fonctionne. Il semble y avoir 2 problemes :
- le fichier rajouté par le site (@telecharge....) pose un probleme a decompresser
- le projet a perdu les references projets du repertoire projet
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
2 oct. 2007 à 13:53
Je ne sait pas si cela provient de la restructuration du site mais chez moi le zip pose probleme, pouvez vous essayer de télécharger le zip et de le decompresser pour voir si il n'y a pas d'erreur chez vous ensuite lancer la solution avec "_Graphique.sln" et compiler. pour ma part j'ai une erreur a l'extraction et a la compilation (certain fichier semble manquer)
nours87 Messages postés 33 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 5 octobre 2007
27 sept. 2007 à 10:44
En effet ça a nettement réduit l'écart, c'est très bien maintenant.

Pour ma part tout est Ok et le résultat est vraiment bien.

Merci pour toute ton aide.

++
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
27 sept. 2007 à 10:36
En fait je vien de m'apercevoir que c'etait pas le bon ZIP !

Il y a deux erreurs notoire qui sont les fonctions minval et maxval qui ne prennent pas en compte les reels et nagatifs, et la fonction arrondi qui n'etait pas correcte.

Je viens de remettre a jour le ZIP. (Faut que je fasse le menage chez moi un peu aussi.

Dis moi si ca corrige ton soucis
nours87 Messages postés 33 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 5 octobre 2007
27 sept. 2007 à 10:32
C'est parfait, ca marche bien, il faut faire bien attention a ne pas avoir de valeurs non remplies dans ce qu'on rentre comme donnée (Ma premiere valeur était toujours 0 ce qui rendait la fonction inutilisée).

Par contre j'ai un petit soucis d'échelle sur l'axe des Y. Ma valeur maxi est 140 par exemple (mini a 40) et la valeur maxi affichée sur l'axe des Y est 300, sur quel paramètre doit on jouer pour diminuer cet écart?

Merci de ton travail. C'est de mieux en mieux!
nours87 Messages postés 33 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 5 octobre 2007
27 sept. 2007 à 09:57
Ok merci bien des explications, je vais vois comment je peux modifier ca pour que cela colle avec mon application.

Merci.
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
27 sept. 2007 à 09:52
Salut Nours87

Cela fonctionne de la facon suivante :

si tu indiques que tu ne veux pas que l'axe commence a zero (false) alors le point de depart du graphe est calculé par la fonction 'arrondi'. Ex : Plus petite valeur 151> arrondi a 100, 95 = 90, arrondi a la dizaine
Cela defini les bornes mini maxi du graphique et tout est calculé par rapport a ces deux bornes.
Tu peux modifier dans la fonction si tu ne souhaite pas d'arrondi ou qu'ils soient faits autrement.

L'axe aura un zero, meme si on demande que non, dans les cas où :
on trace des barres sur une serie, la plus petite valeur est egale ou inferieure a zero.

J'espere repondre a ta question....
nours87 Messages postés 33 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 5 octobre 2007
27 sept. 2007 à 09:41
Salut Lapix,

J'ai ré-installé cette nouvelle version. Et pour ce qui me concerne (faire en sorte que l'axe des y ne commence pas à 0), j'avoue que je ne comprends pas bien comment cela fonctionne.

J'ai bien indiqué que je voulais que l'axe ne commence pas à 0 à l'aide de la propriété booléenne, mais quelle valeur prend il comme origine puiqu'on ne lui indique pas? Est il possible de définir l'étiquette de l'axe des y?

Même en utilisant cette propriété mon graph utilise toujours 0 comme origine.

En tout cas merci pour ton travail.
++
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
26 sept. 2007 à 18:35
Je viens de reposter. j'espère avoir tenu compte de toutes les remarques. Que ceux qui auraient été délaissées n'hesitent pas à se manifester. J'ai testé avec un bon nombre de séries mais cependant limité, n'hésitez pas sur le feedback
Merci à tous
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
22 sept. 2007 à 15:50
En fait aprés avoir fait le curieur en lisant les 3 sources de ce controle, j'ai finit par récrire completement le code pour tracer des courbes dans mon prog et j'ai donc utilisé la méthode drawlineS pour tracer 6 courbes, c'est vraiment plus performant, l'affiche d'une courbe avec plus de 17 milles point est quasi instantané.
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
21 sept. 2007 à 22:54
Je ne sais pas si ca rend plus performant, mais par contre ca eclairci considerablement le code

A suivre
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
14 sept. 2007 à 12:00
La méthode utilisé pour rejoindre les point semble etre :
g.DrawLine(DrawPen, xCourbe, yCourbe, xCourbeTo, yCourbeTo)
Comme on voit drawline n'as pas de S a la fin donc je supose que tu fait une boucle sur le nombre de points demandé qui appel la fonction dessinecourbe.
il exist la fonction drawlines ( avec un S), ne serait il pas plus judicieu et surtout plus perfomant de faire quelques chose dans le genre :
'Remplisage du tableau de point :
Dim p As Point() = { _
New Point(10, 100), _
New Point(75, 10), _
New Point(80, 50), _
New Point(100, 150), _
New Point(125, 80), _
New Point(175, 200), _
New Point(200, 80)}
4dessine tout la courbe en une seule operation
g.DrawLines(DrawPen, p)
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
14 sept. 2007 à 08:35
C'est effectivement ce code qui m'a servi de reference. J'avais trouve le design sympa et moi je suis nul de ce coté là...
En fait je me suis contenté de changer les methodes pour que l'uc soit proprietaire d'un max de choses, et de rajouter les moyennes mobiles et la legende.

Merci encore a Nicholas99 et aussi d'avoir retrouvé son code pour le citer car je n'avais pas remis la main dessus
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
13 sept. 2007 à 17:59
dedebatou Messages postés 13 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 13 septembre 2007
13 sept. 2007 à 14:53
Ton code ressemble étrangement à celui de nicolas99 posté en 2006, mis à part que t'as mis de l'ordre et remplacé le nom des variables par des noms plus cohérents...

J'ai trouvé comment afficher des données négatives:
Il faut utiliser la fonction MinVal() mais il faut la corriger car il y a une erreur:
"If OrdreCourbes.Count = 0 Then Return MaxVal()" c'est Return MinVal et pas MaxVal..
Tu crée une variable privée dans le module (perso j'ai crée vmin)
dans la fonction DessineGrille, tu apelles Minval (par exemple après avoir appelé Maxval) et tu sauve la valeur min dans la variable vmin.

Tu rajoutes ensuite ce vmin dans chaque calcul de graphe, il doit y avoir 5 ou 6 zones à modifier (dans dessinecourbe, dessinemoyenne, dessinebar...)
La zone de code exacte à modifier est celle où tu définis les valeur de Y en fonction de TempValeurs

Par exemple "yCourbe = Fond.Height - MargeBasse - (TempValeurs(0) / EchelleAxeY * PasDeDessinY)"
à chaque fois tu rajoutes -vmin, ce qui donne dans l'exemple précédent:
"yCourbe = Fond.Height - MargeBasse - ((TempValeurs(0)-vmin) / EchelleAxeY * PasDeDessinY)"

C'est pareil à chaque fois que tu as y = quelque chose fonction de TempValeur.


Je ne donne pas le module modifié puisque j'ai en fait utilisé le code initial de nicolas99 et le variables ne correspondent pas...
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
13 sept. 2007 à 09:55
D'un point de vu pratique, tu peux mettre des valeurs negatives mais a l'heure actuelle, elles se trouveront hors zone de dessin.
Je traite ce probleme en meme temps que l'axe Y avec point de depart autre que 0

Dans la prochaine mise a jour...
dedebatou Messages postés 13 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 13 septembre 2007
12 sept. 2007 à 16:43
Est-il possible d'afficher des valeurs négatives??
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
12 sept. 2007 à 12:47
Effectivement SURFZOID !

C'est la prochaine etape.

Je termine d'abord le 'probleme' du 0 des Y et ensuite je transformerais tout cela pour prendre en compte tout type de donnee.

Pour DEDEBATOU : tu generes la solution apres avoir importé l'UC. Tu devrais ensuite le retrouver dans ta barre d'outils sans probleme

Merci a tous
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
10 sept. 2007 à 23:12
tu ne réferance pas comme il faut l'ocx/dll graph.dll dans ton projet
dedebatou Messages postés 13 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 13 septembre 2007
10 sept. 2007 à 17:14
Bonjour,

Chez moi ça ne marche pas, j'ai un message d'erreur au chargement du projet: "Could not find type 'Graphique.UcGraph'".

une solution peut-être??

Merci
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
7 sept. 2007 à 17:35
Cela m'a l'air plutot prometteur, as tu intégrer la possibilité d'utilisé des réels plutot que des entier comme expilque sur la portabilité du composant en C# :
http://www.csharpfr.com/codes/USERCONTROL-GRAPHIQUE-CSHARP_43385.aspx
nours87 Messages postés 33 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 5 octobre 2007
20 août 2007 à 09:49
Merci beaucoup a toi pour cet UC et pour ton travail.

++
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
20 août 2007 à 09:28
Salut nours

La seule propriete de l'axe Y est _TitreAxeY. C'est pour le moment la seule chose que l'on defini a part entiere.

Pour ce qui est des etiquettes, elles sont calculées en auto et demarrent toujours de 0. Je prends en compte ta remarque pour faire evoluer cela.

Je posterais une mise a jour bientot

Merci d'avoir soulevé cela
nours87 Messages postés 33 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 5 octobre 2007
16 août 2007 à 10:38
Très bon UserControl, simple à utiliser (moi qui suis débutant ca a été) et efficace.

J'aurais seulement voulu savoir s'il était possible d'ajouter la possibilité à l'utilisateur de définir l'étiquette de l'axe Y?
Ou du moins de re-définir le 0 en ordonnée afin que justement cela ne soit plus 0 mais une valeur (ca améliorerait le rendu et la précision du graph surtout si les valeurs en y sont comprises entre 1200 et 1100 par exemple).

Je demande ca mais je n'ai peut être pas trouvé comment le faire si ca existe déjà.

Merci d'avance et encore bravo.
++
cs_lapix Messages postés 34 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 14 juin 2023 1
30 juil. 2007 à 16:31
Merci le jumeau,

Je corrige mon propre code

A te lire si d'autres difficultés
(un minimum j'espere)
le5ejumeau Messages postés 130 Date d'inscription mardi 11 mars 2003 Statut Membre Dernière intervention 9 juillet 2009
25 juil. 2007 à 15:22
Sublime ... J'ai testé est c'est vraiment bien (Enfaite j'adore les composant où l'on ne se prend pas la tête pour l'utiliser)

petit bug que j'ai rencontré au premiere abord :

- Le titre de l'axe X est mal placé
j'ai remplacé cette ligne :
Dim xPos As Integer = (Fond.Width - (GetLargeurChaine(Z_NomAxeX, g, Z_FontAxeX) / 2))
par
Dim xPos As Integer = (Fond.Width / 2 - (GetLargeurChaine(Z_NomAxeX, g, Z_FontAxeX)) / 2)
Et c'est bon semble t'il.

Voilà si je trouve d'autre bug je te fais signe
zavier666 Messages postés 266 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 30 avril 2009 1
19 mai 2007 à 17:48
La plupart des OCX que l'on trouve sur ce thème sont difficile à utiliser. Là pour une fois, c'est simple et puissant! !

Bon travail!

slts!
-----------------------------------------------------
Toujours + de VB et d'APi => API @ La Loupe
http://xav.prog.power.free.fr
Rejoignez-nous