PageControl - TabSheet

Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
- - Dernière réponse : cs_servicepack
Messages postés
3
Date d'inscription
dimanche 9 juillet 2006
Statut
Membre
Dernière intervention
4 février 2012
- 4 févr. 2012 à 13:38
Bonjour

J'ai un pageControl dans un Tframe. Le Tframe n'est pas encore visible et je veux masquer certain Tabsheet.
J'obtient un message d'erreur avec TabVisible et aucun message avec Enabled(voir code ci-dessous
)
// Désactivation des onglets au départ
  showmessage(inttostr(PageControl1.PageCount)); // --> pour débug, affiche 6

for i:=1 to PageControl1.PageCount - 1 do // la page 0 reste active
     PageControl1.Pages[i].TabVisible := false;  --> ERREUR : Indice de liste hors limite(6)
     //PageControl1.Pages[i].Enabled := false; // Par contre ceci fonctionne


Si je place le code dans l'evenement onClick d'un bouton, a l'éxuction, aucun probleme les onglets sont masqués.
Je pense mon problème est lié au fait que je le fait dans une phase d'initialisation de mon Tframe, pas encore visible. C'est curieux !

Je sais pas si il y a une solution ? Sinon je me contenterai de enabled.
Merci pour votre retour.


Jean.
Afficher la suite 

12 réponses

Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
0
Merci
bonjour,

procedure TForm4.FormShow(Sender: TObject);
var
  I: Integer;
begin
  Caption := IntToStr(PageControl1.PageCount);
  for I := 0 to PageControl1.PageCount-1 do
    PageControl1.Pages[i].TabVisible := False;
end;


Luc.
Commenter la réponse de beckerich
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
0
Merci
re :

je retire mon post, pas bien lu la question.
Désolé,
luc.
Commenter la réponse de beckerich
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
Salut,

Essaie :

for i := PageControl1.PageCount-1 downto 1 do PageControl1.Pages[i].TabVisible := false;
Commenter la réponse de Caribensila
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
0
Merci
"Je pense mon problème est lié au fait que je le fait dans une phase d'initialisation de mon Tframe"
Je pense aussi. Exécute le code après avoir chargé le TFrame sur ta form.
A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
0
Merci
Bonjour,

Caribensila, même message d'erreur.

Mauricio, oui mais cela me gène un peu. Je me sert de frame pour faire une aplli multi-écran. Les Frames sont crées dynamiquements et initialisées. Ensuite une procedure de la form principale rend visible les frames qui sont non réduitent.
Quel évenement est déclenché lorsque je fais MaFrame..Visible := true ? Je pourrait alors mettre mon code dans cet événement.

Merci à tous pour vos réponses.

A+
Jean
Commenter la réponse de jderf
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
0
Merci
Oups "non réduites"
Commenter la réponse de jderf
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
Pour TForm, c'est :

1.OnCreate
2.OnShow
3.OnActivate
4.OnPaint

Pour TFrame, ça doit être la même chose.


Que ton code ne fonctionne pas, ça ne m'étonne qu'à moitié (on a toujours des surprises avec TFrame...). Mais ce qui me paraît bizarre, c'est le contenu du message d'erreur : "Indice de liste hors limite(6)"...

AIDE DELPHI :
« La méthode Show affecte la valeur true à la propriété Visible du contrôle et vérifie que le parent du contrôle est également visible. »


Moi, au lieu de jouer sur la propriété Visible, j'essaierais plutôt de mettre Width à zéro, par exemple...

Une autre solution, souvent finalement adoptée par ceux qui ont essayé TFrame, est d'utiliser des TForm à la place... C'est beaucoup plus souple et on se trouve moins en Terra incognita.
Surtout que tu les crées dynamiquement et que tu n'utilises pas l'avantage de la réutilisation des TFrame.
Commenter la réponse de Caribensila
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
0
Merci
Le seul avantage des TFrames est qu' il peuvent être crées dans un contenant comme une TForm, un TPanel alors que les TForms non ...
Dans ton cas, comme le dit Caribensila, il n' y a aucun intérêt.
A+


Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
...Il y a aussi la possibilité de créer de simples TPannels "Dockables" :

MyPanel.DragKind := dkDock;
MyPanel.DragMode := dmAutomatic;
Commenter la réponse de Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
...Pour avoir une idée des Panels "Dockables", voir l'IDE de D7.
L'Inspecteur d'Objets en est un, par exemple...
Commenter la réponse de Caribensila
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
0
Merci
Bonjour,

J'ai pas le temps en ce moment de chercher d'ou vient mon problème, mais je ne laisse pas tomber.

Pour l'utilisation des Tframe, je trouve cela très pratique. J'ai quatre grands types de Tframe et l'utilisateur peu créer un nombre illimité d'écran de chaqu'un des types.
L'avantage est que la "mécanique" du Tframe est complétement indépendante de la form principale, c'est pour moi, plus simple à maintenir et à modifier. Une liste affiiche la liste des écrans créés et un clic sur le nom dans la liste affiche l'écran au premier plan.

J'ai presque 3000 lignes de code réparti dans les 4 Tframe (lié à une base mysql, sans DBexpress), je ne compte pas tout refaire avec des Tpanel. Peut être la prochaine fois.

Merci encore.
Jean
Commenter la réponse de jderf
Messages postés
3
Date d'inscription
dimanche 9 juillet 2006
Statut
Membre
Dernière intervention
4 février 2012
0
Merci
salut tout le monde j'ai petit problème avec ma tabsheet

j'ai créer une application qui contiens un composent TPageControl
et ce TPageControl contiens plusieurs Ttabsheet j'ai données
j'ai créer un bouton qui ferme la tabsheet souhaiter exemple

[b]with pageControl1 do
Pages[Pagecontrol1.ActivePageIndex].Free; /b

mais je veux crée un bouton qui peut recrée la tabsheet fermé précédemment
exemple j'ai fermé la "tabc" quand je clique sur un bouton il recrée la "Tabc"
j'espère que vous avez compris un peut mon problème svp réponder moi aussi tot que possible
Commenter la réponse de cs_servicepack