Comment faire pour afficher une arborescence simple dans un mémo ??? [Résolu]

Utilisateur anonyme - 24 oct. 2005 à 13:04 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 25 oct. 2005 à 14:35
Salut à tous

Je pensais que l'on pouvait faire apparaitre une arborescence avec un DirectoryOutline. mais les fichiers n'apparaissent pas. Donc je me demandais si il y avait moyen de faire apparaitre une arborescence (dossiers+fichiers) simple (enfin du meme style qu'un
DirectoryOutline) dans un mémo. Il faudrait aussi qu'en cliquant sur un fichier son nom complet apparaisse dasn un Edit.

Merci
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 24 oct. 2005 à 21:40
3
Merci
deja je n'utiliserais pas un memo (editeur de texte) mais soit comme l'on dit les autres un TTreeView ou une ListBox.



de la avec l'evenement OnClick de la ListBox tu recupere l'ItemIndex et tu affiche le texte de l'item dans le TEdit.



en gros :



edit1.text := listbox1.items[listbox1.ItemIndex];



le probleme du memo c'est qu'il n'y a pas la propriétée ItemIndex.

on devrait donc tricher avec le "memo1.CaretPos.Y" pour

savoir qu'elle ligne est selectionnée et ensuite affichée la ligne comme suis sur l'evenement OnClick du tmemo :



edit1.text := memo1.lines[memo1.CaretPos.Y];



mais je maintiens, un memo pour ça c'est pas vraiment adapté.



en plus la ListBox a un evenement bien pratique le OnDrawItem qui permet de personnaliser l'affichage des Items.

chose que TMemo n'a pas ...

et ce n'est pas pour rien que les TreeView et autre du style sont basé sur TListBox.



en gros, reflechis mieux au methode a appliquer et choisis mieux tes composants pour ce faire.

je ne connais pas le but de ton application, mais partis comme c'est la tu risque de rencontrer

beaucoup de problemes et tu seras obliger de réecrire tout de A a Z plusieur fois.



et un dernier conseil, ne reinvente pas la roue, tu y perdras trop de temps pour pas grand chose

