Probléme shellexecute (lancer des dossier par clic sur les items d'un listview)

Résolu
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010 - 8 mai 2007 à 15:04
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010 - 8 mai 2007 à 19:02
Bonjour,


Je souhaite gérer une liste de racourcis. Pour celà j'utilise un
ListView dans lequel j'ajoute mes fichiers par drag and drop depuis
windows.Cette partie là fonctionne, voici le code (au cas où):

var

FileNbr, i: Integer;

FileName: String;

Files: Array[0..255] of Char;

ListItem: TListItem;

procedure TFichier.FormCreate(Sender: TObject);
begin

DragAcceptFiles(Self.Handle,True);
end;

procedure TFichier.DropMsg(var msg: TWMDropFiles); // faire le drag and drop
begin

FileNbr:= DragQueryFile(Msg.Drop, $FFFFFFFF, Files, SizeOf(FileName));

for i:=0 to FileNbr-1 do
begin

FileName: =copy(Files, 0, DragQueryFile(Msg.Drop, i, Files, 255));

ListItem:= ListView1.Items.Add;

ListItem.Caption:=ExtractFileName(FileName); //Column 0 - Nom

ListItem.SubItems.Add(FileName); //Column 1 - Origine
end;

Msg.Result: =0;

DragFinish(msg.Drop);
end;


Ce qui ne marche pas c'est lorsque je souhaite ouvrir l'un des racourci en cliquant dessus. J'utilise shellexecute comme ceci:

procedure TFichier.ListView1SelectItem(Sender: TObject; Item: TListItem;

Selected: Boolean);
begin


ShellExecute(0,'open',PChar(filename) , Nil, Nil, SW_SHOW);
end;


Avec cette ligne je n'obtient que des erreurs, je pense que c'est a cause de "FileName".

Donc est-ce que quelqu'un saurait comment lancer les raccourcis(qui sont des dossiers, des fichiers textes...comme "mes documents" par exemple)en cliquant dessus?


J'espére avoir été clair dans ma demande.


Merci.

6 réponses

mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010
8 mai 2007 à 18:53
alors avec cette modif ça fonctionne et je n'ai plus de bug:

procedure TFichier.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
ShellExecute(0,'open',PChar(Item.SubItems.Strings[0]  ) , Nil, Nil, SW_SHOW);
end;

Il me reste un léger souci, je m'explique:
   lorsque je clic sur l'item j'ouvre le fichier ou dossier en question mais celà se produit aussi au 2nd clic peut importe l'item et même si je clic sur un espace vide du listview.

    J'ai remarquer que l'item sur lequel j'ai cliqué reste en surbrillance jusqu'au second clic (je pense donc qu'il y a un rapport entre le relencement du fichier et cette surbrillance) ce qui m'améne a poser cette question:

comment faire pour enlever cette surbrillance...enfin je veut dire déselectionner l'item apres l'ouverture du fichier?

merci
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
8 mai 2007 à 18:56
Il faut que tu testes la valeur du param Selected.

<hr size= "2" width="100%" /> procedure TFichier.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
  if Selected then
    ShellExecute(0, 'open', PChar(Item.SubItems.Strings[0]) , nil, nil, SW_SHOW);
end;<hr size ="2" width="100%" />
Logiquement, le dossier ne devrait s'ouvrir que lorsque tu sélectionne l'item.
++
3
jelume Messages postés 120 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 15 novembre 2007 1
8 mai 2007 à 17:24
bjr

as-tu essayé de mettre un point d'arrèt et de visualiser le contenu de filename  au moment du shellexecute ?
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
8 mai 2007 à 18:10
Son filename est forcément faux puisqu'il sera toujours égal au dernier fichier ajouté par drag&drop.

Ce qu'il faut faire, c'est récupérer le fichier sélectionné dans ton listview....
0

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

Posez votre question
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010
8 mai 2007 à 18:14
daccord, je comprend mieux....je vais essayer de faire ça
0
mighty_warrior Messages postés 123 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 9 février 2010
8 mai 2007 à 19:02
ça y est plus de problémes

merci à vous deux pour votre aide!

@+
0
Rejoignez-nous