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 :

PageControl ActiveIndex inopérant


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut PageControl ActiveIndex inopérant
    Bonjour à tous

    Je me bats depuis 3 jours avec un PageControl.ActiveIndex qui refuse de fonctionner. Voici l'environnement

    Une forme A appelle une forme B
    La forme A peut appeler la forme B de 2 manières :
    soit pour ajouter des enregistrements dans une table
    soit pour modifier un enregistrement de cette table

    Il y a donc deux boutons : Ajout et Modification

    La forme B contient un PageControl avec 3 Tabsheet
    A chaque appel de la forme B, je force son Pagecontrol1.Activeindex à 0

    J'appelle la forme B par le bouton Ajout --> j'arrive sur le TabSheet 0
    Je ferme la forme B et reviens sur A
    J'appelle la forme B par le bouton Modifier --> j'arrive sur le TabSheet 0
    Je ferme la forme B et reviens sur A

    J'appelle la forme B Par le bouton Ajout, et lorsque je suis sur le Tabsheet 0, je clique sur le Tabsheet 1
    Je ferme la forme B et reviens sur A
    J'appelle la forme B par le bouton Modifier --> j'arrive sur le TabSheet 3

    J'ai vérifié que, à chaque appel de la forme B je passais bien par fromCreate et c'est dans le formCreate que je force PageControl1.activeindex = 0

    J'ai mis deux TEdit qui contiennent l'un l'index de page dans le FormCreate et l'autre l'index de page dans le FormShow. Tous deux affichent 0, même lorsque c'est le Tabsheet 3 qui est visible.

    Si je mets un point d'arrêt dans le FormCreate, j'arrive toujours sur le Tabsheet 0 lorsque j'appelle la forme B par le bouton Modifier. Dès que j'enlève le point d'arrêt, c'est le TabSheet trois qui s'affiche !

    L'inverse est aussi vrai. Si je commence par appeler la forme B par le bouton Modifier, que je clique sur le Tabshheet 3 et que j'en sors, je vais arriver sur le tabsheet 3 lors de l'appel par le bouton Ajouter.

    Avec toujours les deux Tedit contenant la valeur zéro

    et cela commence à faire mal au front !

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    En C++Builder, j'ai eu un phénomène similaire sur les valeurs surchargées entre des TForm héritées
    Je n'aime pas spécialement l'héritage de DFM mais où je travaille, je dois maintenir des TFrame et héritage de TForm à foison.

    Le constructeur du TForm fourni les valeurs d'origine de la TFrame puis elles étaient modifiées (comme si le chargement de la DFM héritée était fait après, j'avoue que j'ignore totalement comment fonctionne les DFM héritées, je vois pour la DFM première mais pas pour les inherited)

    J'ai des soucis sur des Enabled différent mais aussi sur un TPageControl, la structure d'une série de fenêtre similaire est TForm > TFrame > TPageControl > TTabSheet > TFrame
    J'ai eu des soucis, si je changerais dans la TForm l'onglet actif fourni par la TFrame, comme je remettais la bonne valeur, c'est comme si le Setter détectait que la valeur était la même, il ne l'a réaffecte pas, et c'était la foire, du coup, j'y touche le moins possible

    En C++, comme le constructeur doit être explicite pour passer AOwner, j'utilise plus du tout OnCreate

    Normalement le FormCreate se produit bien après le constructeur (voir si OldCreateOrder est bien à false), il faudrait vérifier si c'est durant le Loaded ou durant le AfterConstruction

    Avant en D3, on bidouillait avec le FormActivate pour que les valeurs en cours soient bien les bonnes issues de la DFM

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut JP.NUAGE,

    Je suppose que tu n'as aucun évement dans les Ttabsheets ainsi que dans ton TPageControl qui initialiserait quelque chose...

    Sinon as-tu essayé dans ton Create de passer par PageControl1.Pages[x].Show; plutot que activepageindex ?

    bye

  4. #4
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    mmm ... étrange, j'ai ce genre de chose dans quelques outils et pas de problème particulier pour la sélection de la page.


    par contre j'appel les form filles avec une fonction Execute (comme les TDialog) qui contient tout la chaine d'instruction pour afficher la fiche :

    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
    function TDlgFrmIgnition.Execute: boolean;
    with TIniFile.Create(changeFileExt(ParamStr(0), '.ini')) do
      try
        Tools.PrintServer := readString('CONFIG', 'printserver', 'http://***/cgi-bin/eplprint.cgi?');
        Tools.PlaceFile   := readString('CONFIG', 'placefile', 'http://***/vt/modules/places/upload/PLACE.csv');
      finally
        Free;
      end;
     
      fNextPlace := DEFAULT_PLACE;
      PageControl.ActivePageIndex := 0;
     
      CSVSearch             := TCSVSearch.Create(LstSearchResults.Items, #0, ';');
      CSVScans              := TCSVScans.Create(LstScansResults.Items, #0, ';');
      CSVMoves              := TCSVMoves.Create(LstMovesResults.Items, #0, ';');
      CSVBackorders         := TCSVBackorders.Create(LstBackorders.Items, #0, ';');
      CSVUnlockedBackorders := TCSVBackorders.Create(LstUnlockedBackorders.Items, #0, ';');
    et dans une autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function TDlgCatSelector.Execute: boolean;
    begin
      PCCatalog.ActivePageIndex := 0;
      BringToFront;
      result := ShowModal = mrOk;
      getAllIds;
    end;

  5. #5
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Pour répondre à BuzzLeclair : je viens de tester ta proposition et cela ne change rien. Et non, je n'ai pas d'évènement, ni dans PageControl ni dans TabSheet. En revanche, l'active control de la forme B est DANS le Tabsheet 0....et je rajoute même un SetFocus. Pour rester poli, il n'en a rien à f...... Et il me demande gentiment d'aller là haut siffler sur la colline avec un petit bouquet d'églantine (Joe Dassin)

    Et mon code ressemble furieusement au deuxième exemple de Dr.Who

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Un bout de code de l'appel de la FormB serait un plus non négligeable, cela pourrait donner des pistes pour voir d'où vient le problème.

    A tout hasard, ta FormB est-elle dans les fiches disponibles ou créées automatiquement (dans les options du projet/fiches) ?

  7. #7
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Comment ferme tu form B ?

    avec hidde ou close ?

  8. #8
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Alors, comme tous les essais étaient infructueux, j'ai pris le marteau pilon !

    J'ai sorti la forme B du projet, renommé tous les modules B en B1.
    J'ai créé une nouvelle forme B dans laquelle j'ai recopié, à partir de B1, tous les composants, puis tout le code, sans modifier quoi que ce soit..... et tout fonctionne parfaitement !

    Mystère insondable de l'informatique (vas comprendre Charles !)

    Et je remercie tous ceux qui ont bien voulu se pencher sur ce cas !

  9. #9
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par JP.NUAGE Voir le message
    Alors, comme tous les essais étaient infructueux, j'ai pris le marteau pilon !

    J'ai sorti la forme B du projet, renommé tous les modules B en B1.
    J'ai créé une nouvelle forme B dans laquelle j'ai recopié, à partir de B1, tous les composants, puis tout le code, sans modifier quoi que ce soit..... et tout fonctionne parfaitement !

    Mystère insondable de l'informatique (vas comprendre Charles !)

    Et je remercie tous ceux qui ont bien voulu se pencher sur ce cas !
    Donc problème de DFM...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/01/2014, 09h22
  2. Erreur à l'assignation du PageControl sur une tab
    Par MarcP dans le forum Composants VCL
    Réponses: 1
    Dernier message: 08/08/2005, 22h49
  3. Caption d'un TBitBtn inopérant
    Par OutOfRange dans le forum Composants VCL
    Réponses: 1
    Dernier message: 30/07/2005, 10h59
  4. [IHM] utilisation des PageControl
    Par Overflow64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/07/2005, 10h26
  5. PageControl -> Une simple question
    Par Invité dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/05/2004, 09h19

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