Onglets dynamiques

Résolu
killerdam Messages postés 21 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 26 mai 2006 - 5 avril 2005 à 10:35
killerdam Messages postés 21 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 26 mai 2006 - 5 avril 2005 à 23:31
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

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
5 avril 2005 à 22:24
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.
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
5 avril 2005 à 23:18
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.
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
5 avril 2005 à 19:19
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.
0
killerdam Messages postés 21 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 26 mai 2006
5 avril 2005 à 20:19
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
killerdam Messages postés 21 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 26 mai 2006
5 avril 2005 à 22:39
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).
0
killerdam Messages postés 21 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 26 mai 2006
5 avril 2005 à 23:31
Je te remercie mais je ne t en demandais pas tant.

J avais commencé à utiliser l'aide delphi.



à une autre fois peut etre.



killerdam.
0
Rejoignez-nous