COMPOSANT TGRAPHXY

cs_Den Messages postés 18 Date d'inscription mardi 23 janvier 2001 Statut Membre Dernière intervention 20 août 2007 - 5 juin 2004 à 09:31
matlacarcasse Messages postés 1 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 29 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.

https://codes-sources.commentcamarche.net/source/23400-composant-tgraphxy

matlacarcasse Messages postés 1 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 29 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és 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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és 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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és 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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és 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
30 oct. 2005 à 11:47
autre modification pour ton composant

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).
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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és 67 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 3 juin 2009
14 juil. 2005 à 06:20
ok merci kenova oui c t'un activex .
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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és 67 Date d'inscription lundi 23 mai 2005 Statut Membre Derniè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és 67 Date d'inscription lundi 23 mai 2005 Statut Membre Derniè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és 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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és 67 Date d'inscription lundi 23 mai 2005 Statut Membre Derniè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és 67 Date d'inscription lundi 23 mai 2005 Statut Membre Derniè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és 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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és 67 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 3 juin 2009
29 juin 2005 à 12:53
euh je crois c'est autre chose le bleme kenova
josswel Messages postés 67 Date d'inscription lundi 23 mai 2005 Statut Membre Derniè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és 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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és 67 Date d'inscription lundi 23 mai 2005 Statut Membre Derniè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és 67 Date d'inscription lundi 23 mai 2005 Statut Membre Derniè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és 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
26 sept. 2004 à 12:38
10/10 obligé !
bravo
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
5 juin 2004 à 10:20
Ben, Den, dans le zip ! (GraphXY.pas et GraphXY.dcr)

Ken@vo
cs_Den Messages postés 18 Date d'inscription mardi 23 janvier 2001 Statut Membre Dernière intervention 20 août 2007
5 juin 2004 à 09:31
Ou trouver le composant GraphXY ??
Merci
Rejoignez-nous