Affichage d'après un fichier

guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006 - 1 févr. 2006 à 15:20
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 3 févr. 2006 à 10:20
bjr,
j'ai un fichier repertoire qui contient nom,prénom....
en cliquant sur le bouton afficher,toutes lé données s'affichent dans un listbox.
mais je n'arrive pas a faire que,sur le listboxClick, les données se réaffichent dans la zone de saisie.
comment faire?

34 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 févr. 2006 à 16:51
salut,

si ta zone de saisie est un Tedit

on affiche dans edit1.text le string contenu dans l'item pointé par itemindex:

Edit1.text:=listbox1.items[listbox1.itemIndex];

@+

jlen
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 08:57
je fait quelque chose dans ce style ,mais voici un morceau de ma procédure :

a:=0;
while a<filesize(fbiblio) do
begin
seek(fbiblio,a);
read(fbiblio,xbiblio);
a:=a+1,
zs_num.text:=xbiblio.code;
zs_titre.text:=xbiblio.titre;
zs_nom.text:=xbiblio.nom;
zs_prenom.text:=xbiblio.prenom;
zs_date_sortie:=strtodate(xbiblio.date_sortie);
if xbiblio.rendu='non rendu' then
zs_retour.checked:=false
else
zs_retour.checked:=true;
end;

Lorsque je clic sur un des item de la listbox, je voudrai que les info du fichier se mettent dans les zones de saisie Tedit, or dans ce que tu me dit,comment afficher toutes les infos dans sa propre zone de saisie? et est ce que ma procédure est correcte?
merci
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 09:09
je ne comprends pas .

Que contient ta listbox? Parce que dans le code que tu donnes je ne la trouve pas

tu charges un fichier mais à chaque lecture tu surcharge tes Tedit mais tu ne conserves pas les enregistrements.

petit détails tu peux remplacer:

while a<filesize(fbiblio) do

par

while not EOF(fbiblio) do

ceci t'évites de gérer un pointeur.

@+

jlen
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 09:20
peut importe ce que contient la listbox puisque seul l'index est important, mais dans la listbox,j'affiche toutes les info du fichier, est dans les zones tedit, je voudrais que ce mettent les informations du tampon de l'index, de l'item séléctionné, mais au mieu,je peux afficher le dernier enregistrement meme si ce n'est pas celui séléctionné.

pour la listbox, dans la procédure afficher:
while not eof(fbiblio) do
begin
seek(fbiblio)
read(fbiblio,xbiblio)
listbox.Items.add(xbiblio.code+''+xbiblio.titre......
end
0

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

Posez votre question
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 09:23
de plus, pour ne not EoF, je suis de toutes facons obligé de gardé a:integer car seek(fbiblio,a), je doit le gardé pour me positionner sur le pointeur
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 09:49
si tu mets toute tes infos dans la listbox alors elle est le miroir de
ton fichier, tu peux donc utiliser l'itemindex de la listbox comme
pointeur sur le fichier

plusieurs solutions:

1) utiliser directement l'itemindex dans le seek et charger tes edit

seek(fbiblio,listbox1.itemIndex);

read(fbiblio,xbiblio);
zs_num.text:=xbiblio.code;
zs_titre.text:=xbiblio.titre;
zs_nom.text:=xbiblio.nom;
zs_prenom.text:=xbiblio.prenom;
zs_date_sortie:=strtodate(xbiblio.date_sortie);
if xbiblio.rendu='non rendu' then
zs_retour.checked:=false
else
zs_retour.checked:=true;
end;

ceci t'oblige à accéder au HD à chaque fois

autre solution lors du chargement tu crées une Tlist et tu y range tes enregistrements:

type

PMyList = ^xbiblio;

xbiblio = record

la tu mets la description

end;



var



MyList: TList;

ARecord: PMyList;

B: Byte;

Y: Word;

begin

MyList := TList.Create;

try

while not EOF(fbiblio) do

begin

New(ARecord);

