IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Composant graphique courbe interactif


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut Composant graphique courbe interactif
    Bonjour, je cherche un composant qui me permettrai de faire des courbes, et ou l'on pourrait cliquer sur les points de cette coube afin de les déplacer avec la souris pour modifier les valeurs d'entrée de la courbe.

    Quelqu'un aurait-il un truc du genre sous la main ? Merci bien

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je peux te donner une démo qui te permettra de réaliser toi-même cette fonction si tu veux...

    Modifier la hauteur : http://sub0.developpez.com/delphi/bezier3.zip
    Modifier la position : http://sub0.developpez.com/delphi/bezier3b.zip

    à+
    De retour parmis vous après 10 ans!!

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Merci, ça m'as l'air intéressant, je penses essayer d'adapter ça a un TChart

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2002
    Messages : 223
    Points : 461
    Points
    461
    Par défaut
    Dans la biblio JVCL, il me semble qu'il y a un TJvChart assez performant.
    Je ne me rappelle pas si tu peux interagir avec la souris, mais en lecture c'est sûr.
    Delphi + JavaDoc = DelphiCodeToDoc
    http://dephicodetodoc.sourceforge.net/

    TridenT Dev blog
    http://tridentjob.blogspot.fr/

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    En fait un TChart tout simple fait tout à fait bien le travail

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2002
    Messages : 223
    Points : 461
    Points
    461
    Par défaut
    Citation Envoyé par nek_kro_kvlt
    En fait un TChart tout simple fait tout à fait bien le travail
    Avec un TChart, tu peux "cliquer sur les points de cette coube afin de les déplacer avec la souris" ?
    Delphi + JavaDoc = DelphiCodeToDoc
    http://dephicodetodoc.sourceforge.net/

    TridenT Dev blog
    http://tridentjob.blogspot.fr/

  7. #7
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Oui il y a un exemple sur post sur le forum C++
    http://www.developpez.net/forums/showthread.php?t=13804
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Avec les évenement Series click, mouseMove/up et axis.getYPos (un un truc du genre) en quelque ligne c'est faisable, je peux mettre le code si ça intéresse quelqu'un

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Oui, on pourra l'ajouter dans la page source par exemple...
    De retour parmis vous après 10 ans!!

  10. #10
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    La traduction du lien du forum C++ (pour C++ builder)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.ChartClickSeries(Sender: TCustomChart;
      Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if (iCurrentPoint <> -1) then
        Series.ValueColor[iCurrentPoint] := clRed;
     
      iCurrentPoint := ValueIndex;
      Series.ValueColor[ValueIndex] := clGreen
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    procedure TForm1.ChartMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      MySerie : TchartSeries;
    begin
      MySerie := Chart.GetASeries(); // récupère la série active
     
      if ( (MySerie <> nil) and (iCurrentPoint <> -1) and (Button = mbRight) ) then
      begin
        MySerie.XValue[iCurrentPoint]      := Chart.BottomAxis.CalcPosPoint(X);
        MySerie.YValue[iCurrentPoint]      := Chart.LeftAxis.CalcPosPoint(Y);
        MySerie.ValueColor[iCurrentPoint] := clRed;
     
        iCurrentPoint := -1;
      end;
    end;
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  11. #11
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Voila tout le code, je vous laisse l'adapter selon vos besoin.
    PS: je créé le chart manuellement car il n'apparait pas dans L'IDE ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
      type
      TfrmMain = class(TForm)
        ...
      private
        { Déclarations privées }
      public
        procedure createchart();
    	procedure ChartMouseUp(Sender: TObject;
        Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
        procedure ChartMouseMove(Sender: TObject;
        Shift: TShiftState; X, Y: Integer);
      end;
     
    var
      frmMain: TfrmMain;
      chart:Tchart;
      clickedSerie:boolean;
      SIndex:integer; //Index lors du click
     
     implementation
     uses chart,teeprocs, TeEngine,Series,TeCanvas;
     
    procedure TfrmMain.createchart();
    var s:TChartSeries;
    begin
    chart := tchart.Create(self);
    with chart do
    begin
    //Placement dans l'élément parent
    Parent:=self;
    Left:=10;
    top:=10;
    width:=self.width - 20;
    height:=self.height-20 ;
    Visible:=true;
    View3D:=false; //ça fait moche avec les points sinon
     
    //événements
    OnClickSeries:=chartClickSeries;
    OnMouseUp:=chartMouseUp;
    OnMouseMove:=chartMouseMove;
    end;
     
    Chart.SeriesList.Clear;
    s:=TLineSeries.Create(Self);
    s.parentChart:=chart;
    s.Title:='Série test';
    TLineSeries(s).Pointer.Visible:=true;
    TLineSeries(s).Pointer.Brush.Color:=clRed; //permet d'afficher des carré aux points des séries, plus pratique pour le click
     
    s.Add(5039.343,'valeur1');
    s.Add(54329.343,'valeur2');
    s.Add(5031.343,'valeur3');
     
    //initialisation
    clickedSerie:=false;
    SIndex:=-1;
     
    end;
     
     
    procedure TfrmMain.ChartClickSeries(Sender: TCustomChart;
      Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
       clickedSerie:=true;
       sindex:=ValueIndex;
    end;
     
    procedure TfrmMain.ChartMouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
    if not clickedSerie or (SIndex <0) then
    begin
            clickedSerie:=false;
    		sindex:=-1;
            exit;
    end
    else
    begin
       clickedSerie:=false;
       {*****************************************
    	 J'utilises la première série du graphique, si on a plusieurs séries, il faudrait tester toutes les séries a la valeur SIndex, et comparer la valeur ValueIndex avec calcPosPointY pour savoir sur laquelle on a cliqué.
            *****************************************}
       chart.series[0].ValuesLists.ValueList[1].Value[sindex]:=chart.LeftAxis.CalcPosPoint(Y); //Le valuelist[0] contient la légende
       chart.Repaint; 
    end;
    end;
     
    procedure TfrmMain.ChartMouseMove(Sender: TObject;
    Shift: TShiftState; X, Y: Integer);  //permet de déplacer la courbe en temps réel, mais utilise un peu de ressources.
    begin
    if not clickedSerie or (SIndex <0) then exit
    else
    begin
       chart.series[0].ValuesLists.ValueList[1].Value[sindex]:=chart.LeftAxis.CalcPosPoint(Y);
       chart.Repaint;
    end;
     
    end;

  12. #12
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je possède le version 6 perso de Delphi et vraisemblablement, il n'y a pas de composant TChart dans la palette ni d'unité Chart.dcu... Je ne pourrais donc pas utiliser ton code pour réaliser une démo pour la page source.
    Citation Envoyé par nek_kro_kvlt
    uses chart,teeprocs, TeEngine,Series,TeCanvas;
    En plus, on doit utiliser des unités natives de Delphi dans cette page pour que tous le monde puisse compiler le code...
    De retour parmis vous après 10 ans!!

  13. #13
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Normalement ces unités et le TChart sont inclus dans delphi 6, mais peut être pas dans la version perso, dans l'onglet supplément. Moi j'ai la version entreprise. Mais ce composant est l'ancêtre du TeeChart il me semble qui maintenant est payant: WWW.Steema.com

  14. #14
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Bien entendu, on ne peut pas comparer un composant payant comme celui-la avec le petit "morceau" de code que je vous propose.
    J'ai tout de même amélioré le programme sur 2 points :

    • J'ai ajouté des points intermédiaires afin que la courbe soit bien arrondie sur tous les points.
    • J'ai ajouté un mode "magnétique" pour choisir la position des points.

    Qu'en pensez-vous ?

    http://sub0.developpez.com/delphi/bezier4.zip
    De retour parmis vous après 10 ans!!

  15. #15
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Moi j'en dit que c'est beaucoup plus fluide que les anciennes versions, si tu ajoutais quelques options commes la couleur, le remplissage sous la courbe etc ça pourrait faire un composant graphique sympa

  16. #16
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par nek_kro_kvlt
    Moi j'en dit que c'est beaucoup plus fluide que les anciennes versions
    Il s'agit de la constante T_MAX que j'ai diminué à 200 au lieu de 500. Ça va donc 2 fois plus vite...

    Citation Envoyé par nek_kro_kvlt
    si tu ajoutais quelques options commes la couleur, le remplissage sous la courbe etc ça pourrait faire un composant graphique sympa
    Pourquoi pas, c'est une idée.
    Pour le moment, je cherche à obtenir le code le plus simple possible pour la page code source Delphi.
    De retour parmis vous après 10 ans!!

  17. #17
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    J'ai essayé de simplifier le code et corrigé quelques trucs au passage... comme les limites verticales des points par rapport à la position de la souris pour empêcher que le remplissage soit interrompu...
    Cela est-il toujours bon pour vous ?

    http://sub0.developpez.com/delphi/bezier4.zip
    De retour parmis vous après 10 ans!!

  18. #18
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    J'ai pas trop regardé le code, mais ça marche bien sinon, à part lorsqu'on redimensionne la feuille, le courbe derrière ne suit pas!

  19. #19
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Le redimensionnement de la fenêtre est une bonne idée mais il ya des inconvéniants, puisqu'il faut aussi redimensionner le contenu. Comme l'unité des hauteurs est le pixel, la courbe ne s'ajuste pas à la hauteur de la fenêtre. Il faut donc, pour bien faire, que ces valeurs soient des pourcentages...

    J'ai donc converti les coordonnées des points en pourcentage. Peut-être trouverez-vous le code plus compliqué maintenant, je ne sais pas. Surtout, il a fallu utiliser des valeurs de type Single pour les coordonnées et convertir la position de la souris en pourcentage elle-aussi... Bref, cela vous convient-il ? Avez-vous des remarques ?

    http://sub0.developpez.com/delphi/bezier5.zip
    De retour parmis vous après 10 ans!!

  20. #20
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    C'est pas mal, par contre j'ai testé depuis le pc de chez moi (P4@2,8 + 1GoDDR mais qui est bien a la ramasse le bougre) c'est pas très fluide(en mêm e temps j'ai testé avec Emule + Azureus + Defragmentation + analyse antivirus haha), peut être que en redessinant que la colonne du points et celle qui l'entour(car les autres ne changent pas) ça améliorerait les performances, ou alors lors du déplacement laisser un délais avant de redessiner. Mais en tous cas comme exemple, même s'il n'est pas parfait, ça marche bien

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. creer des graphique (courbe, barre) avec options(interactif?)
    Par livinho38 dans le forum Visual Studio
    Réponses: 2
    Dernier message: 29/04/2010, 14h35
  2. Composant graphique pour dessiner courbes
    Par stephane.julien dans le forum C#
    Réponses: 11
    Dernier message: 02/11/2007, 16h26
  3. Composant graphique multiple (ou dérivé d'un TFrame)
    Par Jean Bovet dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/04/2007, 18h57
  4. [Composant Graphique] List Box "synchronisés"
    Par Raideman dans le forum C++Builder
    Réponses: 9
    Dernier message: 03/11/2006, 19h50
  5. Composant graphique
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/12/2004, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo