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

C++Builder Discussion :

Déplacement Modification et suppression d`un TTabSheet


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Déplacement Modification et suppression d`un TTabSheet
    Bonjour à tous

    Dans mon application, les utilisateurs doivent sélectionner une portion de courbe. Chaque portion
    donne lieu a la création d'un onglet.

    Ce que j'aimerais pouvoir faire, c'est :
    - Changer l'ordre des onglets car on ne sélectionne pas forcément les portions dans l'odre.
    - Supprimer un onglet lorsque l'utilisateur supprime une portion
    - Modifier un onglet lorsque l'utilisateur modifie une portion

    Avez vous des pistes ?

    Merci d'avance de votre aide.

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut kurul1,

    Alors, pour tes question, dans l'ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //défini l'index de l'onglet Index en NewIndex
    PageControl1->Pages[Index]->PageIndex = NewIndex;
     
    //supprime l'onglet Index, mais attention, pas de sucide de l'onglet
    delete PageControl1->Pages[Index];
    Sinon, que veux-tu modifier sur l'onglet ?

  3. #3
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Dans mon onglet j'ai différents affichages :

    Deux graphiques et un Panel avec des informations. Voilà ce que je veux modifier.

    Je veux égalements modifier le titre de l'onglet car dans le titre de l'onglet, il y a les bornes inférieur et supérieur de ma portion. Pour le titre il n'y a pas de problème pour modifier, c'est simplement le contenu qui me pose problème.


    Pour la modification de l'odre, c'est en fait une inversion d'onglet que je voudrais faire.

    donc si je suis ta méthode, ca devrais donné ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       // Je mémorise l'index du premier Onglet
       int PageIndex1 = PageControl->Pages[Index1]->PageIndex;
     
       // Je mémorise l'index du deuxième Onglet
       int PageIndex2 = PageControl->Pages[Index2]->PageIndex;
     
       // Je positionne le deuxième onglet à la place du premier
       PageControl->Pages[Index2]->PageIndex = PageIndex1;
     
       // Je positionne le premier onglet à la place du deuxième
       PageControl->Pages[Index1]->PageIndex = PageIndex2;

  4. #4
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    En fait, le truc c'est qu'il positionne tout seul la liste des onglet. Je m'explique si tu dis au dernier onglet de passer en premier, juste l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PageControl->Pages[Dernier]->PageIndex = 1;
    suffit, il repositionne automatiquement le 1er en 2ème, le 2ème en 3ème ...

    Sinon, pour modifier tes composants, ils sont créés dynamiquement ? Tes onglets aussi ?

  5. #5
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    mes onglets sont créé dynamiquement a chaque fois que je sélectionne une portion.

    je crée l'onglet et tous les composants qu'il comporte.

    Etant donné que les portions ne sont pas créée forcément dans le bon ordre, je trie donc mes portions par ordre croissants dans la liste qui me sert a les mémoriser.

    C'est pourquoi je désire faire des inversions d'onglets. puisque l'indice de la portion dans la liste doit correspondre a l'indice de l'onglet.

    Cette inversion n'est pas forcément entre le premier et le dernier onglet, cela peux se faire entre deux onglets du milieu.

    Concernant la positionnement du dernier en premier, tu fais une petite erreur car l'indice du premier c'est 0 et non 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        PageControl->Pages[Dernier]->PageIndex = 0;

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    pardon
    Mais le principe reste le même, et cela fonctionne.
    Je ne sais pas comment tu as conçu tes onglets, personnellement j'ai été aidé par plusieurs personnes sur ce poste :
    http://www.developpez.net/forums/sho...d.php?t=125441
    J'ai retenu la soution de Henderson qui consiste à créer une class "Onglet" de ce fait, quand je créer un onglet, je sais ce qu'il y a dedans.
    Il me suffit de créer un pointeur de la class créé pointant sur l'onglet que je souhaite modifier et j'ai accès a ses composants.
    Henderson explique assez bien la méthode. Je pense que cela pourra t'aider.

  7. #7
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Je vais regarder ca merci de ton aide

    En fait je me mélange les pinceau avec les indices

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       PageControl->Pages[Index]->PageControl = newIndex;
    Index correspond a quoi ?
    PageControl également ?

    je suis un peu perdu là.

  8. #8
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Personne ne peut m'éclairer concernant les indices

    Sinon bandit boy, j'essaye de créé une classe comme dans la méthode de Henderson mais j'ai une erreur a la compilation. Je dois oublié d'inclure un paquet mais je ne sais pas lequel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <vcl.h>
     
    class TOnglet : public TTabSheet
    {
       ...
    };
    Cela me met une erreur sur la ligne de déclaration de la classe me mettant :

    Nom de type attendu

  9. #9
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Pour moi l'index, c'est l'index de l'onglet , le numéro interne permettant de les classes: le 1er est à gauche, le dernier à droite lorsqu'ils sont visible.
    PageControl, c'est le composant comprenant les TTabsheets (les onglets)

    Pour ton problèmes, je ne sais pas trop, voilà mon code dans le .h
    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
     
     
    //------------------------------
    class TForm1 : public TForm
    {
    __published:	// IDE-managed Components
            TLabel *Label1;
            ... 
    private:	// User declarations
    public:	// User declarations
            __fastcall TForm1(TComponent* Owner);
    };
    //--------------------------------
    class jPage1 : public TTabSheet
    {
    public :
    //Les pointeurs sur les objets à créer ici
    TEdit *Edit1;
    ...
    //fonctions
        __fastcall jPage1(TComponent *Owner, AnsiString N);
        __fastcall ~jPage1();
    private:	// Evennements
        void __fastcall Button1Click(TObject *Sender);
        ...
    };
    extern PACKAGE TForm1 *Form1;
        ...
    Quand j'ai ajouté ce code, je n'ai pas eu d'erreur venant d'un manque de paquet. Je ne sais pas trop d'ou peut venir ton problème. Si Henderson passe dans le coin, peut être qu'un professionnel pourra répondre à tes attentes.

    Sinon, donne un code plus complet, peut être que je serais inspiré.

  10. #10
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    En fait, moi j'ai créé ma classe dans des fichiers séparés

    Onglet.h
    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
     
    #include <vcl.h>
     
    class TOnglet : public TTabSheet
    {
            public:
                    // Panel pour le centre de pression
                    TPanel * PanelCentrePression;
     
                    // Image pour le graph du centre de pression
                    TImage *ImageCentrePression;
     
                    // Panel pour les composantes
                    TPanel *PanelComposantes;
     
                    // Image pour le graph des composantes
                    TImage *ImageComposantes;
     
                    // Panel pour les calculs
                    TPanel *PanelCalcul;
     
                    // Label pour l'affichages des titres
                    TLabel *LabelTitres;
     
                    // Label pour l'affichages des calculs
                    TLabel *LabelCalcul;
     
     
                    // Constructeur
                    __fastcall TOnglet(TComponent *Owner, AnsiString C);
     
                    // Destructeur
                    __fastcall ~TOnglet();
    };
    Onglet.cpp
    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
     
    #include "Onglet.h"
     
    // Constructeur
    __fastcall TOnglet::TOnglet(TComponent *Owner, AnsiString C)
    {
            // On affecte le PageControl de l'onglet
            if(Owner->ClassNameIs("TPageControl"))
            {
                    PageControl =  (TPageControl*)Owner;
            }
     
            // On affecte le titre de l'onglet
            Caption = C;
    }
     
    // Destructeur
    __fastcall TOngle::t~TOnglet()
    {
     
    }
    Et j'ai donc l'erreur Nom de type attentu sur l'accolade d'ouverture de la classe

  11. #11
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    J'ai inclu ma classe directement dans le fichier de la form de m'on application et là, je n'ai plus d'erreur.

  12. #12
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Créé une application vide, regarde les .h inclus. Ajoute juste un PageControl et retourne dans ton .h, tu devrais voir apparaître une autre librairie (il les ajoute tout seul). C'est peut être celle-ci qu'il te manque.
    Ce serait la librairie liée au composant te permettant de lui faire reconnaitre le TTabsheet

  13. #13
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Cela ne rajoute rien les include ne change pas.

  14. #14
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    J'ai trouver c'est #include <ComCtrls.hpp>

  15. #15
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Et avec cette modification, est ce que cela fonctionne?

  16. #16
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Avec cette modification, ca fonctionne nikel.

    Par contre je n'arrive toujours pas à inverser deux onglets, cela ne marche pas.

  17. #17
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Re,
    Avec ce code, je déplace l'onglet courant vers la gauche, en gros je l'inverse avec son voisin de gauche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    PageControl1->Pages[PageControl1->ActivePageIndex]->PageIndex = PageControl1->Pages[PageControl1->ActivePageIndex]->PageIndex-1;
    Ca devrait pouvoir t'aider

  18. #18
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Voilà ma fonction pour inverser les onglets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Méthode qui permet d'inverser deux onglets
    void TPrincipalForm::InverserOnglet(int Index1, int Index2)
    {
            // Je positionne le deuxième onglet à la place du premier
            PageControl->Pages[Index2]->PageIndex = Index1;
     
            // Je positionne le premier onglet à la place du deuxième
            PageControl->Pages[Index1 + 1]->PageIndex = Index2;
    }
    Elle ne marche pas

    Pour le deuxième je met Index1 + 1 car étant donné que je place le deuxième onglet a l'indice du premier, le premier se retrouve décalé de 1 vers la droite.

  19. #19
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Positionne simplement un seul onglet ou tu le souhaites. Si tu places l'onglet 5 en 2, le 2ème deviendra tout seul 3, le 3ème 4, et ainsi de suite.
    Ne fais qu'une commande, as tu testé la ligne que je t'ai donné?

  20. #20
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    oui mais cela ne fait pas ce que je veux

    Moi ce qui m'intéresse c'est que l'onglet 2 devienne le 5 et que le 5 devienne le 2.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. modifs et suppressions à partir d'un GridView
    Par Mohammmed dans le forum Visual Studio
    Réponses: 1
    Dernier message: 30/05/2007, 12h10
  2. Création, modification et suppression de contacts Outlook
    Par bulldozer27350 dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 12/04/2007, 16h19
  3. [C#] modification et suppression depuis un DataGrid
    Par midou25 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/11/2006, 09h10
  4. Suivre les modifications et suppression
    Par manudja dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/08/2005, 07h42

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