Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AFFICHER LE CONTENU D'UN DOSSIER DANS UN MENU


Information sur la source

Catégorie :Formulaire Niveau : Expert Date de création : 16/12/2002 Date de mise à jour : 16/12/2002 20:36:06 Vu / téléchargé: 6 930 / 420

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Salut, je suis en train de dévelloper cette procedure.
Elle explore le contenu d'un dossier et affiche l'arborescence dans un Menu (Modifiable facilement pour d'autre composants)

Pour la lancer il faut faire, par exemples :

Affiche le contenu dans un popupmenu, sans les icones
ListeDemProgs(PopupMenu1.Items,'C:\Program Files\',false);

Affiche le contenu dans un popupmenu, avec les icones
ListeDemProgs(PopupMenu1.Items,'C:\Program Files\',true);

Affiche le contenu dans menu autre, sans les icones
ListeDemProgs(Menu1,'C:\Program Files\',false);
 

Source

  • //voici la procedure
  • //-----------------------------------------------------------
  • procedure ListeDemProgs(Dir:TMenuItem;Chemin:string;Icone:boolean=false);
  • var
  • R:integer;
  • SearchRec: TSearchRec;
  • TmpItem: TMenuItem;
  • TmpIcon: Word;
  • TmpIconImg : TIcon;
  • PFichier: array[0..2048] of char;
  • begin
  • if Chemin='' then exit;
  • Dir.Clear; //efface le contenu du menu
  • TmpIconImg := TIcon.Create; //Temporaire pour l'icone
  • TmpIcon := 0;
  • R := FindFirst(Chemin+'*.*', faAnyFile, SearchRec); //lance la recherche
  • try
  • while R = 0 do begin
  • if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') and (SearchRec.Attr and faHidden=0) and (SearchRec.Attr and faSysFile = 0) then begin
  • TmpItem := TMenuItem.Create(Dir); // crée le nouvel élément
  • TmpItem.Caption := SearchRec.Name; //le texte
  • //Icone
  • if Icone then begin
  • StrCopy(PFichier, PChar(Chemin + SearchRec.Name));
  • TmpIconImg.Handle := ExtractAssociatedIcon(Application.Handle,PFichier,TmpIcon);
  • TmpItem.Bitmap.Height := 32;
  • TmpItem.Bitmap.Width := 32;
  • TmpItem.Bitmap.Canvas.Draw(0,0,TmpIconImg);
  • end;
  • if (SearchRec.Attr and faDirectory) <> 0 then begin //si c un rep, continu l'arborecense
  • ListeDemProgs(TmpItem,Chemin+SearchRec.Name+'\',Icone);
  • end else begin //si c un fichier, enlève l'extention, et ajout le click
  • TmpItem.Caption := Copy(TmpItem.Caption,1,Length(TmpItem.Caption)-4);
  • TmpItem.Hint := Chemin+SearchRec.Name; //pour lancer le fichier après
  • TmpItem.OnClick := PopupMenuProgsClick; // quand on klik dessus
  • end;
  • Dir.Add(TmpItem);// ajoute l'élément
  • end;
  • R := FindNext(SearchRec); // au suivant
  • end;
  • finally
  • FindClose(SearchRec);
  • end;
  • TmpIconImg.Free; //vide l'icone
  • end;
  • //Ceci permet de lancer le fichier kan on clique dessus !!!
  • //-------------------------------------------------------
  • procedure PopupMenuProgsClick(Sender: TObject);
  • var
  • TmpS:string;
  • begin
  • with Sender as TMenuItem do
  • begin
  • //lance le fichier
  • shellexecute(application.Handle,nil,pchar(Hint),nil,nil,SW_SHOW);
  • end;
  • end;
//voici la procedure
//-----------------------------------------------------------
procedure ListeDemProgs(Dir:TMenuItem;Chemin:string;Icone:boolean=false);
var
R:integer;
SearchRec: TSearchRec;
TmpItem: TMenuItem;
TmpIcon: Word;
TmpIconImg : TIcon;
PFichier: array[0..2048] of char;
begin
if Chemin='' then exit;
Dir.Clear;  //efface le contenu du menu
TmpIconImg := TIcon.Create; //Temporaire pour l'icone
TmpIcon := 0;

R := FindFirst(Chemin+'*.*', faAnyFile, SearchRec); //lance la recherche
try
  while R = 0 do begin
    if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') and (SearchRec.Attr and faHidden=0) and (SearchRec.Attr and faSysFile = 0) then begin
      TmpItem := TMenuItem.Create(Dir); // crée le nouvel élément
      TmpItem.Caption := SearchRec.Name; //le texte
      //Icone
      if Icone then begin
        StrCopy(PFichier, PChar(Chemin + SearchRec.Name));
        TmpIconImg.Handle := ExtractAssociatedIcon(Application.Handle,PFichier,TmpIcon);
        TmpItem.Bitmap.Height := 32;
        TmpItem.Bitmap.Width := 32;
        TmpItem.Bitmap.Canvas.Draw(0,0,TmpIconImg);
      end;

      if (SearchRec.Attr and faDirectory) <> 0 then begin //si c un rep, continu l'arborecense
        ListeDemProgs(TmpItem,Chemin+SearchRec.Name+'\',Icone);
      end else begin //si c un fichier, enlève l'extention, et ajout le click
        TmpItem.Caption := Copy(TmpItem.Caption,1,Length(TmpItem.Caption)-4);
        TmpItem.Hint := Chemin+SearchRec.Name; //pour lancer le fichier après
        TmpItem.OnClick := PopupMenuProgsClick; // quand on klik dessus
      end;

      Dir.Add(TmpItem);// ajoute l'élément
    end;
      R := FindNext(SearchRec); // au suivant
  end;
 finally
  FindClose(SearchRec);
end;
TmpIconImg.Free; //vide l'icone
end;


//Ceci permet de lancer le fichier kan on clique dessus !!!
//-------------------------------------------------------
procedure PopupMenuProgsClick(Sender: TObject);
var
TmpS:string;
begin
  with Sender as TMenuItem do
  begin
  //lance le fichier
  shellexecute(application.Handle,nil,pchar(Hint),nil,nil,SW_SHOW);
  end;

end;

Conclusion

Voila
Pour un exemple qui marche, voir le zip.
Sinon, cette procedure est loin d'être fonctionnelle.
Déja, la construiction des icones est suepr lent,
Les icones sont chargés en 32*32 puis redim en 16*16, c pas bien joli
Quand c'est un raccourcis, la petite flêche est mise sur l'icone, faudrai faire un truk pour lire l'icone du vrai fichier.

voila, si vous avez des suggestions ou quoi que se soit :)
merci
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de AhmedBoudali le 18/01/2003 09:42:35

J' adore le détournement de composant et tans pis pour les puristes !

Je mets 6 avec mention "Encore"

signaler à un administrateur
Commentaire de metdlp le 13/10/2003 18:10:16

merci fabien por ce souce
mais as tu essayer ta fonction sous XP chez mois ça marche pas mais en Win 98 ça tourne bien

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,42 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.