MyList.Add(ARecord); {Ajoute l'enregistrement la liste}

New(ARecord);

read(fbiblio,ARecord^)

listbox.Items.add(Arecord^.code+''+Arecord^.titre......

end;

comme les listes ont les même items il suffit de faire Mylist.itemindex:=listbox.itemindex;

tu extrais les éléments en faisant

zs_num.text:=Arecord^.code ......

@+

jlen
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 10:05
Voici donc ma procédure actuelle aprés les modif:
Procédure tfrm_principal.listboxclick(sender:tobject);
begin
be_modifier.visible:=true;
while not eof(fbiblio) do
seek(fbiblio,listbox.itemindex);
read(fbiblio,xbiblio);
zs_'blabla':=xbiblio.'blabla';.....
end;
end;

la logique et le coté algo me paraissent corrects, et pourtant ,les zones tedit ne prennent tjs pas le xbiblio.'blabla'. je ne pense pas me tromper en disant que tout me parait correct? pourquoi n'y atil pas d'affichage? il manque peut etre un if..then..else apré le read? je ne sais pas...
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 10:15
il manque les begin end;

while not eof(fbiblio) do

begin
seek(fbiblio,listbox.itemindex);
read(fbiblio,xbiblio);
zs_'blabla':=xbiblio.'blabla';.....

end;
sinon seul le seek() est execute



@+

jlen
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 10:19
en plus pour lire un enregistrement il ne faut pas faire while not
EOF.. qui oblige le programme à lire le fichier jusqu'à la fin

il faut juste converser

seek(fbiblio,listbox.itemindex);
read(fbiblio,xbiblio);
zs_'blabla':=xbiblio.'blabla';.....

explications

le seek positionne le fichier sur l'enregistrement à lire et read le lit.



@+

jlen
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 10:45
pour le begin,javais juste oublié de l'écrir sur le forum,il est dans mon programme.
et en supprimant le while, ce que je voulais que fasse la procédure est fait, c'est parfait,je te remerci.
maintenant,j'ai un autre probleme, j'avais posé la question sur le forum,mais je n'ai pas eu de réponse,peut etre peux tu m'aider:
voila,donc comme tu le sais mtnt,j'ai un fichier fbiblio de type biblio, j'ai plusieus boutons Ajouter, Afficher, modifier...
sur le click de ajouter, l'ajout se fait correctement, mais j'aimerais que l'ajout, ou l'affichage, se fasse trié par odre alphabétique sur le titre: voici ma structure:
biblio:record
code:string[];
titre:string[];
nom:string[]....
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 10:59
le probleme c'est que ton fichier est séquenciel il faudra donc
que tu ajoutes un index (N° d'enregistrement ) à ton record qui gardera
sa position dans le fichier

ensuite tu mets le titre en premier dans l'item de la listbox et tu
mets la propriété "sorted" de la listbox à true elle triera
automatiquement par ordre alphabétique

pour afficher un élément tu récupères l'index pour recharger l'enregistrement.

@+

jlen
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 11:09
en fait, j'ai essayé , en changeant la position du titre dans l'affichagedu list box, et en mettant sorted a true, et le tri est bon, j'espere que cela ne génere pas de bug due au fichie seq, mais en tout cas,je te remerci,je pense qe pour ce matin,j'ai de quoi fignolé tout ca!
merci
@++
guigui265
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 11:20
le probleme c'est que tu n'as plus directement la relation itemindex et seek;

une autre solution pour l'affichage dans les Tedit est d'extraire les
données de l'item de la listbox (en utilisant des séparateurs et la
fonction Pos());

@+

jlen
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 11:24
enfin,il y a juste un probleme, c'est que lorsque l'on affiche trié, sur le clic d'un item, les zones de text qui s'affichent ne sont plus celle voulues puisque l'on tri sur le nom,pas sur le numéro!!
c'était prévisible...
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 11:44
c'est ce que je te disais dans le post prédédent

@+

jlen
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
2 févr. 2006 à 13:16
Salut,
pour résoudre ton problème d'index essaye ceci :

procedure TForm1.Button4Click(Sender: TObject);
Function AddObject(s: String):TObject;
Begin
Result := TObject(LongInt(s));
End ;
begin
ListBox1.Items.AddObject('TestItem', AddObject('Position 2')); // pour enregistrer la position directement dans l'item mais il reste invisible à l'utilisateur
end;



procedure TForm1.ListBox1Click(Sender: TObject);
Const Txt = '%s %s';
begin // et pour récupérer la position
ShowMessage(Format(Txt, [ListBox1.items[ListBox1.itemindex], String(ListBox1.items.objects[ListBox1.itemindex])]));
end;

@+
Cirec
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006
2 févr. 2006 à 13:20
je ne comprend pas du tout comment ce servir de cela, et a quoi correspond le bouton4
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
2 févr. 2006 à 13:42
Bon,
le bouton 4 il est juste là pour tester il me sert à ajouter un Item dans la listBox


au lieu de faire LisBox1.Items.add(Arecord.......
tu fait
procedure TForm1.Button4Click(Sender: TObject); // le nom de la procedure n'est pas important
Function AddObject(s: String):TObject; // AddObject est une sous procédure qui te permet d'ajouter une information supplémentaire à l'Item
Begin
Result := TObject(LongInt(s));
End ;
begin
ListBox1.Items.AddObject('TestItem ', AddObject('Position 2')); // et ici c'est la combinaison des deux
end;

TestItem étant le nom que tu désires voir affiché dans la ListBox et à la place de Position 2 tu mets la position exacte dans le fichier biblio cette fameuse position qui ne correspondais plus après un trie là elle sera toujours correcte

procedure TForm1.ListBox1Click(Sender: TObject); // et celle ci te permet de récuperer les informations à chaque clique sur un Item
Const Txt = '%s %s';
begin // et pour récupérer la position
ShowMessage(Format(Txt, [ListBox1.items[ListBox1.itemindex], String(ListBox1.items.objects[ListBox1.itemindex])]));
end;

en Bleu ça te donne le nom de l'Item
et en rouge pour récuperer les informations supplémentaires

@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 13:45
bien cirec la solution un objet contenant l'index a chaque item mais je
pense que tu devrais donner un peu plus d'explications à guigui265 sur
la finalité.

-->guigui265 le bouton et le showmessage ne sont là que pour le test.



@+

jlen
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 févr. 2006 à 13:52
-->cirec tu as répondu aavant que j'ai eu le temps de poster.

une remarque toutefois dans le cas d'une liste triée donnée par l'aide DELPHI :

Remarque : Dans le cas
d'une liste triée, AddObject déclenche une exception EListError si la
chaîne S existe déjà dans la liste alors que Duplicates a la valeur
dupError. Si Duplicates a la valeur dupIgnore, une tentative d'ajout
d'une chaîne dupliquée provoque le renvoi par la méthode AddObject de
l'indice de l'entrée existante.

il faudra donc gérer ce genre d'erreur



@+

jlen
0
Rejoignez-nous