Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité
    Invité(e)

    Par défaut TCustomControl et Caption

    Bonjour,

    Le code :
    Code :
    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 :
    1
    2
     procedure mySetCaption(const Value: String);
     function  myGetCaption  : String;
    pour
    Code :
     property Caption : string read myGetCaption write mySetCaption;
    et
    Code :
     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 Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro Paul TOTH
    Freelance
    Inscrit en
    novembre 2002
    Messages
    5 323
    Détails du profil
    Informations personnelles :
    Nom : Homme Paul TOTH
    Âge : 44
    Localisation : Réunion

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 5 323
    Points : 14 989
    Points
    14 989

    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
    Produits : UPnP, RemoteOffice, FlashPascal
    Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%

  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 :
    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 Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro Paul TOTH
    Freelance
    Inscrit en
    novembre 2002
    Messages
    5 323
    Détails du profil
    Informations personnelles :
    Nom : Homme Paul TOTH
    Âge : 44
    Localisation : Réunion

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 5 323
    Points : 14 989
    Points
    14 989

    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 :
    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
    Produits : UPnP, RemoteOffice, FlashPascal
    Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •