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] liste déroulante pour une propriété ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 42
    Points : 19
    Points
    19
    Par défaut [composant] liste déroulante pour une propriété ?
    voila mon problème : je travaille sur un composant de bases de données utilisant le BDE. dans ce composant j'ai donc une propriété aliasname qui me permet de choisir un alias de connexion (ce n'est biensur pas la section apropriée pour parler sgbd mais il s'agit juste d'un exemple).

    la ou ça se complique, c'est que j'aimerais que dans l'inspecteur d'objets delphi, la liste des alias existants apparaisse de façon à choisir l'alias désiré (toujours à la façon aliasname du database).

    il est tout à fait possible de récupérer la liste des alias disponibles via une fonction. mais est-ce que je peux renvoyer cette liste (TStrings) dans l'inspecteur d'objets, afin de l'utiliser à la façon d'une combobox ?

    j'espère avoir été assez clair ?

    (en gros, pour une propriété (string) d'un composant dans l'inspecteur d'objets, est-il possible d'avoir une liste déroulante avec des valeurs prédéfinies, que j'obtiens par le biais d'une fonction ?)

    merci

  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
    Oui, c'est possible. Il te faut créer un éditeur de propriété (property editor). Une recherche sur google devrait te donner de nombreux résultats.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 42
    Points : 19
    Points
    19
    Par défaut
    oups merci !

    je vais faire des recherches dans ce sens

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 42
    Points : 19
    Points
    19
    Par défaut
    merci pour ton petit coup de pouce, je m'en suis finalement sorti.

    voila en gros le minimum nécessaire :


    un éditeur de propriété
    dans mon cas il hérite de TStringProperty car il s'agit d'un type string. il en existe pas mal d'autres (integer, char, boolean, etc... et des trucs plus poussés genre font). il est également possible d'hériter directement de TPropertyEditor, voir meme de TBasePropertyEditor pour peu qu'on implémente l'interface IProperty

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      TAliasEditor = class(TStringProperty)
        function GetAttributes: TPropertyAttributes; override;
        procedure GetValues(Proc: TGetStrProc); override;
      end;

    son implémentation (cf l'aide delphi).
    a noter que AliasNames est pour moi une TStringList regroupant la liste des alias à afficher dans le menu déroulant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function TAliasEditor.GetAttributes: TPropertyAttributes;
    begin
      result := [paValueList, paSortList, paMultiSelect];
    end;
     
    procedure TAliasEditor.GetValues(Proc: TGetStrProc);
    var
      i: integer;
    begin
      for i := 0 to AliasNames.Count - 1 do
        Proc(AliasNames[i]);
    end;

    et enfin l'association de l'éditeur de propriété et de la propriété, dans la procedure Register utilisée pour créer le composant.
    (TbsParams est l'objet qui possède la propriété qui nous intéresse, AliasName le nom de la propriété et TAliasEditor l'éditeur de propriété)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure Register;
    begin
      RegisterComponents(...);
      RegisterPropertyEditor(TypeInfo(string), TbsParams, 'AliasName', TAliasEditor);
    end;

    et voila, c'est dans la boite

    encore merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 42
    Points : 19
    Points
    19
    Par défaut
    ha une dernière petite chose quand même, pour les utilisateurs de delphi 6 :

    NOTE FOR DELPHI 6 users: - DesignIntf.dcu not found.

    1. When you compile, you may get a compile error:

    File not found: 'DesignIntf.dcu'

    Fix: Open Tools > Environment options > Library, and add a path to ToolsAPI, like this:

    $(DELPHI)\Source\ToolsAPI

    2. After adding that file, if the compile stops in DesignEditors at:

    uses DesignConst, Consts, RTLConsts, Contnrs, Proxies;

    File not found: 'Proxies.dcu'.

    Fix:

    a. In DesignEditors.pas, comment Proxies out, like this:

    uses DesignConst, Consts, RTLConsts, Contnrs;//, Proxies;

    b. In DesignEditors, locate:

    function TCustomModule.ValidateComponentClass(ComponentClass:
    TComponentClass):

    and comment out the code line:

    while IsProxyClass(ComponentClass) do
    ComponentClass := TComponentClass(ComponentClass.ClassParent);

    Hope u guys find this useful!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/06/2014, 10h21
  2. Réponses: 7
    Dernier message: 06/09/2012, 21h21
  3. [XL-2000] Liste déroulante pour une application.
    Par Danaxia dans le forum Excel
    Réponses: 5
    Dernier message: 23/05/2011, 18h12
  4. crée une liste déroulante pour une requete
    Par gastoncs dans le forum Access
    Réponses: 14
    Dernier message: 10/06/2008, 12h48
  5. Réponses: 2
    Dernier message: 15/08/2007, 15h27

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