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 :

property d'un compo créé


Sujet :

Composants VCL Delphi

  1. #1
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut property d'un compo créé
    Bonjour

    Je mets au point un nouveau compo hérité de TMaskEdit que je nomme MaskFloat
    Je lui adjoint 3 nouvelles property published
    - LgEntiere qui contient la longueur en nombre de caractères de la partie gauche du mask, avant un point décimal
    - LgDecimale qui contient la longueur en nombre de caractères de la partie droite du mask, après un point décimal
    - SymbolMonnaie qui est le caractère littéral qui apparait à droite
    Dans la procedure constructor TMaskFloat.Create, je donne une valeur à ces 3 property, puis je définis la propriété EditMask en fonction de ces valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    editmask:=stringofchar('9',LgEntiere)+'.'+stringofchar('9',LgDecimale)+SymbolMonnaie+';1;_';
    Je compile et J'installe mon composant
    Tout va bien
    A la conception d'une nouvelle form, l'occurence de TMaskFloat que j'y dépose a un mask qui correspond aux valeurs de mes 3 property
    Le pb est que si à la conception de cette nouvelle form je modifie une de ces 3 valeurs de mon MaskFloat dans l'inspecteur dobjet (ces 3 propriétés sont published), le mask garde les valeurs par défaut et les nouvelles valeurs saisies dans l'inspecteur d'objet ne sont pas prises en compte, sauf si je modifie aussi la propriété EditMask dans l'inspecteur d'objet... pas terrible
    Ouille ! j'espère que c'est clair

    En fait, je voudrais qu'au lancement de ma form, le TMaskFloat affiche un mask qui soit conforme aux valeurs des 3 property
    La seule soluce que j'ai trouvée est de (re)définir la propriété EditMask dans une procedure DoEnter dans le code du compo
    L'inconvénient est que le mask n'est pas modifié tant que le compo n'a pas reçu le focus

    Autre mystère : si j'enlève l'affectation des 3 propriétés dans la procedure constructor TMaskFloat.Create, le compo est inutilisable, la propriété EditMask reste vide, même si elle est définie dans la procédure DoEnter du compo

    C'est à s'arracher les cheveux et faut pas que je fasse ça, y m'en restera plus

    Si qqn a une piste, je suis preneur et bonne année à tou(te)s
    Choisir, c'est renoncer...

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Ben, ça me semble logique. Ce n'est pas parce que tu modifies une propriété que l'affectation faite dans ton constructeur se réexécute

    Ce que tu veux, c'est qu'à chaque fois qu'une de ces trois propriétés est modifiée, EditMask soit remis à jour. Pour ça, tu as besoin de méthodes d'accès en écriture pour tes propriétés.
    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
    type
      TMaskFloat = class(TMaskEdit)
      private
        FLgEntiere: Integer;
        procedure UpdateMask;
        procedure SetLgEntiere(Value: Integer);
      public
        property LgEntiere: Integer read FLgEntiere write SetLgEntiere default 2;
      end;
     
    constructor TMaskFloat.Create(AOwner: TComponent);
    begin
      inherited;
      LgEntiere := 2;
    end;
     
    procedure TMaskFloat.UpdateMask;
    begin
      if not (csReading in ComponentState) then
        EditMask := StringOfChar('9', LgEntiere) + '.' +
          StringOfChar('9', LgDecimale) + SymbolMonnaie + ';1;_';
    end;
     
    procedure TMaskFloat.SetLgEntiere(Value: Integer);
    begin
      FLgEntiere := Value;
      UpdateMask;
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Salut sjrd
    Citation Envoyé par sjrd
    Ben, ça me semble logique. Ce n'est pas parce que tu modifies une propriété que l'affectation faite dans ton constructeur se réexécute
    C'est exactement mon pb, intelligemment formulé en une seule phrase
    Ce qui ce conçoit bien s'énonce clairement
    Effectivement il suffisait d'inclure dans le compo une procédure d'actualisation du mask
    ça marche au poil
    L'année commence bien
    Merci sjrd
    Choisir, c'est renoncer...

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

Discussions similaires

  1. [Kylix] PB property published?
    Par le_barbu dans le forum EDI
    Réponses: 2
    Dernier message: 23/12/2003, 20h01
  2. Réponses: 2
    Dernier message: 29/10/2003, 23h47
  3. [struts] utiliser plusieurs fichiers properties
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 7
    Dernier message: 03/10/2003, 17h02
  4. Published property d'un compo conservées pendant l'exécution
    Par bobby-b dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/09/2003, 10h15
  5. [warning][properties]problème de police introuvable
    Par cyrdec dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/04/2003, 17h41

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