Onglets dynamiques

[Résolu]
Signaler
Messages postés
21
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
26 mai 2006
-
Messages postés
21
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
26 mai 2006
-
Bonjour,

J ai realisé une creation dynamique d onglets, avec la possiblité, pour
l'utilisateur de nommer chaque nouvel onglet ( a l aide d un Tedit).Mon
souhait serait de trier ces onglets par ordre alphabétique.Pour cela
j'ai pensé à un tri par insertion, mais le nombre d onglet n'est pas
fini.

Si vous avez une idée (vous en avez surement une) faites moi part de vos suggestions...



Merci

killerdam.

6 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Essaye ça pour voir si cela te convient.

procedure TF_Courbe_de_Bezier.B_ok1Click(Sender: TObject);

var
i : integer ;
p : tpagecontrol ;
sl : tstringList ;
begin
Tabsheet1.Caption:=E_nom1.Text;
sl := tstringList .create ;
try
P := TabSheet1.PageControl ;
sl.sorted := true ;
for i := 0 to P.PageCount-1 do
sl.add(P.Pages[i].Caption) ;


for i := P.PageCount-1 downto 0 do
begin
P.Pages[i].PageIndex := sl.IndexOf( P.Pages[i].Caption ) ;
end ;
finally
sl.free;
end;
end;

Cordialement.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
procedure TF_Courbe_de_Bezier.B_ok1Click(Sender: TObject);
var
i : integer ;
p : tpagecontrol ;
sl : tstringList ;
begin
Tabsheet1.Caption:=E_nom1.Text;
// Création d'une liste de chaines de caracteres pour contenir les noms des onglets
sl := tstringList .create ;
try
// On recupere le parent du tabsheet, c'est à dire le pagecontrol
P := TabSheet1.PageControl ;
// On active le tri sur la stringlist afin que les elements ajoutés
// soient triés au fur et à mesure
sl.sorted := true ;
// On parcours l'ensemble des onglets pour recuperer le nom du tabsheet
// et l'ajouter à la liste
for i := 0 to P.PageCount-1 do
sl.add(P.Pages[i].Caption) ;
// On parcours l'ensemble des onglets dans le sens inverse
// A chaque nom d'onglet on regarde sa position triée dans la liste
// Cette position triée devient le nouveau numero de pageindex c-à-d
// le nouvel emplacement du tabsheet.
for i := P.PageCount-1 downto 0 do
begin
P.Pages[i].PageIndex := sl.IndexOf( P.Pages[i].Caption ) ;
end ;
finally
sl.free;
end;
end;

Cordialement.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Pourquoi ne pas inserer l'onglet directement à sa place (alphabétiquement parlant) lors de sa création par l'utilisateur ??

Sinon, c'est un tabControl ? Si c'est le cas tu peux le trier ainsi :
var
S : TStringList ;

S := TStringList.Create ;
try
S.Assign(TabControl1.Tabs) ;
S.Sort;
TabControl1.Tabs.Assign(S);
finally
S.Free;
end ;

Cordialement.
Messages postés
21
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
26 mai 2006

j'utilise un pagecontrol, et les edit se trouvent dans le pagecontrol,
par conséquent le tri ne se fait qu apres la creation de l onglet.





je te donne une partie de mon code:



procedure TF_Courbe_de_Bezier.nouvellecourbe1Click(Sender: TObject);



begin

//Création dynamique du page control

TPageControl.Create(self);

with PageControl1 do

begin

parent:=F_Courbe_de_Bezier;

Align:=alnone;

end;

//Création dynamique du Tabsheet

Tabsheet1:=TTabSheet.Create(self);

with TabSheet1 do

begin

PageControl:=PageControl1;

PageControl.ActivePage:=tabsheet1;

tabsheet1.Caption:='courbe';

end;



E_nom1:=TEdit.Create(self);

//creation dynamique du EDIT

with E_nom1 do

begin

E_nom:=E_nom1 ;

Text:= 'saisissez le nom de la courbe';

parent:= Tabsheet1;

left:=13;

top:=16;

height:=21;

width:=248;

align:=alnone;

end;



B_ok1:=TButton.Create(self);

with B_ok1 do

begin

parent:= Tabsheet1;

left:=280;

top:=20;

width:=59;

height:=20;

align:=alnone;

caption:='OK';

OnClick := B_ok1Click;

end;

//_________________________________________________



procedure TF_Courbe_de_Bezier.B_ok1Click(Sender: TObject);

begin

Tabsheet1.Caption:=E_nom1.Text;

end;



et c'est en apuyant sur le boutton Ok que je voudrai que le tri s'execute
Messages postés
21
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
26 mai 2006

merci beaucoup ca marche tres bien.

Maintenant il ne me reste plus qu à comprendre se que tu as fait. (je ne connnai pas certaines fonction).
Messages postés
21
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
26 mai 2006

Je te remercie mais je ne t en demandais pas tant.

J avais commencé à utiliser l'aide delphi.



à une autre fois peut etre.



killerdam.