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 :

Anchors d'un Panel par code


Sujet :

C++Builder

  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut Anchors d'un Panel par code
    Bonjour,

    Je viens de créer dynamiquement des Panels et je souhaite maintenant éditer la propriété Anchors de chaqu'un d'entre eux (par ligne de code).

    J'ai ce code :
    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
    int i,Nbre_Nature_Coup,haut;
       AnsiString Libelle_Nature_Coup;
       TQuery *Nb_Nature_Coup = new TQuery(this);
       haut=FMatch_En_Cours->ClientHeight;
       Nb_Nature_Coup->DatabaseName="Tennis";
       Nb_Nature_Coup->SQL->Clear();
       Nb_Nature_Coup->SQL->Add("Select count(idT_Nature_Coup) AS Nbre_Nature_Coup From t_nature_coup;");
       Nb_Nature_Coup->Active=true;
       Nbre_Nature_Coup=Nb_Nature_Coup->FieldByName("Nbre_Nature_Coup")->AsInteger;
       TQuery *Libelle_Nature = new TQuery(this);
       Libelle_Nature->DatabaseName="Tennis";
       for (i=Nbre_Nature_Coup;i>=1;i--)
      {
         Libelle_Nature->SQL->Clear();
         Libelle_Nature->SQL->Add("Select S_Libelle From t_nature_coup where idT_Nature_Coup="+AnsiString(i)+";");
         Libelle_Nature->Active=true;
         Libelle_Nature_Coup=Libelle_Nature->FieldByName("S_Libelle")->AsString;
         haut=haut-50;
         TPanel *Panel = new TPanel(this);
         Panel->Parent = this;
         Panel->Left=100;
         Panel->Top=haut;
         Panel->Caption=Libelle_Nature_Coup;
         Panel->Name=Libelle_Nature_Coup;
         Panel->Anchors <<akBottom <<akLeft;
      }
    Ce code ne génère pas d'erreur cependant lorque je redimentionne ma fenêtre, mes panels restent ancrés par défaut en haut à gauche.
    Pouvez-vous m'éclaircir sur ce point et m'expliquer comment faire (dans le forum j'ai cherché mais j'ai rien trouvé )

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    bonjour,
    si tu donnes les coordonnées de top et left apres les anchors, et eventuellement que tu fini par un form->repaint(); ça change qqchose?

    ou en utilisant l'evenement OnResize peut etre

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Effectivement, ma ligne de code était mal placée mais un autre problème s'ajoute c'est celui des dimensions des Panels! Tous panels se redimensionnent mais l'effet qui en résulte n'est pas celui que je pensé lol.

    Le résultat que je souhaiterai obtenir c'est un Panel de la même dimension de départ mais qui se colle à la fenêtre en bas à gauche pour que je puisse utiliser tout l'espace restant

    Si vous voyez un peut l'idée ... et si vous avez une autre solution, faites moi en part

    EDIT :

    J'ai trouvé d'où vient le problème concernant la dimension des panels. C'est en faite que le Panel s'étire (Panel->Top ne change pas). Je vais encore chercher pour voir comment obtenir le résultat que je veux !

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    si tu veux que les proprietes height et width garde la meme valeur (si g bien compris ce que tu veux), tu les garde dans 2 variables et quand tu redimensionne ta fenetre et place le panel en bas gauche tu precise aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panel1->height=VariableHeight;
    panel1->width=VariableWidth;

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Je n'y arrive pas Le code que je vous ai donné plus haut est dans une procédure et donc la propriété de mes panels ne sont accessible que dans la procédure non? Ce que je ne comprends pas c'est que tous les autres propriétés (akRight,akLeft etc ... marche). Normalement, avec akBottom, c'est la position du Panel en Top qui change!? J'ai essayé de faire cela avec des boutons que j'ai créer via l'interface graphique (donc pas de création dynamique) et là, tout fonctionne ! Je ne comprends pas

    Merci

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    une fois créés les panels devraient etre accessibles meme en dehors de la procedure, a moins que je me trompe mais il me semble avoir fait qqchose de ressemblant en delphi
    par contre si les largeurs et hauteurs st stockées ds des variables, ces variables sont declarées dans le .h (du moins c'est ainsi que je fais dans mon application)

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Salut,
    N'est ce pas plutôt sur la Propriété Align du TPanel qu'il faut jouer...
    par exemple la passer a 'alClient' ou 'alCustom' ...ou autre en fonction de l'effet recherché...?

  8. #8
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    De plus, si tu veut réaccéder facilement a tes TPanels crées dynamiquement, tu devrais peut être essayer de 't'inspirer' d'un bout de code comme celui posté y a pas tres longtemps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int haut = 5;
    TPanel *pPanel[3];
    for (int i = 0; i < 3; i ++)
    {
    pPanel[i] = new TPanel(Form7);
    pPanel[i]->Parent = Form7;
    pPanel[i]->Top = haut;
    pPanel[i]->Left = 20;
    //etc,etc....
    haut = haut + pPanel[i]->Height;
    }
    @ +

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Je ne sais pas comment accéder aux propriétés des panels que je créer dynamiquement hors de la procédure! C'est peut être simple mais c'est la première fois que je fais des créations de composants en dynamique! (Je trouve cela assez drôle d'ailleurs lol). Enfin ... Quand on veut accéder aux propriétés d'un composant que l'on crée graphiquement, c'est simple, on fait NameDuComposant -> SaPropriété mais là je ne sais pas comment faire. J'aimerai bien que l'on m'explique si quelqu'un sait comment faire (et si il se sent capable de le faire lol).

    Merci de votre aide

  10. #10
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Si tu connais le Name des tes objects :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm::ButtonClick(TObject *Sender)
    {
    TPanel *APanel = dynamic_cast < TPanel* > (Form7->FindComponent("PanelEssai2"));
    APanel->Caption = "Essai réussi";
    }

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Pour la Propriété Align, non ce n'est pas ca, c'est bien sur la propriété Anchors . Ensuite, j'ai essayé ca :

    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
    void __fastcall TFMatch_En_Cours::CreerPalette()
    {
    int i,Nbre_Nature_Coup,bas;
       AnsiString Libelle_Nature_Coup;
       TQuery *Nb_Nature_Coup = new TQuery(this);
       bas=FMatch_En_Cours->ClientHeight;
       Nb_Nature_Coup->DatabaseName="Tennis";
       Nb_Nature_Coup->SQL->Clear();
       Nb_Nature_Coup->SQL->Add("Select count(idT_Nature_Coup) AS Nbre_Nature_Coup From t_nature_coup;");
       Nb_Nature_Coup->Active=true;
       Nbre_Nature_Coup=Nb_Nature_Coup->FieldByName("Nbre_Nature_Coup")->AsInteger;
       TQuery *Libelle_Nature = new TQuery(this);
       Libelle_Nature->DatabaseName="Tennis";
       for (i=Nbre_Nature_Coup;i>=1;i--)
      {
         Libelle_Nature->SQL->Clear();
         Libelle_Nature->SQL->Add("Select S_Libelle From t_nature_coup where idT_Nature_Coup="+AnsiString(i)+";");
         Libelle_Nature->Active=true;
         Libelle_Nature_Coup=Libelle_Nature->FieldByName("S_Libelle")->AsString;
         bas=bas-50;
         TPanel *Panel = new TPanel(this);
         Panel->Parent = this;
         //Panel->Anchors <<akLeft <<akBottom;
         Panel->Align << alClient;
         Panel->Left=100;
         Panel->Top=400;
         Panel->Width=100;
         Panel->Height=25;
         Panel->Name="P"+AnsiString(i);
         Panel->Caption=Libelle_Nature_Coup;
      }
    }
    pour voir ce que ca aller changer mais rien ne se passe

    Je vais utiliser le code que tu as posté pour la création de panels, mais il faudrait que tu m'expliques comment accéder à mes panels hors de ma procédure car c'est nouveau ce que je fais et j'ai pas trouvé mon bonheur dans la FAQ ni sur le Forum (à moins que je n'ai mal cherché).

    J'espère venir à bout de ce problème !
    Merci

  12. #12
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Si tu connais le Name des tes objects :
    Code :

    void __fastcall TForm::ButtonClick(TObject *Sender) { TPanel *APanel = dynamic_cast < TPanel* > (Form7->FindComponent("PanelEssai2")); APanel->Caption = "Essai réussi"; }
    Le *APanel correspond dans mon cas à *Panel car dans mon cas j'ai fais
    TPanel *Panel = new TPanel(this);

    Ensuite,Form7->FindComponent("PanelEssai2") , je peux remplacer Form7 par this comme je suis sur que le Panel se trouve sur la même Form que le Bouton?

    J'ai écris cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TFMatch_En_Cours::Button2Click(TObject *Sender)
    {
      TPanel *Panel = dynamic_cast < TPanel* > (this->FindComponent("P3"));
      Panel->Caption = "Essai réussi";
    }
    Si j'ai bien compris, ce bout de code va vérifier dans la Form dans laquelle je me trouve si il y a bien un composant qui existe avec comme Propriété Name P3. Si il l'a trouvé, alors On modifie le Caption du Panel trouvé par Essai Réussi.

    Merci pour ton aide Cantrelle

  13. #13
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Par contre pour le coup du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Panel->Name="P"+AnsiString(i);
    dans la création de tes objets, j'aurai plutôt écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Panel->Name = AnsiString("P") + i;
    ....m'enfin....ou bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Panel->Name = "P" + IntToStr(i);
    @ +

  14. #14
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Merci Cantrelle, ton code pour la recherche de composant marche à merveille .

    Me reste juste à régler quelques détails avec les anchors mais bon, ca reste secondaire!

    Je vais essayer d'avancer enfin un peu dans mon projet lol. Merci

  15. #15
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    ?
    (trop tard, lé parti...)

  16. #16
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Je suis revenu lol Désolé j'avais oublié ... lol

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

Discussions similaires

  1. Fermeture fenetre crée par code javascript
    Par Kerod dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/02/2010, 00h04
  2. Tri par Codes Postaux + Noms d'entreprises
    Par matperino dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/07/2005, 14h04
  3. Retirer une clé primaire par code
    Par Arrown dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2004, 15h15
  4. [VCL] Scroller un contrôle par code
    Par sbeu dans le forum Composants VCL
    Réponses: 3
    Dernier message: 31/03/2004, 10h39
  5. [VB6] Datagrid afficher ou cacher des colonnes par code
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/02/2003, 17h19

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