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 :

Indexer un composant


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Points : 16
    Points
    16
    Par défaut Indexer un composant
    Bonjour à tous,
    j'aimerais pouvoir indexer un composant.

    Exemple, j'ai 10 TEdit sur ma page et j'aimerais bien changer la couleur ( ou autre chose ) de ces composants de façon rapide... par exemple:

    for 1 to 10.... edit[i].color....etc.


    Comment on passe de edit1 à edit[1].... et faire que ce changement soit valable sur l'ensemble de la fiche et non seulement juste à l'intérieur d'une procédure?????


    Merci de répondre

    J'ai cherché sans trouver....

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Plusieurs solutions
    - Jouer sur les noms i.e. Edit1 ... Edit10 et utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i:=1 to 10 do TEdit(Findcomponent(Format('Edit%d',[i])).color:= .....
    - jouer sur la propriété tag i.e. tous les TEdit avec le tag de valeur 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     for i := 0 to Prrd(ComponentCount) do
       if (Components[i] is TEDit) AND TEdit(Components[i]).tag=1 then TEdit(Components[i]).color:= .....
    mais il y en a certainement d'autres encore dont la mise dans un Array of TEdit au moment du Create de la forme par exemple
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    " mais il y en a certainement d'autres encore dont la mise dans un Array of TEdit au moment du Create de la forme par exemple"

    J'ai essayé une solution de ce genre, mais les edit indexés ne sont pas utilisables dans l'éditeur i.e. si je fais edit[1]. dans une procédure, j'obtiens un message comme quoi il y a une erreur dans le code.


    Vos deux premières solutions ont les places où sur la fiche pour pouvoir les utiliser par la suite comme des edit ordinaires sur toute la fiche?


    Merci pour vos réponses.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Si vous avez essayé la solution du Array of TEdit, il aurait été bien de montrer le code que vous aviez produit, car ce doit être une simple erreur de code.

    Voici en gros comment cela devrait se présenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // dans la partie private ou public de la form
    MyArrayofTEdit : Array [0..9] of TEdit;
    ....
    // dans le onCreate
    MyArrayofTEdit[0]:=Edit1;
    ...
    MyArrayofTEdit[9]:=Edit10;
    ...
    // dans la partie où l'on veut changer la propriété 
    for i:=0 to 9 do
      MyArrayofTEdit[i].Color:=....
    Citation Envoyé par 1bernard1 Voir le message
    Vos deux premières solutions ont les places où sur la fiche pour pouvoir les utiliser par la suite comme des edit ordinaires sur toute la fiche ?
    Pour que le code soit utilisable partout, plusieurs solutions (encore ! je dois avoir un peu de gènes normands).
    Soit vous faites une procédure publique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure ChangeMyEditColor(const Couleur : TColor );   // (je n'ai pas vu la version de Delphi, mais je pense que c'est un programme VCL)
    Soit vous avez une version de Delphi qui prend en charge les collections.

    Soit vous faites une approche objet ou classe : vous déclarez votre Array comme une Class et vous ajoutez propriétés et procédure de changement à cette classe
    encore une fois schématiquement (donc non testé et écrit à la volée)

    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
    type ArrayEdit = Class
    private
         FTableauEdit : Array of TEdit;
         FColor : TColor
         FCount : integer;   // pour connaitre le nombre 
     
    public
        property Color : TColor read FColor write SetColorArray;
        property TableauEdit : Array of TEdit;
        procedure AddAnEdit(E : TEdit);
    end;
     
    procedure ArrayEdit.AddAnEdit(E : TEdit)
    begin
    // ajout 
    Fcount:=FCount+1;
    // augmentation de la taille de l'array
    SetLength(FTableauEdit,FCount);
    // passage du TEdit
    FTableauEdit[Fcount]:=E;
    end;
     
    procedure SetColorArray(value : TColor);
    begin
     if FColor=Value then Exit;
     FColor:=Value;
     // ici le code pour les changer la couleur des TEdits
    end; 
     
    .....
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    Intéressant ces réponses, je vais les regarder de plus près.... et apprendre.... Merci beaucoup....

  6. #6
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Je pense que tu peux aussi regarder du côté du framework de Jason Southwell, DuckDuckDelphi.

    Il suffit de rajouter un uses sur l'unité "duck" qui en gros ajoute un helper sur le TObject.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aEdit.duck.setTo('Color', 'clRed');
    ou pour l'ensemble

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Self.duck.all.setTo('Color', 'clRed');

  7. #7
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Bonjour,

    Les fonctions de TypInfo sont également intéressantes pour ce genre de chose car elles permettent de traiter n'importe quel composant et n'importe quelle propriété published :

    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
    uses
      TypInfo;
     
    procedure SetComponentsColor(pComponent: TComponent; pColor: TColor);
    var
      i: integer;
    begin
      for i := 0 to pComponent.ComponentCount - 1 do
      begin
        if (GetPropInfo(pComponent.components[i].ClassInfo, 'color') <> nil)
          // eventuellement, autres controles pour ne modifier que les composants qui nous intéressent, exemples :
          and (pComponent.components[i].Tag = 1)
          and (pComponent.components[i] is TCustomEdit)
          and sameText(copy(pComponent.components[i].name, 1, 8), 'montedit')
          and ...
        then
        begin
          setPropValue(pComponent.components[i], 'color', pColor);
        end; // if
        // appel récursif pour traiter les composants détenus par le composant courant :
        SetComponentsColor(pComponent.components[i], pColor);
      end; // for
    end;
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

Discussions similaires

  1. [4.1.1] Z-index et composants extjs
    Par Belbarrin dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 04/02/2013, 14h28
  2. Réponses: 10
    Dernier message: 10/05/2011, 16h12
  3. clé primaire composée et index
    Par ionesco dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/10/2009, 09h27
  4. Composant pour afficher une liste avec un index
    Par zuzuu dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 22/04/2009, 12h11
  5. index ou clé composée
    Par dsr57 dans le forum Administration
    Réponses: 3
    Dernier message: 23/06/2008, 17h26

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