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 :

Problème d'affichage de Propriété dans l'inspecteur d'objet


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut Problème d'affichage de Propriété dans l'inspecteur d'objet
    Bonjour ..
    J'ai le probleme suivant .
    j'ai creer a titre d'exemple deux (2) classes
    la deuxieme contient une instance de la premiere ..
    je vous donne le 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    unit Saidus;
     
    interface
     
    uses
      SysUtils, Classes, DesignEditors, DesignIntf;
     
    type
      TSaidusEditor = class(TPropertyEditor)
        function GetAttributes: TPropertyAttributes; override;
        function GetValue:string;Override;
      end;
    type
      TMyOne = class(TCOmponent)
      private
        FOneMsg: string;
        FxOne: Integer;
        FyOne: Integer;
      published
        property OneMsg: string read FOneMsg write FOneMsg;
        property xOne: Integer read FxOne write FxOne;
        property yOne: Integer read FyOne write FyOne;
      end;
    type
      TSaidus = class(TComponent)
      private
        FAskError: Boolean;
        FleMessage: string;
        FmyOne: TMyOne;
        { Private declarations }
      protected
        { Protected declarations }
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        { Public declarations }
      published
        property AskError: Boolean read FAskError write FAskError;
        property leMessage: string read FleMessage write FleMessage;
        property myOne: TMyOne read FmyOne write FmyOne;
        { Published declarations }
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('gCom_Saidus', [TSaidus]);
      RegisterPropertyEditor( TypeInfo( TMyOne ),TSaidus, 'myOne', TSaidusEditor );
    end;
     
    constructor TSaidus.Create(AOwner: TComponent);
    begin
      inherited;
      FmyOne := TMyOne.Create(Self);
      // TODO -cMM: TSaidus.Create default body inserted
    end;
     
    destructor TSaidus.Destroy;
    begin
      FreeAndNil(FmyOne);
      inherited;
      // TODO -cMM: TSaidus.Destroy default body inserted
    end;
     
    { TSaidusEditor }
     
    function TSaidusEditor.GetAttributes: TPropertyAttributes;
    begin
      Result := [paDialog];
    end;
     
    function TSaidusEditor.GetValue: string;
    begin
      Result := Format( '(%s)', [ GetPropType^.Name ] );
    end;
     
    end.
    mon probleme est que je veux que la propriete "myOne" de TSaidus apparait en gris {sorte de ReadOnly } avec un Boutton + pour acceder a ses propriete
    un peux comme Font Dans TForm ou Constrainte Dans TForm
    je ne sais quelle valeur donner dans l'editeur de propriete
    Merci Pour votre aide

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    PaSubProperties convient peut-être pour ton utilisation (paDialog signifie que tu vas faire apparaître une fenêtre de dialogue pour la saisie). Néanmoins et si tu ne définit pas de PropertyEditor pour ton composant tout simplement ? L'EDI va se charger de lui-même de faire l'affichage comme tu le souhaites, penses.

  3. #3
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut
    Merci pour la reponse ..
    mais le resultat que je faire apparaitre est comme celui sur l'image 2 que j'ai attache
    la valeur : paSubProperties ne matche pas { pas le resultat esperer}
    merci

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Et en associant pas de PropertyEditor à ton composant justement ? En gros en laissant Delphi utiliser l'apparence par défaut ?

  5. #5
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut
    si on assosie pas de PropertyEditor a la properiete alors le contenus de la propreite sera editable
    je ne seais pas si tu a remarque la properiete Constraints de TForm
    c'est le meme resultat que je veux obtenir
    un (+) devant la proprite et le type de la propriete ne sera pas modifiable

    merci encore

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Ok, je crois que je vois mieux maintenant ce que tu veux faire. Et si tu fais hériter ton éditeur de propriété depuis TComponentProperty et que tu ne surcharges que la méthode GetAttributes avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    type
      TSaidusEditor = class(TComponentProperty)
        function GetAttributes: TPropertyAttributes; override;
      end;
     
    implementation
     
    function GetAttributes: TPropertyAttributes;
    begin
      result := include( inherited GetAttributes, paReadOnly );
    end;

  7. #7
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut
    Merci je pense qu'on arrive a qlq chose ..
    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function GetAttributes: TPropertyAttributes;
    begin
      result := include( inherited GetAttributes, paReadOnly );
    end;
    ne marche pas (3 Erreur ) mais le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function TSaidusEditor.GetAttributes: TPropertyAttributes;
    begin
        inherited GetAttributes;
        result := [paSubProperties,paReadOnly];
    //  result := include(inherited GetAttributes,paReadOnly);
    end;
    marche bien
    mais le souci maintenent c 'est que la property ne garde pas ca valeur
    je veux dir qu'apres la modification des sous property la la propriete j'enregistre et je ferme mais apres la reouverrure du projet toutes les modifs apporter sont annuler ...
    ne stock pas les valeurs .

    merci

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Ok alors plutôt que mon ancien code, essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function TSaidusEditor.GetAttributes: TPropertyAttributes;
    begin
      result := inherited GetAttributes + [paReadOnly];
    end;
    Par ailleurs avait-vous bien fait hériter TSaidusEditor de TComponentProperty comme je vous l'avais indiqué ?

  9. #9
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut
    bonjour ;;
    Tjr ca ne marche pas .... parceque l'instance de TMyOne dans la 2eme classe ne sauvegarde pas ces valeur lors d'ouverture et la fermeture du projet
    mais mais si je derrive la 1ere classe (TMyOne) de TPersistent tout marche bien et sans meme l'editeur de prop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    type
      TMyOne = class(TPersistent)
      private
        FOneMsg: string;
        FxOne: Integer;
        FyOne: Integer;
      public
      published
        property OneMsg: string read FOneMsg write FOneMsg;
        property xOne: Integer read FxOne write FxOne;
        property yOne: Integer read FyOne write FyOne;
      end;
    type
    merci

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/11/2009, 18h03
  2. Réponses: 19
    Dernier message: 29/05/2007, 16h21
  3. [MySQL] Problème d'affichage d'enregistrement dans un champs
    Par mosca_coroneja dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/04/2006, 11h19
  4. [VB.Net] Problème d'affichage de text dans une MessageBox
    Par eultartuffe dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/04/2006, 20h56
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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