Onglets dynamiques [Résolu]

killerdam 21 Messages postés jeudi 3 mars 2005Date d'inscription 26 mai 2006 Dernière intervention - 5 avril 2005 à 10:35 - Dernière réponse : killerdam 21 Messages postés jeudi 3 mars 2005Date d'inscription 26 mai 2006 Dernière intervention
- 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.
Afficher la suite 

6 réponses

Répondre au sujet
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 5 avril 2005 à 22:24
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de WhiteHippo
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 5 avril 2005 à 23:18
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de WhiteHippo
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 5 avril 2005 à 19:19
0
Utile
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.
Commenter la réponse de WhiteHippo
killerdam 21 Messages postés jeudi 3 mars 2005Date d'inscription 26 mai 2006 Dernière intervention - 5 avril 2005 à 20:19
0
Utile
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
Commenter la réponse de killerdam
killerdam 21 Messages postés jeudi 3 mars 2005Date d'inscription 26 mai 2006 Dernière intervention - 5 avril 2005 à 22:39
0
Utile
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).
Commenter la réponse de killerdam
killerdam 21 Messages postés jeudi 3 mars 2005Date d'inscription 26 mai 2006 Dernière intervention - 5 avril 2005 à 23:31
0
Utile
Je te remercie mais je ne t en demandais pas tant.

J avais commencé à utiliser l'aide delphi.



à une autre fois peut etre.



killerdam.
Commenter la réponse de killerdam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.