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

Langage Delphi Discussion :

Création dynamique PageControl TList


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut Création dynamique PageControl TList
    Hello

    J'ai créer un pagecontrol avec une TList qui m'a semblé plus simple que des tableaux. Cependant j'ai un prob pour la reprise des composants dans ma TList.

    Exemple :

    Création composant
    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
     
      tab := TsTabSheet.Create(Self);  // Création du TabSheet
      with tab do
      begin
        PageControl := sPageControl1; //Assignation du TabSheet au PageControl
        Caption := IntToStr(ListeTsStp.Count+1); 
      end;
        BtnShwEx := TsButton.Create(Self);
        with BtnShwEx do
        begin
          Parent := tab;
          Height := 25; Left := 56; Top := 112; Width := 105;
          Caption := '';
          OnClick := MaProcedure;
        end;
      end;
    ListeTsStp.add(tab);
    Maintenant j'aimerais utiliser ma procédure MaProcédure pour afficher un caption quelconques sur le bouton BtnShwEx.

    Exemple code avec tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.MaProcedure(Sender: TObject);
    begin
      ListeButton[sPageControl1.ActivePageIndex+1].Caption :=
              IntToStr(sPageControl1.ActivePageIndex+1);
     
     
    end;
    Merci de votre aide

    PS : si c'est possible de me mettre la modif et la suppression merci.

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    je comprends pas trop ce que tu veux faire ....
    Pas besoin d'utiliser un TList pour y stocker les Tab car elle existe deja dans le PageControl (propriete Pages il me semble).

    ensuite, dans l'evement lié au bouton "onClick" (c'est a dire MaProcedure) tu as un objet passé en parametre : Sender. Cet Objet est une reference sur l'objet qui a genere l'evenement donc le bouton sur lequel tu as cliqué.

    Il te suffit de lle caster en TButton (avec au prealable un test bein sur) et de le manipuler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Sender.InheritesFrom(TButton) then TButton(Sender).Caption := 'MonTexte';
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut
    Quand je démarre mon application j'ai un pagecontrol nu. J'ai un bouton à côté qui créé dynamiquement des tabsheet identiques en composants mais avec des valeurs différentes.

    Par exemple dans un tabsheet j'ai un bouton qui à une fonction MaProcédure. Et j'aimerais savoir comment retrouver (gérer) les composants à l'intérieur de mes tabsheet.

    Merci
    PS: J'avais utilisé des tableaux de composants mais ça devient une usine à gaz. Je trouvais l'utilisation de TList plus simple mais je vois pas comment retrouver mes composants dans la TList.

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    LEs tabSheet sont accessible depuis le PageControl.Pages
    Tout composant type conteneur, possedent une property Controls (et components) qui listent les controls (et components) dont l'objet est le "Owner" (ou le parent).

    Ensuite, il existe un autre composant que le PageControl qui dans ton cas serait mieux : Le TabControl.
    C'est un pageControl avec des tabs comme le page control mais qui ne possede qu'un seul conteneur pour tous les tabs.
    Du coup si on a que des fichies identiques diferencies pas leur contenus, il est preferable d'utiliser ce composant qui evite de multiplier inutilement les contols sur les fiches

    La difference entre les fiches (et donc la signification des valeurs) se fait en testant la valeur de la "tab" active .... (ie TabIndex je crois bien )
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut
    J'ai créé un TObjectList mais je ne vois pas comment accéder à certains sous objets.

    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
     
    GameList := TObjectList.Create(True);
     
     
     tab := TsTabSheet.Create(Self);  // Création du TabSheet
      with tab do
      begin
        PageControl := sPageControl1; //Assignation du TabSheet au PageControl
        Caption := 'Stopwatch'+IntToStr(ListeTsStp.Count+1); //Donne au nom    du TabSheet le nom du fichier chargé
      end;
     
        nom_file := TsLabel.Create(Self);
        with nom_file do
        begin
          Parent := tab;
          Name := 'nom_file'+IntToStr(ListeTsStp.Count+1);
          Height := 13; Left := 56; Top := 176; Width := 40;
          Caption := 'test';
        end;
     
        BtnShwEx := TsButton.Create(Self);
        with BtnShwEx do
        begin
          Parent := tab;
          Name := 'BtnShwEx'+IntToStr(ListeTsStp.Count+1);
          Height := 25; Left := 56; Top := 112; Width := 105;
          Caption := 'Show Data';
          OnClick := MaProcedure;
        end;
     
      GameList.Add(tab);
    Quand je clique sur mon bouton, j'aimerais connaitre le caption de mon label nom_file.

    Merci de votre aide

  6. #6
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For i := 0 to Self.TabSheet1.ControlCount-1 do
        ShowMEssage(Self.TabSheet1.Controls[i].Name)
    Ce code liste les controls du tabsheet (ie l'ensemble des composants dont le tabsheet est le parent).
    Au lieu de faire un showmessage suffit de faire un test sur le type et de la caster comme il se doit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Self.TabSheet1.controls[i].name = 'LeNomDeMonControlQueJeConait' then
      If Self.TabSheet1.controls[i].InhetitsForm(TLabel) Then  // Ou TButton, ou TEdit ...
        TLabel(Self.TabSheet1.Controls[i]).Caption := 'UneValeur';
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut
    Je comprends ton code, mais "Tabsheet1" je ne le connais pas.

    Je dois le retrouver avec mon TObjectlist non ?

  8. #8
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Vodkha Voir le message
    Je comprends ton code, mais "Tabsheet1" je ne le connais pas.

    Je dois le retrouver avec mon TObjectlist non ?

    For i := 0 to Self.PAgeControl1.Pages.count-1 do
    If Self.PageControl1.Pages[i].name = 'TabSheet1' Then ....
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut
    J'ai bien tenté ceci dans la procédure de mon bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For i := 0 to Self.PAgeControl1.ActivePage.ControlCount -1 do
        If Self.PageControl1.Pages[i].name = 'TabSheet1' Then

    Mais j'ai une violation.

    Je m'emmêle les pinceaux c'est de la folie.

    Dans l'event de ce bouton, je dois récupérer le tabsheet du bouton et par exemple un composant TLabel de ce même tabsheet.

    Ces trucs dynamiques..... aie aie

  10. #10
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    ce n'est pas activepage mais pages.count
    ActivePage pointe sur le tabsheet actuelement selectioné.
    Ce qui est d'ailleur pas mal non plus pour acceder directment au tabsheet "actif"

    Sinon je pense que ton projet est en effet assez compilqué.

    En fait, je pense a un truc : ce que tu devrais faire c'est te lancer dans la creation de composants.
    Soit tu cree une Frame pour y placer le contenu de tous tes controls, puis tu creer une isntance de cette frame par tabsheet
    De cette maniere tu peux centraliser les traitement sur la frame et non pour chaques tabsheet.
    Une alternative serait de passer par un derivé de TPanel .... (ou pourquoi pas de TTabSheet !!)

    Je te laisse aller voir de ce coté et si ca t'interesse, on pourra aller plus loin
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut
    Je commence à m'en sortir j'arrive à récupérer les éléments.

    Pour ce qui est de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Self.PAgeControl1.Pages.count-1 do
    Il me fait une erreur à Pages. Il me dit qu'il manque [ ].

    C'est pour cela que je suis passé par activepage. Mais là il me fait un débordement de compteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For i := 0 to Self.sPAgeControl1.ActivePage.ControlCount -1 do
        If Self.sPageControl1.Pages[i].name = 'tab'+nbr Then
           ShowMEssage(Self.sPageControl1.Pages[i].name);
    Tu vois qqch ?

  12. #12
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Oui surement une tite erreru de ma part
    Ca doit peut etre etre un Pagecontrol.count-1 ....
    Ya tellement d'objets avec des listes d'elements gerées de manieres differentes que souvent on se melange les pinceaux

    vu que je n'ai pas delphi ici ....
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut
    Ecoute je te remercie infiniment pour ton support 5 étoiles. Tout fonctionne à merveille. Thanks a lot

    Bon c'était pagecount :-)

  14. #14
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Vodkha Voir le message
    Bon c'était pagecount :-)
    Ouaip aussi
    chaque classe a sa propre philosophie
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2010, 12h44
  2. [D7] Création dynamique de Form
    Par jer64 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/08/2003, 12h20
  3. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07
  4. TWebBrowser et création dynamique
    Par BakaOnigiri dans le forum Web & réseau
    Réponses: 2
    Dernier message: 01/09/2002, 10h53
  5. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36

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