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 :

Création de composant


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Création de composant
    Bonjour à tous,
    J’ai besoin de vos lumières. J’ai créé pas mal de composants VCL ou des classes dérivées pour un usage personnel. Cependant, je souhaite savoir comment faut-il faire pour convertir un groupe de composant VCL Delphi en un seul composant.
    C’est la structure du composant qui me pose problème.
    Ex : transformer plusieurs composants comme un Tpanel et des boutons en un seul composant. Connaissez-vous SVP un lien vers un tuto de bonne qualité ?
    Ci-joint le squelette d’un composant généré automatiquement par Delphi.
    Si le TPanel contient lui-même des composants que faut-il ajouter ou changer au code ?
    Merci pour vos réponses.

    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
    unit Panel1;
    interface
    uses
      System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls;
    type
      TMayPanel1 = class(TPanel)
      private
        { Déclarations privées }
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
      published
        { Déclarations publiées }
      end;
     
    procedure Register;
    implementation
    procedure Register;
    begin
      RegisterComponents('Samples', [TMayPanel1]);
    end;
    end.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 699
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 699
    Points : 13 138
    Points
    13 138
    Par défaut
    Rien de plus compliqué que de créer un composant dynamiquement sur une fiche

    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
    type
      TJunePanel1 = class(TPanel)
      private
        FEdit       :TEdit;
        function    GetEditText: TCaption;
        procedure   SetEditText(const Value: TCaption);
      protected
      public
        constructor Create(aOwner :TComponent); override;
        destructor  Destroy; override;
      published
        property    EditText :TCaption read GetEditText write SetEditText;
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('Samples', [TJunePanel1]);
    end;
    { TJunePanel1 }
     
    constructor TJunePanel1.Create(aOwner: TComponent);
    begin
      inherited;
      FEdit := TEdit.Create(Self);
      FEdit.Parent := Self;
    end;
     
    destructor TJunePanel1.Destroy;
    begin
      FEdit.Free;
      inherited;
    end;
     
    function TJunePanel1.GetEditText: TCaption;
    begin
      Result := FEdit.Text;
    end;
     
    procedure TJunePanel1.SetEditText(const Value: TCaption);
    begin
      FEdit.Text := Value;
    end;

  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 445
    Points
    28 445
    Par défaut
    personnellement je préfère utiliser un TFrame dans ce cas, ça évite de devoir réinstaller le composant quand on change de version de Delphi ou réinstalle la machine
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Moi j'utilisais CCPack parce qu'il y avait des bugs avec les TFrame (ne me demandez pas lesquels, j'ai oublié !).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Composant dérivé: composants TPanel contenant plusieurs tShapes
    Bonjour à tous et merci pour vos réponses.
    J’arrive à créer une classe dérivée de Tpanel avec un autre composant à l’intérieur. Cependant, il me manque l’accès aux propriétés du ou des composants contenus dans le TPanel.
    Je m’explique avec des images ça évite de longue causerie :
    J’ai créé mes propres boutons translucides à partir de TShape. Mon TShape accepte des images PNG et du texte.
    Ci-dessous un exemple.
    TPanel avec mes TPngshape
    Nom : boutons.jpg
Affichages : 192
Taille : 43,1 Ko
    DBNavigator créé avec un TPanel et TPngShape
    Nom : dbnavigator.jpg
Affichages : 186
Taille : 14,1 Ko

    Mon souhait c’est de créer un composant conteneur dérivé de TPanel ou autres et qui contient à son tour d’autres composants tShape.
    J’ai réussi à obtenir ça :
    Nom : TShape de base.jpg
Affichages : 195
Taille : 11,8 Ko
    Le TShape placé dans le TPanel ne réagit pas au clique et ne livre aucune propriété. J'aimerai par exemple avoir dans les propriétés du TPanel un bouton [+] pour ouvrir la liste des propriétés du ou des TShape.
    Je ne sais pas si d'autres solution existent?
    Ma question c’est comment rendre les propriétés des TShapes contenu dans mon TPanel accessibles afin de pouvoir les modifier (positionnement, couleur, etc…) ?
    Merci infiniment pour votre aide.

    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
    unit PngPage;
     
    interface
     
    uses
      Windows, System.SysUtils, System.Classes, Winapi.UxTheme, StdCtrls,ImgList, Vcl.Controls,Vcl.Forms, Vcl.ExtCtrls, Types, messages, Graphics, Math;
     
     
      type
      TPngBouton = class(TShape)
      private
        { Déclarations privées }
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
       Constructor Create(AOwner: TComponent); override;
       destructor Destroy; override;
      published
        { Déclarations publiées }
      end;
     
     
      type
      TPngPage = class(TPanel)
      private
        { Déclarations privées }
        FShape:TPngBouton;
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
       Constructor Create(AOwner: TComponent); override;
       destructor Destroy; override;
      published
        { Déclarations publiées }
      end;
     
    procedure Register;
     
    implementation
     
    begin
      RegisterComponents('Mes composants', [TPngPage, TPngBouton]);
    end;
     
    Constructor  TPngPage.Create(AOwner: TComponent);
    begin
     inherited Create(AOwner);
       FShape:= TPngBouton.Create(Self);
       FShape.Parent:=Self;
       FShape.Width:=96;
       FShape.Height:=96;
    end;
     
    Destructor  TPngPage.Destroy;
    begin
      FShape.Free;
      inherited Destroy;
    end;
     
     
    end.

  6. #6
    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 445
    Points
    28 445
    Par défaut
    ce n'est pas trivial je pense...

    déjà pour accéder au composant enfant il suffit de le publier...comme la propriété Font par exemple qui est un sous-composant publié.

    par contre, il faut ruser sur la gestion de flux puisque les composants sont créé automatiquement...DBNavigator est d'ailleurs une bonne base et il donne un code très intéressant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    procedure TDBNavigator.GetChildren(Proc: TGetChildProc; Root: TComponent);
    begin
    end;
    en surchargeant GetChildren par une procédure vierge il interdit à ses SpeedButton d'apparaître dans le DFM

    après si tu autorises ton Panel à avoir d'autre composants enfants ça complique un poil les choses
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. [Création de composant] Surcharge de OnMouseMove
    Par yoghisan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/02/2004, 22h34
  2. [Création de composant] Composant exclu de ComponentCount
    Par yoghisan dans le forum Composants VCL
    Réponses: 6
    Dernier message: 18/02/2004, 12h45
  3. [Création de composant] Focus
    Par Pedro dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/02/2004, 13h57
  4. Ordre de création de composant
    Par bobby-b dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/09/2003, 19h05
  5. [Kylix] Création de composant
    Par glub dans le forum EDI
    Réponses: 2
    Dernier message: 08/01/2003, 16h58

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