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

Lazarus Pascal Discussion :

TCustomControl et Caption


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut TCustomControl et Caption
    Bonjour,

    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
    unit myBitBtn;
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
      StdCtrls, {Tlabel}
      math {max}
      ;
     
    type
      TmyBitBtn = class(TCustomControl)
      private
        { Private declarations }
        FCaption  : String;      
     protected
        { Protected declarations }
          procedure SetCaption(const Value: String);
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
     
      published
        { Published declarations }
        property Caption  : String read FCaption write SetCaption;
      end;
     
    implementation 
     
    constructor TmyBitBtn.Create(AOwner: TComponent);
    begin
        Inherited Create(AOwner);
        FCaption := Name;
        Showmessage(Name)
    end;          
     
    procedure TmyBitBtn.SetCaption(const Value : String);
    begin
     if value <> FCaption then begin
       FCaption := Value;
     end;
    end;
    L'objectif : Que le FCaption soit initialisé avec le nom du composant (Self.Name donc par exemple myBitBtn1) lorsque que l'on pose le composant sélectionné sur la Form.

    Le problème : Ligne 38. Showmessage(name)-> ''. A ce stade le nom du composant quand on le place sur la Form n'est pas affecté. Il faut attendre le retour de la "TForm".

    Comment faire ? Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Hum... Je n'avais pas vu que l'on disposait par défaut d'une property Caption.

    En combinant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     procedure mySetCaption(const Value: String);
     function  myGetCaption  : String;
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     property Caption : string read myGetCaption write mySetCaption;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     procedure CreateWnd;  override; pour le premier "affichage"
    cela fonctionne.
    A+
    Dernière modification par Alcatîz ; 28/11/2012 à 20h30. Motif: balises code (bouton #)

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    j'imagine que, comme sous Delphi, il suffit d'ajouter csSetCaption à ControlStyle dans le constructor.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je dois être un peu "neuneu" mais je n'y arrive pas avec cette méthode : je dois mal l'utiliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    type
      TmyBitBtn = class(TCustomControl)  
      [...]
     
    constructor TmyBitBtn.Create(AOwner: TComponent);
    begin
        Inherited Create(AOwner);
        ControlStyle:= ControlStyle + [csSetCaption];
        Showmessage(Caption);
    end;
    Le Showmessage renvoie -> '' lorsque je dépose un TmyBitBtn sur la Form.

    Et puis autre question : lors de l'affectation du name par défaut dans le Self.Caption, comment faire apparaître ce nom dans le Label inclus dans composant que l'on vient de déposer sur la Form?

    Merci. A+
    Dernière modification par Invité ; 28/11/2012 à 10h57.

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    en réalité (sous Delphi tout au moins) il n'y a rien à faire, sauf à publier la propriété Caption héritée, csSetCaption est déjà défini.

    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
     
    unit myBitBtn;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Controls;
     
    type
      TmyBitBtn = class(TCustomControl)
      private
        { Déclarations privées }
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
      published
        { Déclarations publiées }
        property Caption;
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('Exemples', [TmyBitBtn]);
    end;
     
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Evènement OnMouseWheel pour un TCustomControl
    Par blan dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/11/2004, 14h37
  2. TMenuItem caption
    Par portu dans le forum Composants VCL
    Réponses: 3
    Dernier message: 12/07/2004, 10h11
  3. Réponses: 3
    Dernier message: 23/06/2004, 11h15
  4. TCustomControl et évènements KV_LEFT et VK_RIGHT
    Par bjl dans le forum Composants VCL
    Réponses: 7
    Dernier message: 20/03/2004, 16h11
  5. label à caption défilante
    Par ulysse66x dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/06/2003, 21h01

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