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 :

[DelphiXE] Création d'un composant multi conteneur


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut [DelphiXE] Création d'un composant multi conteneur
    Bonjour,

    Je m'attaque à la création d'un composant visuel qui possède 3 parties distinctes étant chacune un TPanel.

    Mon soucis est lors de l'utilisation en designtime du composant.
    Lorsque je pose un autres composants (genre un Tedit) dans une des 3 parties.
    Si je bascule en mode Text de la form ce composant n'apparait pas.

    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
     
    TNewPanel = class(TRzCustomPanel)
      private
          FPan_Top    : TRzPanel;
          FPan_Client : TRzPanel;
          FPan_Bottom : TRzPanel;
      public
        constructor Create( AOwner: TComponent ); override;
    end;
     
    constructor TNewPanel.Create(AOwner: TComponent);
    begin
      Inherited Create(AOwner);
     
      FPan_Top := TRzPanel.Create(Self);
      FPan_Top.Parent := Self;
      FPan_Top.Align := alTop;
      FPan_Top.Visible := True;
     
      FPan_Bottom := TRzPanel.Create(Self);
      FPan_Bottom.Parent := Self;
      FPan_Bottom.Align := alBottom;
      FPan_Bottom.Visible := True;
     
      FPan_Client := TRzPanel.Create(Self);
      FPan_Client.Parent := Self;
      FPan_Client.Align := alclient;
      FPan_Client.Visible := True;
    end;
    y a t il quelque chose à faire de spécial pour que les composants posées dans le panel (Ex : FPan_Top) soit bien enregistré ?

    Merci
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Ne manquerait-il pas un inherited dans le constructeur TGinPanel ?
    L'absence d'Owner expliquerait cela (à verifier).

    @+

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Je l'ai juste oublié quand j'ai mis le code sur le forum (Le code est plus complexe que çà ) et il est bien ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2003
    Messages : 51
    Par défaut
    Salut,

    Sur ce type de composant, je crois me souvenir qu'il faut déclarer les composants "internes" (en l'occurence tes panels) comme étant des sous-composants.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    constructor TNewPanel.Create(AOwner: TComponent);
    begin
      Inherited Create(AOwner);
     
      FPan_Top := TRzPanel.Create(Self);
      FPan_Top.Parent := Self;
      FPan_Top.Align := alTop;
      FPan_Top.Visible := True;
      FPan_Top.SetSubComponent(true)
    end;
    De cette manière, Delphi devrait réellement prendre ton sous-composant comme étant un conteneur (enfin bon en théorie )

    Bon courage

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Merci pour ta réponse mais malheureusement ca ne fonctionne pas
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    Ton TEdit apparait-il tout de même en dehors de ton TNewPanel ?
    Ou il est complètement absent de la DFM ?

    D'ailleurs, l'IDE considère que le futur parent c'est TNewPanel ou l'un des FPan_* ?

    Tu devrais intercepter CM_CONTROLCHANGE (provoqué à chaque InsertControl dans un TWinControl), tu devrais ainsi pouvoir choper qui est le parent (ou forcer le Panel en dessous du curseur, si tu peux le choper)

    En Delphi XE, tu pourrais utiliser un TGridPanel (ou TFlowPanel) pour faire cela !?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Création d'un composant de maniere dynamique
    Par loupdeau dans le forum MFC
    Réponses: 19
    Dernier message: 28/02/2005, 18h10
  2. Création dynamique de composants et destruction
    Par cpdump dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/01/2005, 18h57
  3. aide sur création d'un composant
    Par laetus dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/07/2004, 11h45
  4. Création d'un composant et couleurs
    Par gibet_b dans le forum Composants VCL
    Réponses: 4
    Dernier message: 06/07/2004, 14h44
  5. Création d'un Serveur Multi Client
    Par N*E*R*D dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 16/03/2004, 18h13

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