guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 avril 2006
-
1 févr. 2006 à 15:20
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 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?
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 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
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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}
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 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...
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 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[]....
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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.
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 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
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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());
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 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...
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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.
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 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.