UN USERCONTROL POUR LES DIAGRAMMES, COURBES ET AUTRES, AVEC POSSIBILITÉ DE FAIRE
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
11 déc. 2008 à 21:48
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 2013
-
7 août 2009 à 15:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 7 août 2009 à 15:42
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
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 7 août 2009 à 15:32
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 :!:
ranngalon
Messages postés13Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention13 octobre 2009 29 déc. 2008 à 13:10
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...
mcd2
Messages postés4Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention23 décembre 2008 23 déc. 2008 à 00:05
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
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017 15 déc. 2008 à 16:19
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")
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 15 déc. 2008 à 16:02
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é)
ranngalon
Messages postés13Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention13 octobre 2009 15 déc. 2008 à 15:52
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...
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017 15 déc. 2008 à 15:49
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
aceF5
Messages postés5Date d'inscriptionvendredi 7 septembre 2007StatutMembreDernière intervention15 décembre 2008 15 déc. 2008 à 15:08
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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 15 déc. 2008 à 15:02
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
ranngalon
Messages postés13Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention13 octobre 2009 15 déc. 2008 à 14:27
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?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 15 déc. 2008 à 13:13
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....
aceF5
Messages postés5Date d'inscriptionvendredi 7 septembre 2007StatutMembreDernière intervention15 décembre 2008 15 déc. 2008 à 13:10
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)
ranngalon
Messages postés13Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention13 octobre 2009 15 déc. 2008 à 12:54
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...
aceF5
Messages postés5Date d'inscriptionvendredi 7 septembre 2007StatutMembreDernière intervention15 décembre 2008 15 déc. 2008 à 12:48
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.
mcd2
Messages postés4Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention23 décembre 2008 15 déc. 2008 à 11:17
merci beaucoup
ranngalon
Messages postés13Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention13 octobre 2009 15 déc. 2008 à 11:09
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...
mcd2
Messages postés4Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention23 décembre 2008 15 déc. 2008 à 10:48
pour l'activation et desactivation de la maj du graphique, cela peut aussi effacé les premiers point senregistrés dans le graph.
Merci
ranngalon
Messages postés13Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention13 octobre 2009 15 déc. 2008 à 09:56
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...
mcd2
Messages postés4Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention23 décembre 2008 15 déc. 2008 à 09:47
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
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017 15 déc. 2008 à 00:05
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
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 14 déc. 2008 à 20:27
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 ;)
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017 14 déc. 2008 à 18:58
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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 14 déc. 2008 à 18:40
mimiZanzan -> ajouter un projet, pose une instance du ctl, le code est fourni ci-dessus
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017 14 déc. 2008 à 17:00
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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 11 déc. 2008 à 21:48
salut,
un petit projet exemple pourrait nous aider à voir le fonctionnement de l'ocx...
7 août 2009 à 15:42
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
7 août 2009 à 15:32
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 :!:
29 déc. 2008 à 13:10
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...
23 déc. 2008 à 00:05
Par exemple tracer une courbe à partir d'une mesure analogique qui changerer tout les secondes ( forme de graph défilent)
Merci
15 déc. 2008 à 16:19
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")
15 déc. 2008 à 16:02
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é)
15 déc. 2008 à 15:52
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...
15 déc. 2008 à 15:49
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
15 déc. 2008 à 15:08
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.
15 déc. 2008 à 15:02
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
15 déc. 2008 à 14:27
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?
15 déc. 2008 à 13:13
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....
15 déc. 2008 à 13:10
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)
15 déc. 2008 à 12:54
Tous les OCX que je sors sont inutilisables en VBA, et je suis bien incapable de dire pourquoi. Si quelqu'un sait...
15 déc. 2008 à 12:48
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.
15 déc. 2008 à 11:17
15 déc. 2008 à 11:09
Pour ce qui est de supprimer les premiers points, je le mettrai dans la prochaine version...
15 déc. 2008 à 10:48
Merci
15 déc. 2008 à 09:56
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...
15 déc. 2008 à 09:47
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
15 déc. 2008 à 00:05
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
14 déc. 2008 à 20:27
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 ;)
14 déc. 2008 à 18:58
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.
14 déc. 2008 à 18:40
14 déc. 2008 à 17:00
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.
11 déc. 2008 à 21:48
un petit projet exemple pourrait nous aider à voir le fonctionnement de l'ocx...
pis une capture pour avoir une idée du résultat?