begin process at 2012 02 17 11:34:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > UN USERCONTROL POUR LES DIAGRAMMES, COURBES ET AUTRES, AVEC POSSIBILITÉ DE FAIRE DES COURBES DE TENDANCE

UN USERCONTROL POUR LES DIAGRAMMES, COURBES ET AUTRES, AVEC POSSIBILITÉ DE FAIRE DES COURBES DE TENDANCE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :Graphique, Tendance, UserControl Niveau :Initié Date de création :11/12/2008 Date de mise à jour :15/12/2008 15:53:34 Vu / téléchargé :3 389 / 645

Auteur : ranngalon

Ecrire un message privé
Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note

 Description

Un ptit UserControl qui permet de faire de jolies courbes en couleur et tout et tout.

On commence par créer une série ( TGraphSerie ), on y ajoute ensuite des points ( TGraphDonnee ), et on insère la série dans le graphique ( ColSeries.add ).

Ensuite, tout se fait à la souris:
- Déplacements du graphique;
- Options d'affichage;
- Ajout de courbes de tendances;
- ...

Dites moi si c'est bien ou tout pourri, ce qui est inutile ou manquant, enfin lachez-vous quoi...

Source

  • Un bout de code exemple, à mettre dans une form avec le control:
  • Private Sub Form_Activate()
  • Dim s As TGraphSerie
  • Dim i As Double
  • Dim d As TGraphDonnee
  • Dim j As Integer
  • For j = 1 To 5
  • Set s = New TGraphSerie
  • s.Nom = "Test " + CStr(j)
  • For i = 0 To 2 Step 0.1
  • Set d = New TGraphDonnee
  • d.x = i
  • d.y = 1 + i + i ^ (j + 1)
  • s.AddPoint d
  • Next
  • KGraphControl1.AddSerie s
  • Next
  • KGraphControl1.AxeX.Max = 2
  • KGraphControl1.AxeX.Min = 0
  • KGraphControl1.AxeX.Pas = 0.5
  • KGraphControl1.AxeY.Max = 30
  • KGraphControl1.AxeY.Min = 0
  • KGraphControl1.MajGlobale
  • End Sub
Un bout de code exemple, à mettre dans une form avec le control:

Private Sub Form_Activate()
    Dim s As TGraphSerie
    Dim i As Double
    Dim d As TGraphDonnee
    Dim j As Integer
    For j = 1 To 5
        Set s = New TGraphSerie
        s.Nom = "Test " + CStr(j)
        For i = 0 To 2 Step 0.1
            Set d = New TGraphDonnee
            d.x = i
            d.y = 1 + i + i ^ (j + 1)
            s.AddPoint d
        Next
        KGraphControl1.AddSerie s
    Next
    KGraphControl1.AxeX.Max = 2
    KGraphControl1.AxeX.Min = 0
    KGraphControl1.AxeX.Pas = 0.5
    KGraphControl1.AxeY.Max = 30
    KGraphControl1.AxeY.Min = 0
    KGraphControl1.MajGlobale
