BlueGEEK Journal

Accueil > Manip’s > Delphi > Drag and Drop (glissé déposé) > Drag and Drop Windows vers Delphi ?

Delphi

Drag and Drop Windows vers Delphi ?

WM_DROPFILES

lundi 24 mars 2008, par bluegyn_spip

Comment déposer un fichier windows sur un programme delphi ?

- (Drag and Drop)

- Cette programmation avancée, fait appel aux API de Windows

- Il est simple de déposer un Fichier sur l’icône d’un programme fermé :

  • Qui fait intervenir tout simplement les paramètres de la ligne de commande
    • ParamStr
      • Avec ParamStr(0) contenant le chemin et le nom du Programme
      • Et ParamStr(1) contenant le chemin et le nom du 1er ficher déposé, etc ...
    • ParamCount
      • Définissant le nombre de fichiers déposés

- La manip suivante va décrire comment extraire le nom d’un (ou de plusieurs) fichiers déposés sur un Programme Delphi ouvert (ici un Mémo)

  • De la même façon qu’on dépose un fichier sur l’explorateur de Windows

-1- UNITE SHELLAPI

- ShellApi doit être déclarée dans la clause USES

- Ce qui nous donne accès aux 4 fonctions nécessaires à la gestion du D&D :

  1. DragAcceptFiles (Initialise la transaction sur la cible)
  1. DragQueryPoint (Définit la Position de Départ de la Souris)
  1. DragQueryFiles (Contient le Nombre & Le Nom des fichiers déposés)
  1. DragFinish (Libère les ressources en fin de transaction)

-2 - INITIALISATION DE LA TRANSACTION

- L’initialisation se fait au moment de la construction de la fiche :

  • Evènement FormCreate

DragAcceptFiles ( self.handle, True ) ;

  1. handle est le handle de la cible (ici self)
  1. True est le drapeau d’activation

- 3 - INTERCEPTION DU MESSAGE WM_DROPFILES

- La transaction étant initialisée, le programme se met à l’écoute du Message Windows WN_DROPFILES (pour Windows Message)


Déclaration de la fonction Wm_DropFiles


- Section

  • Type
    • Private

procedure WmDropFiles(var msg : TMessage) ;

message WM_DROPFILES ;

  1. La Fonction DropFiles intercepte le Message Système "MSG"
  1. On déclare un Message de Type Windows Message "WM_DROPFILES"

Implémentation de la Procédure Delphi WmDropFiles


- Section

  • Implementation

procedure TForm1.WmDropFiles(var msg : TMessage);

var

 hDrop     : THandle;         // handle du composant ciblé

 nbFiles,i : integer;         // nombre de fichiers déposés

 FileName : array [0..MAX_PATH] of char;



begin

 hdrop:=msg.wParam;                                // La cible intercepte le Message de Windows



 // Lecture du Nombre de fichiers déposés sur le Handle Cible

 // Le nombre porte l'index -1

 nbFiles:=DragQueryFile( hDrop, UINT(-1), FileName, 0 );



 // Boucle d'extraction du Nom des Fichiers

 for i:=0 to nbFiles-1 do

 begin



   // Chaque nom est placé à l'index de son numéro de fichier

   DragQueryFile(hDrop, i, FileName , length( FileName ) );  



   Memo1.lines.Add( FileName );          // Ajoute le nom au memo



 end;



 DragFinish(hDrop);                // Restitue les ressources+++

end;

Exemple Pratique

- Procédure simplifiée à un seul fichier permettant d’afficher directement un Texte déposé sur un mémo.


Source = Delphi 3 (Dick LANTIM) Eyrolles, Chap.9, p.220.