Findfirst

Résolu
mathieu57100
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006
- 15 juin 2005 à 12:12
mathieu57100
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006
- 15 juin 2005 à 13:21
bonjour,
Dans un Ttreeview je voudrais charger la liste des répertoires contenus sur mon Bureau, mais seulement les répertoires...

procedure TfrmPrinc.Button1Click(Sender: TObject);
var
searchResult : TSearchRec;
pathBureau : string;
begin
//ajoute les sous-répertoires du Bureau
TreeView.Items.AddFirst(noeud, 'Bureau');
pathBureau := SpecialFolder(CSIDL_DESKTOP);
if FindFirst(pathBureau + '*', faDirectory, searchResult) = 0 then
begin
repeat
TreeView.Items.AddChild(TreeView.Items.GetFirstNode, searchResult.Name);
until FindNext(searchResult) <> 0;
FindClose(searchResult);
end;
end;

sauf que ca marche pas des masses...
d'ou peut venir mon problème?

merci d'avance.

3 réponses

mathieu57100
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006

15 juin 2005 à 13:21
c'est bon finalement j'ai trouvé:
et j'ai rajouté aussi un test pour qu'il ne rajoute pas les répertoires '.' et '..'

procedure TfrmPrinc.Button1Click(Sender: TObject);
var
searchResult : TSearchRec;
pathBureau : string;
begin
//afiche les ss-dossiers du Bureau
TreeView.Items.AddFirst(noeud, 'Bureau');
pathBureau := SpecialFolder(CSIDL_DESKTOP);
if FindFirst(pathBureau + '\*.*' , faDirectory, searchResult) = 0 then
begin
if (searchResult.Attr and faDirectory) = faDirectory then
begin
while FindNext(searchResult) = 0 do
begin
if ((searchResult.Attr and faDirectory) = faDirectory) and (searchResult.Name <> '.') and (searchResult.Name <> '..') then
TreeView.Items.AddChild(TreeView.Items.GetFirstNode, searchResult.Name);
end;
FindClose(searchResult);
end;
end;
end;
3
mathieu57100
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006

15 juin 2005 à 12:16
ah, oui, rien à voir mais ''SpecialFlder'' est une fonction qui retourne le chemin du répertoire précisé par la variable.

function SpecialFolder(Folder: Integer): String;
var
SFolder : pItemIDList;
SpecialPath : Array[0..MAX_PATH] Of Char;
begin
SHGetSpecialFolderLocation(frmPrinc.Handle, Folder, SFolder);
SHGetPathFromIDList(SFolder, SpecialPath);
Result := StrPas(SpecialPath);
end;
0
mathieu57100
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006

15 juin 2005 à 13:02
j'ai trouvé une erreur, mais ça ne marche toujours pas...
il faut tester l'attribut de searchResult

donc voila ce que j'ai maintenant:

procedure TfrmPrinc.Button1Click(Sender: TObject);
var
searchResult : TSearchRec;
pathBureau : string;
begin
//ajoute les sous-répertoires du Bureau
TreeView.Items.AddFirst(noeud, 'Bureau');
pathBureau := SpecialFolder(CSIDL_DESKTOP);
if FindFirst(pathBureau + '\*.*' , faDirectory, searchResult) = 0 then
begin
if (searchResult.Attr and faDirectory) = 0 then
begin
repeat
TreeView.Items.AddChild(TreeView.Items.GetFirstNode, searchResult.Name);
until FindNext(searchResult) <> 0;
FindClose(searchResult);
end;
end;
end;

dans ma treeview, il n'y a rien d'autre que ''Bureau'', comme si il n'y avait pas de sous dossiers à Bureau (si ma procedure fonctionnait...lol).
0