End Sub



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 décembre 2008 22:22:23 :
Ajout d'une capture d'écran un d'un ptit bout d'exemple...
14 décembre 2008 23:09:03 :
- Correction de plusieurs petits bugs pour durcissement; - Ajout du mode "Camembert" - Ajout du mode "Séparé" pour avoir un ptit graphe par courbe - Ajout d'un projet "Test" qui permet de tester rapidement le fonctionnement de l'OCX. To be continued...
15 décembre 2008 10:31:59 :
- Correction de quelques bugs d'affichage - Ajout de commentaires ( suis pas très doué dans cet art )
15 décembre 2008 11:09:57 :
- Nouveau ScreeShot
15 décembre 2008 11:10:36 :
Nouveau ScreenShot
15 décembre 2008 11:11:23 :
- Nouveau ScreenShot
15 décembre 2008 11:14:13 :
Nouveau ScreenShot
15 décembre 2008 14:20:48 :
- Ajout d'explication sur les icones du menu; - Ajout du RemovePoint sur les séries.
15 décembre 2008 14:21:36 :
- Manquait le screenshot
15 décembre 2008 15:41:11 :
- Passage en mode public des Axes du graphique principal ( Dédicace à ACE5F ) - Oubli: import/export de données ( CSV et autres ) précedemment ajouté
15 décembre 2008 15:53:35 :
- Correction du code en exemple suite à évolution du control

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) VB10 - CRÉER VOS PROPRES CALQUES SUR UNE IMAGE par Duke49
Source avec Zip Source avec une capture Source .NET (Dotnet) CREER UN GIF ANIMÉ par Le Pivert
Source avec une capture GRAPH PHP COURBE DE CHARGE par s.defaye
Source avec Zip Source avec une capture BOULE DE CRISTAL par BLUEBIBUBBLE
VB6 - DÉPLACEMENT D'UN CONTRÔLE SUR UN SEGMENT DE DROITE DÉL... par ucfoutu

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) APPLICATION DE DESSIN par fsafsafsaf
Source avec une capture Source .NET (Dotnet) USER CONTROL POUR UN HISTOGRAMME À BARRES VERTICALES par tchconst
Source avec Zip Source avec une capture USERCONTROL IMAGE À PARTIR DE GDI+ par Flocreate
Source avec Zip Source avec une capture Source .NET (Dotnet) USER CONTROL GRAPHIQUE VB 2005 par lapix
Source avec Zip Source avec une capture Source .NET (Dotnet) COURBE 2D SANS MSCHART par nicolas99

Commentaires et avis

Commentaire de PCPT le 11/12/2008 21:48:58 administrateur CS

salut,

un petit projet exemple pourrait nous aider à voir le fonctionnement de l'ocx...

pis une capture pour avoir une idée du résultat?

Commentaire de mimiZanzan le 14/12/2008 17:00:22

Est-ce que tu pourrais expliquer comment on se sert de ton code?
Je l'ai ouvert, et je n'y comprends rien, il n'y a même pas une form...
Et puis en effet, un exemple serait bienvenu.

Commentaire de PCPT le 14/12/2008 18:40:57 administrateur CS

mimiZanzan -> ajouter un projet, pose une instance du ctl, le code est fourni ci-dessus

Commentaire de mimiZanzan le 14/12/2008 18:58:35

PCPT, merci pour ton aide, mais je n'y arrive tj pas...
Je procède ainsi:
*je lance le projet VB GraphControlOCX
*j'ajoute une form dans ce projet
*j'ajoute le contrôle KGraphControl sur la form (il est présent dans la boite à outils)
*je copie le code ci-dessus dans la sub Form_Load
Et puis, qd je fais F5, rien ne se passe...si ce n'est l'ouverture d'une page style HTML!
Merci d'avance pour tes éclaircissements.

Commentaire de PCPT le 14/12/2008 20:27:12 administrateur CS

mimiZanzan -> c'est une OCX donc un projet OCX, pas standard

