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
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 :
- DragAcceptFiles (Initialise la transaction sur la cible)
- DragQueryPoint (Définit la Position de Départ de la Souris)
- DragQueryFiles (Contient le Nombre & Le Nom des fichiers déposés)
- 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 ) ;
- handle est le handle de la cible (ici self)
- 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 ;
- La Fonction DropFiles intercepte le Message Système "MSG"
- 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.