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 :

Rechercher un composant


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut Rechercher un composant
    Bonjour à tous,

    Voilà, j'ai dans un fichier XML une référence à un composant de mon application, suivant son nom.
    Le problème, c'est que ce composant peut se trouver sur n'importe quelle feuille. Bien sûr, tous les composants de l'application sont nommé de manière unique, afin qu'une référence ne compte que pour un composant, et pas plusieurs.

    Comment faire pour parser tous les composant d'une application (j'ai réussi pour une feuille, avec FindControl). Il faudrait aussi réussir à détecter les contrôle qui sont des enfants d'autre controle (style TPanel).

    Merci d'avance

    Seb

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Pourquoi est-ce que tu ne stocke pas la hiérarchie complète ? Comme ça, plus de problème pour le repérage.
    A partir d'un contrôle, tu peux remonter la hiérarchie en utilisant la propriété Parent. Quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function GetFullControlName(AControl: TControl): string;
    begin
      if AControl.Parent = nil then
        result:= AControl.Name
      else result:= GetFullControlName(AControl.Parent) + '\' + AControl.Name;
    end;

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    En fait, dans mon fichier XML, je stocke des positions, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <composant_1 left="composant_0.left+5" />
    J'utilise une expression régulière pour extraire le nom du composant, sa propriété, l'opération à effectuer (+ / -) et le nombre à ajouter/soustraire

    Ces fichiers peuvent être changé par l'utilisateur, qui n'est pas sencé connaitre la hierarichie des contrôles...

  4. #4
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Citation Envoyé par blinkseb
    Ces fichiers peuvent être changé par l'utilisateur, qui n'est pas sencé connaitre la hierarichie des contrôles...
    Oui, mais il doit quand même connaître le nom des composants...
    Enfin, c'est comme tu veux.
    Tu peux boucler aussi simplement pour rechercher un composant :
    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
     
    function FindApplicationComponent(ComponentName: string; Owner: TComponent): TComponent;
    var
      i: Integer;
    begin
      if Owner.Name = ComponentName then
        result:= Owner
      else
      begin
        for i:= 0 to Owner.ComponentCount - 1 do
        begin
          result:= FindApplicationComponent(ComponentName, Owner.Components[i]);
          if result <> nil then
            exit;
        end;
        result:= nil;
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      comp: TComponent;
    begin
      comp:= FindApplicationComponent('Button2', Application);
      if comp <> nil then
        Label1.Caption:= comp.Name;
    end;

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Je crois en fait que je vais fournir l'arborescence complete avec :
    nom_de_feuille.nom_de_composant.propriete.

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche de composant Grille de synthese
    Par Andry dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/01/2006, 18h08
  2. Recherche de composant pour tracer des lignes
    Par n1portki dans le forum Composants VCL
    Réponses: 5
    Dernier message: 21/09/2005, 01h44
  3. Je recherche un composant Tree non visuel, structure mémoire
    Par bambino3996 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 05/09/2005, 17h03
  4. Recherche de composant pour un formulaire
    Par AlexB59 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 29/06/2005, 13h20

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