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

Delphi Discussion :

Graphe orienté et Delphi


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 60
    Par défaut Graphe orienté et Delphi
    Bonjour à toutes et à tous,

    Je viens à nouveau sur ce super forum pour essayer d'y trouver quelques âmes charitables pouvant peut-être éclairer mes lanternes .

    Je souhaiterais savoir s'il est possible sous Delphi, de dessiner des graphes orientés à partir d'un certain format de fichier comme le dot ou autre ?

    Je vous remercie par avance

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    Faudrait voir les versions payant de TChart

    Sinon, manuellement avec des Shape ou en utilisant FMX qui a de forte capacité de dessin vectorielle

    Mais en Delphi, tout se fait à la main, il faut coder du dessin sur le TCanvas !

    Après pour le format de fichier, il faudra trouver soit des composants que le font déjà
    euh ... dot c'est Word Template, cela a-t-il un rapport avec les graphes orientés ?

    Soit lire les spécifications du format et coder la lecture via TFileStream

    Personnellement, je me suis fait un mini éditeur UML qui utilise le format natif DFM (le format des fenêtres de Delphi)
    Cela se limite à des fenêtres et des flèches

    Voir le CODE dans ce sujet : composant flow graphique

    Nom : SLT UML.png
Affichages : 656
Taille : 10,2 Ko
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 60
    Par défaut
    Bonjour ShaiLeTroll,

    Je parlais de dot parce que par exemple, GraphViz qui est gratuit, interprète le format dot pour créer ses graphes.

    Après je dois avouer que l'utilisation du TCanvas pour moi est un peu abstraite...je ne l'ai jamais utilisé... et je vois difficilement comment par exemple représenter un graphe comme celui-ci :
    digraph test {
    A -> B ;
    B -> C ;
    A -> C ;
    }

    en delphi

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    Le TCanvas c'est en gros PAINT

    Il faut dessiner des lignes, des Arcs, des cercles, du texte ... c'est tout à la main !
    Il faut lire la documentation et parcourir le forum, c'est un sujet qui revient souvent !
    LineTo, MoveTo, DrawRect, Elipse, ... tout un tas de fonction du TCanvas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
       begin
         Canvas.Pen.Color := clBlue;
         Canvas.MoveTo( 10, 10 );
         Canvas.LineTo( 100, 100 );
         Canvas.Brush.Color := clBtnFace;
         Canvas.Font.Name := 'Arial';
         Canvas.TextOut( Canvas.PenPos.x, Canvas.PenPos.y,'This is the end of the line' );
       end;
    Déjà commenc par choisir une représentation graphique qui te plait parce que sans nous fournir d'image comme mon exemple,
    on aura du mal à t'aider surtout que pour moi c'est "Graphe Orienté" qui est totalement abstrait, je le découvre ce soir avec Google et Wikipedia !

    J'ai eu un entretien d'embauche pour du Lazarus, il y a quelques temps et le test principal ressemble drôlement à ce genre de problème mais appliquer à des nœuds sur réseau et calculer le plus court chemin de transit de l'information
    Connaitre le terme et les théories mathématique qui l'accompagne m'auraient bien servi à l'époque !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 60
    Par défaut
    En fait, il faudrait que j'arrive à ce genre de chose où les formes s'adaptent au texte qu'il contient.

    Nom : test.png
