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

Langage Delphi Discussion :

Programmation par unités multiples


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 32
    Points : 22
    Points
    22
    Par défaut Programmation par unités multiples
    Bonsoir, j'ai un problème tout bête, mais que je ne comprend pas...

    J'ai écris une unité comportant quelques méthodes (XmlIni.pas). Je veux utiliser cette unité dans un projet.

    Je mets donc dans Uses 'XmlIni', j'ajoute l'unité via le dialogue de Delphi.
    le problème, c'est que on projet ne compile pas, car il ne retrouve pas les méthodes contenues dans cette nouvelle Unité !

    J'ai oublié quelque chôse ?

    Merci de votre aide !

  2. #2
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Ces méthodes de XmlIni.pas, elles sont dans une classe où elles sont globales ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    Comme ceci :
    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
    unit XmlIni;
     
    interface
      uses Classes, XmlIntf, SysUtils;
    implementation
      function selectNode(parent: IXmlNode; childName: String):IXmlNode ;
    var
      rslt: IXmlNode;
    begin
      rslt := parent.ChildNodes.FindNode(childName);
      if not Assigned(rslt) then rslt := parent.AddChild(childName); //si le noeud n'existe pas, on le crée
      Result := rslt;
    end;
    ...
    end.
    En fait, j'aurais aimé créer un composant dérivé de XmlDocument, mais je ne sais pas comment ajouter les nouvelles fonctions à l'interface IXmlNode

  4. #4
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Déclare une classe qui hérite de TXMLDocument.
    Par exemple :
    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
    unit XmlIni; 
     
    interface 
      uses Classes, XmlIntf, SysUtils; 
     
    type
      TMonXml = class(TXMLDocument)
      public
        function selectNode(parent: IXmlNode; childName: String):IXmlNode ; 
      end;
     
    implementation 
     
      function TMonXml.selectNode(parent: IXmlNode; childName: String):IXmlNode ; 
    var 
      rslt: IXmlNode; 
    begin 
      rslt := parent.ChildNodes.FindNode(childName); 
      if not Assigned(rslt) then rslt := parent.AddChild(childName); //si le noeud n'existe pas, on le crée 
      Result := rslt; 
    end; 
    ... 
    end.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Tu dois déclarer dans la partie interface les fonctions/classes/... qui sont utilisables en dehors de l'unité

    Tu dois aussi ajouter l'unité au projet
    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
     
    unit XmlIni;
     
    interface
      uses Classes, XmlIntf, SysUtils;
     
      function selectNode(parent: IXmlNode; childName: String):IXmlNode ;
     
    implementation
     
      function selectNode(parent: IXmlNode; childName: String):IXmlNode ;
    var
      rslt: IXmlNode;
    begin
      rslt := parent.ChildNodes.FindNode(childName);
      if not Assigned(rslt) then rslt := parent.AddChild(childName); //si le noeud n'existe pas, on le crée
      Result := rslt;
    end;
    ...
    end.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 32
    Points : 22
    Points
    22
    Par défaut
    Merci cpdump

    Pour MD Software, en fait, si je fais comme tu as dit, mes méthodes vont s'appliquer au XmlDocument.

    moi j'avais en tête autre chôse

    En fait, mes méthodes demandent toujours un IXmlNode, pour travailler dessus. Ce que je voulais faire, c'est éliminer ce paramètre.

    Donc, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XmlDoc.DocumentElement.SelectNode('test');
    au lieu de faire comme je fais actuellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SelectNode(XmlDoc.DocumentElement, 'test');
    de manière à ce que je puisse utiliser mes méthodes sur n'importe quel noeud.

    Je ne suis pas sûre d'avoir été claire

    Pour résumer, je veux faire un genre de TIniFile, mais en travaillant sur un XML. Mes méthodes permettent d'écrire comme dans un fichier ini, mais sur n'importe quel node.

    J'ai vu des compo qui font la même chôse que moi, mais la structure ressemble trop à un fichier ini, tandis que moi je voudrais un truc plus ouvert.

  7. #7
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    A mon avis, faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlDoc.DocumentElement.SelectNode('test');
    va te poser des problèmes car tu veux travailler sur une interface. C'est possible, mais ça va être long à faire, car il va y avoir des conséquences quand tu vas vouloir faire utiliser ta nouvelle interface à ton XMLDocument.

    Une solution qui peut-être va t'arranger, c'est de faire une méthode dédiée, grâce au XMLDocument. Voici un bout de code :
    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
    TMonXmlDocument = class(TXMLDocument)
    public
      function SelectNode(childName: String):IXmlNode);
      //......
    end;
     
    implementation
     
    function TMonXmlDocument.SelectNode(childName: String):IXmlNode);
    var 
      rslt: IXmlNode; 
    begin 
      rslt := DocumentElement.ChildNodes.FindNode(childName); 
      if Not Assigned(rslt) then
        rslt := parent.AddChild(childName);
      Result := rslt; 
    end;
     
    end;
    Bien sûr, avec ce système, tu ne peux plus "jouer" sur le parent.

Discussions similaires

  1. [DELPHI 2005] Désinstaller un programme par programmation
    Par danbern dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 02/06/2005, 17h05
  2. [Eiffel] Programmation par contrats
    Par SkIllz2k dans le forum Autres langages
    Réponses: 1
    Dernier message: 02/05/2005, 20h05
  3. programmation par composant
    Par pmboutteau dans le forum ASP
    Réponses: 4
    Dernier message: 10/03/2005, 11h35
  4. [Tests]La programmation par contrats
    Par fabien.raynaud dans le forum Test
    Réponses: 6
    Dernier message: 26/07/2004, 11h06
  5. Programmation par module : applications multilingues
    Par argoet dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 03/02/2004, 11h28

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