au final.

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de f0xi
Utilisateur anonyme - 24 oct. 2005 à 13:14
0
Merci
En fait je cherche une arborescence complete mais pas dynamique (sélection d'un dossier puis d'un sous dossier puis d'un fichier) mais que l'on voye directement dans le mémo sans la moindre manipulation un truc du genre

Si on clique sur Setup.exe, le nom complet de ce fichier apparait dans l'Edit
Commenter la réponse de Utilisateur anonyme
vaughan 207 Messages postés mardi 6 août 2002Date d'inscription 29 octobre 2008 Dernière intervention - 24 oct. 2005 à 13:44
0
Merci
Afin de voir une arborescence j'utiliserais une TTreeView

vaughan
Commenter la réponse de vaughan
Utilisateur anonyme - 24 oct. 2005 à 14:11
0
Merci
C'est quoi ce délire : l'image c pas la mienne grrrrr (merci aux admins de l'enlever).

Voila je cherche à avoir une arborescence complete de ce type :

Tous les fichiers et répertoires apparaissent sans être obligés de le faire en cliquant sur le C:\ puis sur le dossier puis sur le sous dossier ect ect. En fait on a le listing complet des fichiers avec les sous dossiers qui apparait dans le mémo (ou autre si obligation d'utiliser des barres de défilement pour voir l'ensemble du listing)
Commenter la réponse de Utilisateur anonyme
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 24 oct. 2005 à 14:51
0
Merci
salut vas voir la source:

Utiliser FindFirst en récursif pour scruter les sous-répertoires.

elle compte le nombre de fichier dans un repertoire et ses sous
repertoires en les affichant temporairement dans un label. Il te sera
facile de remplacer le label par un memo.
Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 24 oct. 2005 à 16:09
0
Merci
au fait quand tu ecris:

"En fait on a le listing complet des fichiers avec les sous dossiers qui
apparait dans le mémo (ou autre si obligation d'utiliser des barres de
défilement pour voir l'ensemble du listing)"

il me parait difficile que tu puisses afficher l'ensemble du
listing du lecteur c: sur un écran sans faire défiler la fenetre : en
effet ce lecteur contient plusieurs milliers de fichiers qui te
donneront plusieurs milliers de lignes et je doute que ton ecran puisse
contenir la totalité des informations
Commenter la réponse de jlen100
Utilisateur anonyme - 24 oct. 2005 à 17:41
0
Merci
Les deux méthodes proposées m'interessent pour deux traitements différents, mais :

*TTreeView : je ne vois pas les fichiers mais que les dossiers et sous-dossiers: comment faire pour voir les fichiers ???

*Méthode récursive : la méthode de Nono40 est interessante. Cependant il n'y a pas de listings de fichiers mais une substitution des chemins dans l'Edit.

Merci
Commenter la réponse de Utilisateur anonyme
vaughan 207 Messages postés mardi 6 août 2002Date d'inscription 29 octobre 2008 Dernière intervention - 24 oct. 2005 à 17:51
0
Merci
Le TTreeview ne sert que d'affichage. Tu peux y mettre répertoire et fichier comme l'explorer Windows.


Voici un bout de code permettant de rechercher dans un répertoire des fichiers, à toi de la rendre récursive ... les fichiers trouvé sont mis dans une liste à toi de les mettre dans ta Treeview.


Var
vSearchRec: TSearchRec;
begin
If FindFirst(Val,FAttrib,vSearchRec) = 0 Then
Begin
pLst.Add(vSearchRec.Name);
While FindNext(vSearchRec) = 0 Do
pLst.Add(vSearchRec.Name)
End
Else
Raise Exception.Create('Search File Error: '+ Val);


FindClose(vSearchRec);

vaughan
Commenter la réponse de vaughan
Utilisateur anonyme - 24 oct. 2005 à 18:05
0
Merci
vaughan : tu va pas me faire croire qu'il n'y a pas une ptite option dans l'inspecteur de la treeview pour faire apparaitre les fichiers ????
Commenter la réponse de Utilisateur anonyme
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 24 oct. 2005 à 18:26
0
Merci
rien ne t'empeche de modifier le code de NONO40 pour afficher les dossiers et fichiers dans un liste ou un memo
Commenter la réponse de jlen100
Utilisateur anonyme - 24 oct. 2005 à 19:09
0
Merci
Je dis pas que ton idée est pas bonne, jlen100, mais c 'est pas trop mon genre de prendre un basuka pour tuer une mouche . Par contre pour une autre partie de mon application j'en aurais besoin .

Je ne sais pas si tu as compiler la source de Nono40 mais je le rappelle tu n'as pas un listing des fichiers :

c:\
c:\mesdocuments
c:\ mesdocuments\projet.exe

mais une substitution :
c:\ s'efface dans l'edit pour C:\mesdocuments qui s'efface pour c:\ mesdocuments\projet.exe

Merci quand même
Commenter la réponse de Utilisateur anonyme
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 24 oct. 2005 à 20:03
0
Merci
je ne te dis pas que la source de NONO40 dans sa version actuelle fait
une liste mais qu'il est facile de faire une liste à partir de cette
source par exemple si tu remplaces l'Edit par un memo et que tu fais
Form1.Memo1.Append(chemin) tu as la liste des chemins; maintenant si tu
utilises le code de vaugan en relation avec celui de NONO40 tu auras
bien la liste des fichiers du repertoire racine et des sous-repertoires.
Commenter la réponse de jlen100
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 24 oct. 2005 à 21:52
0
Merci
une petite methode qui t'aideras surrement, a toi de la modifier selon
tes besoins. (hs : Je veux une fonction Editer sur le forum!)







interface



type
DynArrayOfStr : array of string;



implementation



function FilesSearch(path : string) : DynArrayOfStr;

var

sr : TSearchRec;

fn : string;

begin

FindFirst(path+'\*.*',faAnyFile,sr);

while FindNext(sr) = 0 do begin

SetLength(result, length(result)+1);

result[length(result)-1] := path+'\'+sr.Name;

end;

FindClose(sr);

end;
Commenter la réponse de f0xi
Utilisateur anonyme - 25 oct. 2005 à 00:32
0
Merci
Mon anniv c'est le 23 janvier pour ceux qu'ils veulent m'offrir une paire de rames

merci quand meme
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 25 oct. 2005 à 00:42
0
Merci
Je vais recentrer ma question : je souhaite faire apparaitre une arborescence simple de fichiers avec les repertoires et sous repertoires dans un composant de type Edit, Mémo ou AUTRE (C'est pour toi FOXI) et de facon simple.
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 25 oct. 2005 à 02:59
0
Merci
Bon voila j'ai mis au point une petite source pour rechercher les répertoires de la racine

procedure TForm1.Button1Click(Sender: TObject);
var
D: TSearchRec;
begin
FindFirst('C:\*.*', faDirectory, D);
if FindFirst('C:\*.*', faDirectory, D) = 0 then
repeat
ListBox1.Items.Add(D.FindData.cFileName) ;
FindNext(D);
until FindNext(D) <> 0;
FindClose(D);


end;


end.

Manque de bol, j'ai une liste (dans une listebox) cependant je n'ai pas tout les répertoires de la racine et des fichiers .com .exe et .bat sont listés. Ou est l'erreur dans ma source ????
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 25 oct. 2005 à 03:19
0
Merci
J'ai trouvé mon erreur, j'ai modifié mon code :

Pour les répertoires :

Procedure TForm1.Button1Click(Sender: TObject);
var
D: TSearchRec;
F: TSearchRec;
begin
FindFirst('C:\*.*', faDirectory, D);
if FindFirst('C:\*.*', faDirectory, D) = 0 then
repeat
If (D.Attr And faDirectory)<>0
Then ListBox1.Items.Add(D.FindData.cFileName)
--------
Pour les fichiers

Procedure TForm1.Button1Click(Sender: TObject);
var
D: TSearchRec;
F: TSearchRec;
begin
FindFirst('C:\*.*', faDirectory, D);
if FindFirst('C:\*.*', faDirectory, D) = 0 then
repeat
If (D.Attr And faDirectory)=0
Then ListBox1.Items.Add(D.FindData.cFileName)

Il reste plus qu'à faire une boucle pour lister de façon non "ordonnée" (au sens alphabetique) tout les répertoires, sous répertoires et fichiers.Si quelqu'un à une idée ???
Commenter la réponse de Utilisateur anonyme
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 25 oct. 2005 à 14:35
0
Merci
salut,



utilise la fonction que je t'ai fournis.



- n'utilise pas une boucle Repeat et conditionnée mais une boucle While

- n'utilise pas la fonction ADD des TStringList celle ci diminue trop les performances du programme,

utilise donc APPEND dans les TStringList, comme elle ne necessite pas de valeur de retour comme ADD

elle s'execute plus rapidement.

- ensuite pas besoin de deux variable TSearchRec une seule suffit.

- pour ordonner une liste par ordre alphabetique utilise la propriete "sort" a "true" des tlistbox.

- pour les variables du meme type, declare les sur une seule ligne : var F,D : TSearchRec;



voila pour les conseils.

voici une version de ma fonction adaptée pour les type TStringList.



procedure FilesSearch(var list : tstringlist; path : string; attr : integer);
var
sr : TSearchRec;
fn : string;
begin
FindFirst( path+'\*.*', attr, sr);
while FindNext( sr ) = 0 do begin
list.append( path+'\'+sr.Name );
end;
FindClose(sr);
end;



utilisation de la fonction :



procedure TForm1.Button1Click(Sender : TObject);

begin

FilesSearch (listbox2.items, 'c:\program files', faAnyFiles);

end;





utilise les attributs de fichiers pour determiner le type des elements fichier ou repertoire.

"sr.attr" si je ne m'abuse.
Commenter la réponse de f0xi

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.