cs_Den
Messages postés18Date d'inscriptionmardi 23 janvier 2001StatutMembreDernière intervention20 août 2007
-
5 juin 2004 à 09:31
matlacarcasse
Messages postés1Date d'inscriptionjeudi 9 mars 2006StatutMembreDernière intervention29 décembre 2008
-
29 déc. 2008 à 11:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
matlacarcasse
Messages postés1Date d'inscriptionjeudi 9 mars 2006StatutMembreDernière intervention29 décembre 2008 29 déc. 2008 à 11:12
Salut Kenavo,
Tout d'abord, merci pour la mise en ligne de ce composant !
Je débute un peu dans la programmation sur PC et je suis sous delphi 2005 (télécharger gratos sur le net). Ma question est assez simple et peut être un peut bateau mais... j'ai lu pas mal de truc et je n arrive toujours pas a creer mon composant graphXY.
Par rapport a tout ce que j ai pu lire, je doit creer un "package" en .dpk avant toute chose et moi, je n'arrive a creer un package que en .dll ...
Du coup j'ai tenter de créer une dll mais au moment de la compilation il me dit : Fichier introuvable :'Systeme.drawing.dcuil'
Merci d'avance si tu trouve un petit moment pour me répondre !
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 mars 2006 à 07:22
Hello ami Kenavo!
big big big modification de GraphXY que je te propose ici.
tellement long que pour te faciliter la tache je t'envois le liens en MP.
les modifs ne s'arreteront pas la, car je commence a reflechir sur la transformation des Traces en collections pour pouvoir non seulement acceder proprement a leur propriétés mais aussi pour pouvoir en ajouter autant que l'on veut.
je reflechis egalement pour un passage en openGL pour obtenir d'un coté de meilleures performances mais egalement des possibilitées graphique plus entendue sans parler du zoom, du deplacement dans le graph ect.. ect..
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 18 janv. 2006 à 14:51
Salut FOXI,
J'y ai mis le temps, mais ça y est j'ai intégré tes fonctions. Je les ai nommées GetValueFromPosX et GetValueFromPosY. Et j'ai rendu "Published" la propriété DoubleBuffered
Merci à toi
Kenavo
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 oct. 2005 à 14:18
encore moi ... lol
petite modif, j'ai renomer les fonction GetGraphMouseX,Y en GridMouseX,Y (plus court et plus parlant)
au cas ou tu les integres ...
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 oct. 2005 à 11:47
Procedure SetDblBuffer (Value : Boolean);
Function GetDblBuffer : boolean;
Implementation :
procedure TGraphXY.SetDblBuffer(Value : Boolean);
begin
DoubleBuffered := Value;
end;
function TGraphXY.GetDblBuffer : boolean;
begin
result := DoubleBuffered;
end;
voila ça eviteras le scintillement de graphxy au redimensionnement et ça renderas plus rapide la mise a true ou false du double buffer (par defaut a false au cas ou).
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 oct. 2005 à 10:54
salut Kenavo!
bravo pour ce composant ma fois bien pratique et bien realiser.
cependant j'ai eu du fil a retordre pour une application precise de ton composant.
Transformer la position de la souris X,Y (en pixel) a l'echelle de notre graphique
et en decalant l'origine X,Y de la souris pour qu'elle cole parfaitement a l'origine 0,0 du graph.
Cela permettant de créer de nouveaux points en clickant directement sur le graphique.
Aprés quelques heures de recherches mathematique a deux cerveaux (moi et un pote) nous avons reussi a pondre les deux formules mathematique pour effectuer cela.
(position de la souris relative a TGraphXY et a l'echelle du graphique)
Formule pour X (on utilise le X recuperé via OnMouseMove du TGraphXY)
mrX = ((X - MargeGauche) / ((Widht - (MargeGauche+MargeDroite)) / (NbXDiv*EchX))) + XMin
A) X - MargeHaute : decale l'origine X de la souris au premier point de la grille
B) Widht - (MargeGauche+MargeDroite) : renvois la taille en pixel de la grille
C) NbXDiv*EchX : renvois la valeur d'une division de la grille
D) +XMin : nous donne ce que vaux le premier point de la grille
E) B / C : renvois le rapport Pixel/Echelle de la grille
F) A / E : convertis la position de la souris en pixel a l'echelle de la grille
G) F + D : decale l'origine 0,0 de la souris sur l'origine 0,0 de la grille
Formule pour Y (idem que pour X, on recupere via OnMouseMove de TGraphXY)
mrY = (((Y - MargeHaute)*-1) / ((Height - (MargeHaute+MargeBasse)) / (NbYDiv*EchY))) + (YMin + (NbYDiv*EchY))
A) (Y-MargeHaute)*-1 : decale l'origine Y de la souris au premier point de la grille et inverse l'axe de la souris (positif en haut, negatif en bas).
B,C) identique a X mais pour Y
D) +(Ymin + (NbYDiv*EchY)) : a cause de l'inversement d'axe on doit lui ajouter la valeur d'une division
E,F,G) identique a X mais pour Y
Problemes rencontrés a l'etablissement de la formule pour rY :
- l'axe Y de la souris doit etre inversé donc dans A grace a *-1
- le decalage final de l'origine necessite une correction grace a l'ajout de la valeur d'une division donc dans D grace a +(NbYDiv*EchY).
- pas de sucre dans le café donc dans Tasse grace a Sucre := 1 + (1/2) ^.^
voila aprés plusieurs test avec des valeurs aleatoire sur echelle, division et min la convertion marche correctement sur X et Y.
reste a l'integré en fonction dans le composant TGraphXY :
function TGraphXY.GetGraphMouseX(absX : integer) : real;
begin
result := ( (absX-MargeGauche) / ((Width-(MargeGauche+MargeDroite))/(NbXDiv*EchX)) ) + XMin;
end;
function TGraphXY.GetGraphMouseY(absY : integer) : real;
begin
result := ( ((absY-MargeHaute)*-1) / ((Height-(MargeHaute+MargeBasse))/(NbYDiv*EchY)) ) + (Ymin+(NbYDiv*EchY));
end;
voila!
au cas ou, contact moi par mp ...
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 14 juil. 2005 à 06:20
ok merci kenova oui c t'un activex .
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 13 juil. 2005 à 14:02
Je ne connais pas TImgEdit (un ActiveX, je crois), essaie de poser la question sur le forum
Ken@vo
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 12 juil. 2005 à 08:18
kenova pourrai tu m'aide car qd j'installe le timgedit aors ton compo se desinstalle et vice versa or j'ai besoin des deux composant Merci
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 4 juil. 2005 à 11:46
SAlut kenova
Merci et pour bloque l'animation de l'image est ce possible ?
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 30 juin 2005 à 09:56
Salut,
- Initialisation des couleurs : Il y a la propriété TraceColor : array[0..7] of TColor (l'inspecteur d'objet ne permet de modifier qu'une couleur)
- La Méthode Reset(n) sert à effacer les points de la trace n (liste de points).
- La méthode Repaint met à jour les courbes. Si elle n'est pas appelée, pas de modification du graphe
Merci pour la note
Ken@vo
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 30 juin 2005 à 07:29
je crois que 10/10 ira bien ton compos kenova bon boulot
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 30 juin 2005 à 07:26
ok kenova la ca marche merci . Maitenant j'ai de tas d question a te poser j'espere que cele ne te pose pas de probleme .
Alors voila :
- est ce qu'il y a une propriete qui force l'image a ne pas bouger ;
- J'ai essayer de modifier ton graphe 1 pour initialiser des couleurs par la propriete clor mais cela ne marche pas alors tu peux me dire comment faire ?
- enfin le propriete reset sert à effacer l'ecran je crois car si je la desactive alors la graphe reste sur place et une autre se met redessine et si j'enleve de meme
repaint alors aucune graphe n'est dessiner c'est sa ?
Merci kenova et bon prog
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 29 juin 2005 à 18:39
Oups ! Désolé Josswel
Il fallait lire {$J+} dans l'unité U_DemoGraph
Pas de date possible (pas prévu). Il fauda modifier la procédure TGraphXY.Paint (Mette des DateToStr ou FormatDateTime)
A+
Ken@vo
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 29 juin 2005 à 12:53
euh je crois c'est autre chose le bleme kenova
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 29 juin 2005 à 08:50
merci kenavo je vais aller voir . Dit est il possible de change les coordonnees x en date de la forme jjmmaaaa sans change ta source de code ? Merci
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 28 juin 2005 à 19:54
Salut Josswel,
Maintenant que je connais mieux Delphi 7, il est plus que probable que l'erreur provienne de l'affectation de constante typée; Donc soit :
1 - tu coches la case Constante typée affectable dans les options de compilateur (Projet > Options > compilateur)
2 - tu ajoutes la directive {$J-} au début de l'unité
A+
ken@vo
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 28 juin 2005 à 14:57
oups kenavo j'ai un erreur lors de la compilation de ton demo
:"[Error] U_DemoGraph.pas(94): Left side cannot be assigned to" et ceci sur :
procedure TGraphForm.DessineGraph3;
const
efface : boolean = false;
Rayon : Integer = 0;
var
x, y : real;
begin
x := rayon * cos (Compteur / 5 ); // Spirale
y := rayon * sin (Compteur / 5 );
inc(rayon);// l'erreur est ici
Mais bon je vais voir ce qui cloche ;
josswel
Messages postés67Date d'inscriptionlundi 23 mai 2005StatutMembreDernière intervention 3 juin 2009 28 juin 2005 à 14:23
MErci kenavo je crois qyue je vais me base sur ton compo pour mon blem avec tchart et teechart.
Bon boulot
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 26 sept. 2004 à 12:38
10/10 obligé !
bravo
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 5 juin 2004 à 10:20
Ben, Den, dans le zip ! (GraphXY.pas et GraphXY.dcr)
Ken@vo
cs_Den
Messages postés18Date d'inscriptionmardi 23 janvier 2001StatutMembreDernière intervention20 août 2007 5 juin 2004 à 09:31
29 déc. 2008 à 11:12
Tout d'abord, merci pour la mise en ligne de ce composant !
Je débute un peu dans la programmation sur PC et je suis sous delphi 2005 (télécharger gratos sur le net). Ma question est assez simple et peut être un peut bateau mais... j'ai lu pas mal de truc et je n arrive toujours pas a creer mon composant graphXY.
Par rapport a tout ce que j ai pu lire, je doit creer un "package" en .dpk avant toute chose et moi, je n'arrive a creer un package que en .dll ...
Du coup j'ai tenter de créer une dll mais au moment de la compilation il me dit : Fichier introuvable :'Systeme.drawing.dcuil'
Merci d'avance si tu trouve un petit moment pour me répondre !
30 mars 2006 à 07:22
big big big modification de GraphXY que je te propose ici.
tellement long que pour te faciliter la tache je t'envois le liens en MP.
les modifs ne s'arreteront pas la, car je commence a reflechir sur la transformation des Traces en collections pour pouvoir non seulement acceder proprement a leur propriétés mais aussi pour pouvoir en ajouter autant que l'on veut.
je reflechis egalement pour un passage en openGL pour obtenir d'un coté de meilleures performances mais egalement des possibilitées graphique plus entendue sans parler du zoom, du deplacement dans le graph ect.. ect..
18 janv. 2006 à 14:51
J'y ai mis le temps, mais ça y est j'ai intégré tes fonctions. Je les ai nommées GetValueFromPosX et GetValueFromPosY. Et j'ai rendu "Published" la propriété DoubleBuffered
Merci à toi
Kenavo
30 oct. 2005 à 14:18
petite modif, j'ai renomer les fonction GetGraphMouseX,Y en GridMouseX,Y (plus court et plus parlant)
au cas ou tu les integres ...
30 oct. 2005 à 11:47
une propriétée pour changer le DoubleBuffered.
champ published :
property BufferDouble : boolean read GetDblBuffer write SetDblBuffer default false;
champ private :
Procedure SetDblBuffer (Value : Boolean);
Function GetDblBuffer : boolean;
Implementation :
procedure TGraphXY.SetDblBuffer(Value : Boolean);
begin
DoubleBuffered := Value;
end;
function TGraphXY.GetDblBuffer : boolean;
begin
result := DoubleBuffered;
end;
voila ça eviteras le scintillement de graphxy au redimensionnement et ça renderas plus rapide la mise a true ou false du double buffer (par defaut a false au cas ou).
30 oct. 2005 à 10:54
bravo pour ce composant ma fois bien pratique et bien realiser.
cependant j'ai eu du fil a retordre pour une application precise de ton composant.
Transformer la position de la souris X,Y (en pixel) a l'echelle de notre graphique
et en decalant l'origine X,Y de la souris pour qu'elle cole parfaitement a l'origine 0,0 du graph.
Cela permettant de créer de nouveaux points en clickant directement sur le graphique.
Aprés quelques heures de recherches mathematique a deux cerveaux (moi et un pote) nous avons reussi a pondre les deux formules mathematique pour effectuer cela.
(position de la souris relative a TGraphXY et a l'echelle du graphique)
Formule pour X (on utilise le X recuperé via OnMouseMove du TGraphXY)
mrX = ((X - MargeGauche) / ((Widht - (MargeGauche+MargeDroite)) / (NbXDiv*EchX))) + XMin
A) X - MargeHaute : decale l'origine X de la souris au premier point de la grille
B) Widht - (MargeGauche+MargeDroite) : renvois la taille en pixel de la grille
C) NbXDiv*EchX : renvois la valeur d'une division de la grille
D) +XMin : nous donne ce que vaux le premier point de la grille
E) B / C : renvois le rapport Pixel/Echelle de la grille
F) A / E : convertis la position de la souris en pixel a l'echelle de la grille
G) F + D : decale l'origine 0,0 de la souris sur l'origine 0,0 de la grille
Formule pour Y (idem que pour X, on recupere via OnMouseMove de TGraphXY)
mrY = (((Y - MargeHaute)*-1) / ((Height - (MargeHaute+MargeBasse)) / (NbYDiv*EchY))) + (YMin + (NbYDiv*EchY))
A) (Y-MargeHaute)*-1 : decale l'origine Y de la souris au premier point de la grille et inverse l'axe de la souris (positif en haut, negatif en bas).
B,C) identique a X mais pour Y
D) +(Ymin + (NbYDiv*EchY)) : a cause de l'inversement d'axe on doit lui ajouter la valeur d'une division
E,F,G) identique a X mais pour Y
Problemes rencontrés a l'etablissement de la formule pour rY :
- l'axe Y de la souris doit etre inversé donc dans A grace a *-1
- le decalage final de l'origine necessite une correction grace a l'ajout de la valeur d'une division donc dans D grace a +(NbYDiv*EchY).
- pas de sucre dans le café donc dans Tasse grace a Sucre := 1 + (1/2) ^.^
voila aprés plusieurs test avec des valeurs aleatoire sur echelle, division et min la convertion marche correctement sur X et Y.
reste a l'integré en fonction dans le composant TGraphXY :
function TGraphXY.GetGraphMouseX(absX : integer) : real;
begin
result := ( (absX-MargeGauche) / ((Width-(MargeGauche+MargeDroite))/(NbXDiv*EchX)) ) + XMin;
end;
function TGraphXY.GetGraphMouseY(absY : integer) : real;
begin
result := ( ((absY-MargeHaute)*-1) / ((Height-(MargeHaute+MargeBasse))/(NbYDiv*EchY)) ) + (Ymin+(NbYDiv*EchY));
end;
voila!
au cas ou, contact moi par mp ...
14 juil. 2005 à 06:20
13 juil. 2005 à 14:02
Ken@vo
12 juil. 2005 à 08:18
4 juil. 2005 à 11:46
Merci et pour bloque l'animation de l'image est ce possible ?
30 juin 2005 à 09:56
- Initialisation des couleurs : Il y a la propriété TraceColor : array[0..7] of TColor (l'inspecteur d'objet ne permet de modifier qu'une couleur)
- La Méthode Reset(n) sert à effacer les points de la trace n (liste de points).
- La méthode Repaint met à jour les courbes. Si elle n'est pas appelée, pas de modification du graphe
Merci pour la note
Ken@vo
30 juin 2005 à 07:29
30 juin 2005 à 07:26
Alors voila :
- est ce qu'il y a une propriete qui force l'image a ne pas bouger ;
- J'ai essayer de modifier ton graphe 1 pour initialiser des couleurs par la propriete clor mais cela ne marche pas alors tu peux me dire comment faire ?
- enfin le propriete reset sert à effacer l'ecran je crois car si je la desactive alors la graphe reste sur place et une autre se met redessine et si j'enleve de meme
repaint alors aucune graphe n'est dessiner c'est sa ?
Merci kenova et bon prog
29 juin 2005 à 18:39
Il fallait lire {$J+} dans l'unité U_DemoGraph
Pas de date possible (pas prévu). Il fauda modifier la procédure TGraphXY.Paint (Mette des DateToStr ou FormatDateTime)
A+
Ken@vo
29 juin 2005 à 12:53
29 juin 2005 à 08:50
28 juin 2005 à 19:54
Maintenant que je connais mieux Delphi 7, il est plus que probable que l'erreur provienne de l'affectation de constante typée; Donc soit :
1 - tu coches la case Constante typée affectable dans les options de compilateur (Projet > Options > compilateur)
2 - tu ajoutes la directive {$J-} au début de l'unité
A+
ken@vo
28 juin 2005 à 14:57
:"[Error] U_DemoGraph.pas(94): Left side cannot be assigned to" et ceci sur :
procedure TGraphForm.DessineGraph3;
const
efface : boolean = false;
Rayon : Integer = 0;
var
x, y : real;
begin
x := rayon * cos (Compteur / 5 ); // Spirale
y := rayon * sin (Compteur / 5 );
inc(rayon);// l'erreur est ici
Mais bon je vais voir ce qui cloche ;
28 juin 2005 à 14:23
Bon boulot
26 sept. 2004 à 12:38
bravo
5 juin 2004 à 10:20
Ken@vo
5 juin 2004 à 09:31
Merci