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 :

Duplication dynamique de tabsheet


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut Duplication dynamique de tabsheet
    Bonjour à tous

    Je suis en train de concevoir un petit soft ambitieux dans lequel chaque item géré s'appuie sur un ttabsheet.

    A cet effet, j'ai peuplé le ttabsheet avec d'autres composants, et je souhaite me servir de ce ttabsheet comme d'une matrice que je duplique sur une nouvelle page dès que j'en ai besoin.

    Quels sont l'art et la manière de faire ce genre de chose ?

    Merci de vos conseils.

  2. #2
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Bonjour,

    pourquoi ne pas utiliser un TFrame pour cela, je pense que ce serai plus adapté, quitte à l'afficher à l'intérieur d'un TTAbsheet.

    @++
    Dany

  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    merci pour ta réponse.

    je vais étudier...

    Cependant, si le tframe parait adapté, comment faire pour faire une création "par héritage" et profiter de la matrice ?

    Dois-je aller jusqu'à me créer un compo sous l'IDE que je pourrais ensuite créer à ma guise dans mon appli, comme on peut le faire avec les compos borland ?

  4. #4
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Bonjour,

    Je n'ai peut-être pas bien compris la question. Le TFrame permet de regrouper un certains nombre de composants, c'est un peut un TForm, mais en plus léger. Ensuite le TFrame que tu as créé peut-être posé dans un TForm, un TPanel ou n'importe quel conteneur (il faut prendre le composant Cadre ou frames suivant la version de Delphi que tu as dans l'onglet Standard). Le composant que tu as alors posé peux être modifié localement, tu peux changer la position d'origine de chaque composant posé dessus, ajouter ou enlever des composants, ajouter ou enlever des évennements, sans pour autant impacter le TFrame et les instances posées sur d'autres formulaires.
    Tu peux aussi créer dynamiquement ce TFrame, comme n'importe quel autre composant.

    @++
    Dany

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Dany a raison, dans ce cas le TFrame est parfaitement adapté à ce type de situation.

    Pour aller plus loin et t'en convaincre, il te suffit de placer un TFrame dans un nouveau projet. De l'agrementer des composants que tu désires utiliser dans tes tabsheet.
    D'y enregistrer la classe dans la section initialization

    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
    unit Unit2;
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TAncestorFrame = class(TFrame)
        Button1: TButton;
      private
        { Déclarations privées }
      protected
        procedure monAction;virtual;
      public
        { Déclarations publiques }
      end;
     
    implementation
    {$R *.dfm}
     
    { TAncestorFrame }
    procedure TAncestorFrame.monAction;
    begin
    end;
     
    initialization
      RegisterClass(TAncestorFrame);
    end.
    De créer ensuite la référence de classe suivante :

    TFrameClass = class of TFrame;

    Dès lors tu pourras appeler simplement et dynamiquement la frame et la placer dans le tabsheet de la façon suivante :

    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
    uses Unit2;
     
    type
      TFrameClass = class of TFrame;
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      AFrame: TFrame;
    begin
      if Assigned(TabSheet1.FindComponent('maFrame')) then Exit;
      AFrame := TFrameClass(findClass('TAncestorFrame')).Create(TabSheet1);
      AFrame.Name := 'maFrame';
      AFrame.Parent := TabSheet1;
      AFrame.Align := alClient;
    end;
    Par ailleurs, tu pourras également dériver ta frame initiale et ainsi la doter de nouveau composants et ou de nouveau traitements.

    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
    unit Unit3;
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Unit2, StdCtrls;
     
    type
      TAncestorFrame1 = class(TAncestorFrame)
        Edit1: TEdit;
      private
        { Déclarations privées }
      protected
        procedure monAction;override;
      public
        { Déclarations publiques }
      end;
     
    var
      AncestorFrame1: TAncestorFrame1;
     
    implementation
    {$R *.dfm}
     
    { TAncestorFrame1 }
    procedure TAncestorFrame1.monAction;
    begin
      inherited;
    end;
     
    initialization
      RegisterClass(TAncestorFrame1);
    end.
    Toujours pareil, un petit RegisterClass dans la section initialization.
    Puis l'appel de cette frame dérivée de la façon suivante grâce à la référence de classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if Assigned(TabSheet1.FindComponent('maFrame')) then Exit;
      AFrame := TFrameClass(findClass('TAncestorFrame1')).Create(TabSheet1);
    En déclarant bien entendu unit3 dans les uses.

    Tout ceci dans le cas où tu désires créer dynamiquement ces TFrame.

    Pour les placer directement sur les TabSheet en design-time, tu utilises le composant Frames disponible dans la palette d'outils.

    Dernière solution tu peux directement ajouter ton TFrame ainsi que ses dérivés dans la palette d'outils et ainsi ils seront disponibles comme tous les composants.

  6. #6
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    Ouep, ouep...

    je commence à y voir plus clair

    Question supplémentaire : comment ça se passe pour les procédures liées aux événements ?
    Ainsi, soit un bouton contenu dans un TFrame, où doit se faire le "cablage" du OnClick ?
    1/ dans le compo MonTFrame ? (pour autant que se soit possible) mais alors, comment distinguer les différents boutons des différents TFrames ?

    2/ lors de la création du tabsheet par "import" du TFrame via la pré-déclaration d'une procédure banalisée OnClick ? Mais dans ce cas, comment gérer le Sender? (peut-on avoir la main sur le name du bouton ?)

    3/ ailleurs / autrement ?

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

Discussions similaires

  1. Duplication Dynamique De Vignette avec XML
    Par _onWakeUp dans le forum Flash
    Réponses: 2
    Dernier message: 22/11/2007, 14h52
  2. duplication dynamique d'un DB sur un autre ordinateur
    Par eponette dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/11/2006, 12h09
  3. Réponses: 5
    Dernier message: 20/07/2006, 16h50
  4. Pb de creation et destruction de tabsheet dynamique
    Par Unformatic dans le forum Composants VCL
    Réponses: 4
    Dernier message: 28/04/2006, 14h09
  5. [TPageControl] Ajouter un tabsheet dynamiquement
    Par qi130 dans le forum Langage
    Réponses: 6
    Dernier message: 29/09/2005, 20h57

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