comme indiqué :
*ajoute un projet (fichier > ajouter un projet), lui évidemment standard.
*pose ensuite l'uc (que tu nommes 'KGraphControl1') sur ta form1
*copie le code présenté par ranngalon (rapidement d'ailleurs, merci pour ta réactivité)
*plus qu'à sélectionner ton projet ajouté (explorateur de projets, F4 si pas présent), click droit sur TON projet > projet de démarrage
*puis enfin F5

je n'ai néanmoins pas testé, juste survolé le code avant mon premier commentaire. la manip reste classique donc pas de souci ;)

Commentaire de mimiZanzan le 15/12/2008 00:05:02

Merci beaucoup à PCPT pour ces infos.
J'arrive en effet à utiliser le projet OCX comme tu me l'as indiqué, à condition de rendre public les modules de classe (ou bien d'ajouter simplement la form1 dans le sein du projet OCX, et de démarrer le projet avec une procédure publique Main).
Cependant, j'arrive tj à une feuille type HTML, avec une toute petite zone graphique que je ne sais pas utiliser. Comment par ex tracer une courbe avec ce code?
Je pense qd même que ranngalon devrait faire un fichier d'aide pour utiliser son code. Il y a un tout petit menu incompréhensible pour moi...
C'est dommage, car le code semble très intéressant, mais qq commentaires y seraient les bienvenus, (il y en a malheureusement aucuns), et tout le monde (dont moi) n'est pas "expert".
Merci d'avance

Commentaire de mcd2 le 15/12/2008 09:47:48

Bonjour ,
ce code est tres intéressent et tres utile.
A t'on la possibilite de faire évoluer les courbes en temps reel ? pour faire un genre d'oscilloscope.
Merci

Commentaire de ranngalon le 15/12/2008 09:56:20

Bonjour,

Pour MimiZanzan:
Il faut que tu poses l'ocx quelque part ( genre dans c:\temp ).
Ensuite tu crées un nouveau projet, avec juste une forme.
Tans la toolbox, tu fais click-droit => Components. Tu cliques sur "Parcourir", et tu vas chercher l'ocx que tu viens de coller dans c:\temp
=> Le control est maintenant dispo pour ta form.
Tu instancies le control dans ta forme, sans modifier son nom. Plus qu'à coller le code fourni plus haut, et ça doit fonctionner.

Pour MCD2:
Pour l'instant, pas vraiment. Mais il suffit de pas grand chose: juste un ptit timer à activer/désactiver, qui met à jour les graphiques. Pas bien sorcier...

Merci pour les commentaires...

Commentaire de mcd2 le 15/12/2008 10:48:11

pour l'activation et desactivation de la maj du graphique, cela peut aussi effacé les premiers point senregistrés dans le graph.

Merci

Commentaire de ranngalon le 15/12/2008 11:09:11

Après réflexion, je pense qu'il faudrait créer un control à part pour un oscillo, car le comportement est trop éloigné de l'aspect courbe de stats...
Pour ce qui est de supprimer les premiers points, je le mettrai dans la prochaine version...

Commentaire de mcd2 le 15/12/2008 11:17:41

merci beaucoup

Commentaire de aceF5 le 15/12/2008 12:48:38

Je recherche ce genre de fonctionnalité depuis longtemps.  

Malheureusement, je ne suis pas un expert en VB, je développe plutôt en VBA (Access).  

Croyez-vous que cet OCX pourrait être utilisé «comme tel» dans une application VBA?  Je sais comment ajouter une référence (comme un OCX) à un projet VBA, mais habituellement, ces références sont constituées d'un fichier unique. Dans cet exemple-ci, existe-t-il un fichier unique (.ocx) que je peux sauvegarder quelque part puis sutiliser directement dans mon application ?

J'aimerais beaucoup pouvoir intégrer cette fonctionnalité à une application de comptabilité de transactions boursières et à cette fin, j'apprécierais grandement si quelqu'un pouvait m'aider.

Bonne journée.

Commentaire de ranngalon le 15/12/2008 12:54:43

Il y a un OCX dans le lot (GraphControl.OCX).

Tous les OCX que je sors sont inutilisables en VBA, et je suis bien incapable de dire pourquoi. Si quelqu'un sait...

Commentaire de aceF5 le 15/12/2008 13:10:39

RANNGALON
Merci pour l'info.  J'en comprends que l'ocx est complet et serait utilisable «tel quel» en VB.  Quant à son utilisation en VBA,`žca semble problématique.  Je vais quand même essayer...

Autre question: je présume qu'il serait possible de passer, par programmation, différentes valeurs au graphique, permettant ainsi à l'utilisateur de générer des courbes différentes selon son choix (Ex: le prix de l'action d'un titre); la même zone graphique pourrait afficher la courbe du prix de l'action X ou de l'action Y sans autre intervention de la part de l'utilisateur que le choix du titre (X ou Y), étant entendu que les valeurs à insérer au graphique sont disponibles.

Aussi, je présume qu'il est possible de varier, par programmation, les valeurs des échelles (Ex: la valeur de l'action X peut varier de 10$ à 30$ alors que la valeur de l'action Y peut varier de `35$ à 70$.  De même, l'utilisateur pourrait vouloir le graphique de la valeur de l'action pour A) 1 mois, B) 1 an, C) 3 ans auquel cas, l'axe des x doit être ajustée)

Commentaire de PCPT le 15/12/2008 13:13:25 administrateur CS

ranngalon -> ton control ne fait pas référence à des spécificités qui pourraient ne pas exeister...
les collections existent en vba et vb6, tu dessines directement dans l'UC donc c'est compatible.

si tu voulais juste mettre en titre de ton graphique "usercontrol.parent.hwnd", çà devrait suffir à ce que VBA le refuse...
encore que

ou si par exemple tu mettais une variable "withevents x as form", que tu instanciais en référence au parent. ce genre de différences....

Commentaire de ranngalon le 15/12/2008 14:27:28

Pour ACEF5:
Tout l'affichage d'un graphique est modifiable. Tu peux faire un peu ce que tu veux avec les axes par exemple, modifier le Max et le Min, les graduations... Il suffit de double-cliquer dessus.

Pour PCPT:
Donc en gros, dès que je mets un timer, un hwnd, un event et autres subtilités de ce genre, j'interdis mon control au VBA. C'est bien ça?

Commentaire de PCPT le 15/12/2008 15:02:13 administrateur CS

non pas exactement...

un timer sera accepté parce que lui n'utilise que les API et n'est pas lié au container (invisible at runtime).
donc si ton usercontrol contient un timer, le timer va aussi fonctionner sous VBA.

par contre si tu poses une picturebox (qui n'existe pas en VBA, c'est IMAGE uniquement, et qui contient hDC et hWnd, pas non plus dispo en VBA), ton ocx risque de ne plus être compatible

de même si tu fais référence à des objets comme la form (form en VB6 uniquement, userform en vba uniquement), tu brides aussi ton contrôle

ton usercontrol peut faire référence à son propre handle, mais tu ne peux pas "travailler" avec celui de son parent, qui n'existera pas en vba.
ou alors en trichant, c'est à dire pour cet exemple, en récupérant le handle par API (getfocus, getforegroudwindow, etc...) et non sur .parent

il y a donc des cas de figure où il est tout bonnement impossible de faire un ocx compatible vba

Commentaire de aceF5 le 15/12/2008 15:08:30

Pour RANNGALON:
Merci de me répondre assidument.

Je n'ai pas été suffisamment clair.  

Concernant les paramètres à passer au graphique, je souhaite procéder via ma programmation afin de présenter à l'utilisateur un graphique bien configuré.  Ainsi, je ne souhaite pas laisser à l'utilisateur le soin d'organiser le graphique en modifiant les axes, mais plutôt régler ces paramètres en fonctions des données à afficher, ajuster les paramètres du graphique puis finalement l'afficher.  Selon le titre sélectionné par l'utilisateur, le programme recherche les données et à ce moment configure le graphique et l'affiche correctement, en fonction de la plage de données, sans intervention de l'utilisateur.  Cette opération doit être possible à chaque appel du graphique avec des jeux de données différents.

Commentaire de mimiZanzan le 15/12/2008 15:49:00

RANNGALON,
Merci pour ta réponse.
J'ai opéré comme tu le décris, mais il faut aussi enregistrer le contrôle dans le registre pour qu'il soit dispo pour une form dans un projet VB6.
D'autre part, il y a 2 bugs quand on utilise le code que tu donnes pour la sub Form_Load. Après mon analyse de ton code complet, il faut faire ceci:
* "KGraphControl1.ColSeries.Add s" doit être remplacé par "KGraphControl1.AddSerie s"
* "KGraphControl1.TypeGraphique = Barre" doit être remplacé par:
   "KGraphControl1.GraphActif.TypeGraphique = Barre"
Toutefois, même après tout ceci, je n'arrive qu'à une form contenant un minuscule graphique inutilisable...
Peux-tu encore m'aider?
Merci d'avance

Commentaire de ranngalon le 15/12/2008 15:52:15

MimiZanzan:
Pour les registres, c'est surprenant. Sur mes deux postes ( XP et W2K ), pas besoin d'aller dans les registres...
Pour les deux bugs, le code a évolué, je corrige...
Pour tester, je te conseille de prendre le "TestGraphControl.vbp" que j'ai mis dans le zip...

Commentaire de PCPT le 15/12/2008 16:02:31 administrateur CS

enregistrement obligatoire puisque le CLSID n'a pas été généré sur nos postes.
normal que tu n'aies pas cette erreur ranngalon.

bien (aussi) pour çà que la démarche que j'avais indiqué concerne la version non compilée, un groupe de projets...
(datait d'avant ta MAJ avec ton ocx compilé)

Commentaire de mimiZanzan le 15/12/2008 16:19:58

Ouawh, quelle réactivité!
En effet, avec ton projet TestGraphControl.vbp, j'arrive à avoir un graphique correct.
Deux remarques cependant:
* çà manque d'aide pour utiliser ton programme selon les besoins (je me répète...)
* si on applique ton nouveau code  sub Form_Load, on retombe sur des bugs avec KGraphControl1.AxeX.Max = 2
et la suite (les propriétés n'existent pas pour le contrôle, il n'y a de dispo dans le genre que "AxeActif" et "Maj")

Commentaire de mcd2 le 23/12/2008 00:05:54

Comment puisse utiliser votre ocx pour qu'il agisse de telle maniere qu'il soit rafraichi en temps reel.
Par exemple tracer une courbe à partir d'une mesure analogique qui changerer tout les secondes ( forme de graph défilent)

Merci

Commentaire de ranngalon le 29/12/2008 13:10:00

Pour MCD2:
A chaque fois que tu as une nouvelle mesure, il faut qut tu l'ajoutes à la série correspondante.

Si tu as une fréquence de mesure faible, tu as la fonction MajGlobale qui permet de forcer le rafraichissement.
Si tu as une fréquence de mesure importante ( plus de 20 par secondes ), il faudrait plutôt réflaîchir à ajouter un timer forçant la mise à jour des graphs.
J'vais voir pour ajouter le timer pour le temps réel...

Commentaire de Adn56 le 07/08/2009 15:32:56 10/10

Salut, tout d'abord BRAVO ! 10/10. (surtout le petit menu du haut et l'export en CSV est une pur merveille !
Pour ce CSV, je le trouve un peu étrange, une colonne 5X, à coté une 5Y plein de valeur, puis un copié/collé sur toute les autres colonne ! peu tu expliquer le format que tu utilises dans l'export CSV ?
Pour info :
Voici l'adaptation de ton code en .Net pour que cela marche, commente le si j'ai écris des bétises :p
------------------------------

    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        Dim s As GraphControl.TGraphSerie 'TGraphAxe
        s = New GraphControl.TGraphSerie

        Dim d As GraphControl.TGraphDonnee
        s = New GraphControl.TGraphSerie
        Dim i As Double
        Dim j As Integer
        For j = 1 To 5

            s.nom = "Test " + CStr(j)
            For i = 0 To 2 Step 0.1
                d = New GraphControl.TGraphDonnee
                d.x = i
                d.y = 1 + i + i ^ (j + 1)
                s.AddPoint(d)  'AddPoint(d)
            Next
            AxKGraphControl1.AddSerie(s)
        Next
        AxKGraphControl1.GraphActif.TypeGraphique = GraphControl.EGraphTypeGraphique.Courbe
        AxKGraphControl1.AxeX.Max = 2
        AxKGraphControl1.AxeX.Min = 0
        AxKGraphControl1.AxeX.Pas = 0.5
        AxKGraphControl1.AxeY.Max = 30
        AxKGraphControl1.AxeY.Min = 0
        AxKGraphControl1.MajGlobale()

        AxKGraphControl1.Titre = "test"
    End Sub

------------------------------
Sinon voila ce que j'ai à la fermeture ou parfois de façon intempestive, si un pro à une idée... Je prends, cela placerai ton OCX parmis mes favoris pour faire des graphs !
------------------------------
Tentative d'exécution managée dans le verrou du chargeur du système d'exploitation (OS). N'essayez pas d'exécuter du code managé dans une fonction d'initialisation d'image ou DllMain, car cela risque d'entraîner un blocage de l'application.
------------------------------
Merci encore pour cette source :!:

Commentaire de Adn56 le 07/08/2009 15:42:43

oups correction (c'est vraiment ennuyeux de ne pas pouvoir éditer ses messages -_-')

    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        Dim s As GraphControl.TGraphSerie 'TGraphAxe
        Dim d As GraphControl.TGraphDonnee

        Dim i As Double
        Dim j As Integer
        For j = 1 To 5
            s = New GraphControl.TGraphSerie
            s.nom = "Test " + CStr(j)
            For i = 0 To 2 Step 0.1
                d = New GraphControl.TGraphDonnee
                d.x = i
                d.y = 1 + i + i ^ (j + 1)
                s.AddPoint(d)  'AddPoint(d)
            Next
            AxKGraphControl1.AddSerie(s)
        Next
        AxKGraphControl1.GraphActif.TypeGraphique = GraphControl.EGraphTypeGraphique.Courbe
        AxKGraphControl1.AxeX.Max = 2
        AxKGraphControl1.AxeX.Min = 0
        AxKGraphControl1.AxeX.Pas = 0.5
        AxKGraphControl1.AxeY.Max = 30
        AxKGraphControl1.AxeY.Min = 0
        AxKGraphControl1.MajGlobale()

        AxKGraphControl1.Titre = "test"
    End Sub

Voila ça marche bien mieux comme ça :p

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

graphique [ par bruno ] super ton sitepeux tu me dire comment on récupère la taille en pixels des fichiers graphiquesmerci A+bruno Graphique de stats [ par seb ] Bonjour, je voudrai savoir comment faire des graphique (histogramme, camembert, courbes) sous VB6, à partir de données contenues dans une BDD.Merci. comment creer un graphique dans excel depuis VB [ par laurent3d ] Bonjour,Comment creer un graphique dans une feuille excel depuis mon appli VBJ'arrive à remplir des cellules grace à une source de ce site, mais j'aur graphique dynamique [ par tery ] salut a tous.j essaie de faire un genre de graphique dynamique mais je ne sais pas comment m y prendre.En gros, je pioche des valeurs contenu dans un Graphique pour excel.URGENT!!! [ par ben ] Mon programme cree une feuille graphique.J'arrive a nommer mon graphique mais mon probleme est que je n'arrive pas a nommer ma nouvelle feuille graphi graphique [ par TOUT ] Salut c'est yael et j'écri ce message parce que je n'ai pas beaucoup de message.salutyael Filtre graphique [ par Lucke ] Je recherche un source de filtre graphique par noyau de convolution pour des images au format BMP.Egalement un source de décompression video MPEG. Imprimer un graphique [ par NourEddine ] Salut,j'ai un graphique MSchart et je voudrais pouvoir mettre le code pour imprimer sur mon bouton Mais je ne veux que le graphique et rien d'autreMer API graphiques [ par Birdie ] Je dessine un graphique à l'aide des API de windows. Tout est ok...sauf que mon graphique s'efface en partie si je superpose une autre fenetre dessus


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales