jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDernière intervention 2 octobre 2014
-
20 janv. 2012 à 11:28
cs_servicepack
Messages postés3Date d'inscriptiondimanche 9 juillet 2006StatutMembreDerniè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.
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 20 janv. 2012 à 18:38
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;
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 23 janv. 2012 à 11:13
"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+
jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDernière intervention 2 octobre 20141 23 janv. 2012 à 16:39
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.
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 23 janv. 2012 à 18:42
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.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 23 janv. 2012 à 19:00
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+
jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDernière intervention 2 octobre 20141 27 janv. 2012 à 13:49
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.
cs_servicepack
Messages postés3Date d'inscriptiondimanche 9 juillet 2006StatutMembreDernière intervention 4 février 2012 4 févr. 2012 à 13:38
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