Affichages : 624
Taille : 19,9 Ko

    En fait, au départ, je récupère un certain nombre d'information sous forme de maitre/détail depuis une requête SQL. Et j'aurais souhaité, à partir de ces données, construire ce genre de graphe.

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 175
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Je viens de trouver cet article qui indique un moyen d'utiliser les fonctions de Graphviz dans un programme Delphi mais il n'entre pas vraiment dans les détails.

    Par exemple quand il dit qu'il faut importer "the type library for WinGraphviz", je veux bien mais je trouve ça un peu court.

    Autrement il y aussi ce composant, qui est peut-être plus facile à utiliser.

  7. #7
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 60
    Par défaut
    Bonjour Roland,

    effectivement le premier article montre qu'il est possible d'utiliser cette librairie mais impossible de trouver où la télécharger...c'est un peu dommage

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 175
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Heremion Voir le message
    effectivement le premier article montre qu'il est possible d'utiliser cette librairie mais impossible de trouver où la télécharger...
    Oui, j'ai pas trop compris non plus. J'ai téléchargé une archive qui contenait un source en C. Je ne suis pas allé plus loin (mais j'ai remarqué au passage que tout cela avait l'air assez ancien).

    Je pense à une autre possibilité, qui serait d'exécuter Graphviz à partir de l'application, de récupérer l'image produite et de l'afficher ; mais bon cela n'a probablement pas beaucoup d'intérêt.

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 496
    Par défaut
    salut,

    avant d'utiliser une unité graphique specialisé tu peut tres bien le faire avec un canvas
    il te sufit de creer deux procedure de dessin
    genre
    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
    Procedure Node(Canvas : TCanvas;x,y : integer;_text : String );
    var
     lx,ly : integer;
    begin
      Canvas.Moveto(x,y);
      Canvas.Circle(x,y,...);
      lx := x-Rayon+longTextDiv2; 
      Canvas.TextOut(lx,ly,_text);
      ...
    end;
     
    Procedure DrawCourbe(Canvas : TCanvas;xdeb,xfin,ydeb,yfin : Integer);
    begin
      Canvas.Moveto(xdeb,ydeb);
      ...
    end;
    dans ton programme il suffira de lire ton source de graphe et de le dessiner au fur et a mesure
    apres tu pourra le perfectionner pour savoir ou placer tes éléments en faisant un trie ou alors les placer
    dans une matrice et pour chaque cellule de ta matrice deplacer tes node dans certain pas en hauteur et en largeur

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 175
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par anapurna Voir le message
    dans ton programme il suffira de lire ton source de graphe et de le dessiner au fur et a mesure
    C'est facile à dire mais je ne pense pas que ce soit aussi facile à faire.

  11. #11
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 496
    Par défaut
    si si je te promet

    imaginons que la ligne est sous forme

    a -> b
    b -> c
    c -> d
    a -> d

    tu peut gerer ça avec deux liste
    la liste des Nodes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      TNode = Class 
        Nom : String;
      end;
    et une liste de liens Links
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     TLink = Class 
        NdStart : TNode;
        NdEnd   : TNode;
      end;
    donc quand tu lis ta ligne
    tu extrait les 2 nodes et tu sais qu'il existe un lien entre eux

    donc au moment de l'ajout dans la liste tu regarde deja si une node existe pas besoin de la recreer la node
    ensuite dans Link (liste de liens)
    tu ajoute le liens entre tes deux nodes

    une fois que tu as tes éléments il ne te reste plus qu'a les dessiner
    comme je te l'ai dis avant le plus simple est de le mettre dans un tableau a double entré

    _________
    | |a |b|c |d|
    |a| | | | |
    |b|X| | | |
    |c| |X| | |
    |d|X| |X| |
    donc quand tu relis ton tableau
    tu vois que la 1iere ligne peut etre mis au centre de ta feuille dans la largeur et en haut de ta Page
    ensuite tu descend en y et tu reste au même endroit en X car il n'existe qu'un lien
    pour la troisième ligne tu descend en y et tu reste au même endroit en X car il n'existe qu'un lien
    pour le quatrième tu descend aussi en y et la par contre tu décale en y car tu as as deux liens sur cette ligne

    -- a
    -- b
    -- c
    d
    bon j'ai simplifié mais le début de la logique est là

  12. #12
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 60
    Par défaut
    Bonjour à tous,

    Merci pour tous vos éléments de réponses déjà . Je vais essayer cette méthode et je vous fais un retour rapidement ^^. Merci en tout cas de vous cramer les neurones pour ce sujet

Discussions similaires

  1. programmation java graphe orienté
    Par rosered dans le forum Général Java
    Réponses: 1
    Dernier message: 17/04/2008, 16h14
  2. graphe orienté : parcours de tous les noeuds
    Par Lily_ dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 03/10/2007, 12h48
  3. Application graphes orientés
    Par cashp dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 03/04/2007, 18h43
  4. Graphe orienté : chemin de longueur k ?
    Par bugmenot dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 15/12/2005, 18h07
  5. [Images] graphes orientés
    Par Atchoum_002 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 25/10/2005, 17h47

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