Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Glisser/déplacer

Présentation

Le glisser/déplacer (drag and drop) consiste à prendre un objet à l'aide de la souris en maintenant le bouton enfoncé et à le glisser sur un autre objet puis de le lacher en relachant le bouton de la souris.


Nous avons donc besoin d'un control source et d'un control de destination. En Delphi, le control est represente par un composant. Chaque composant héritant de la classe TControl peut etre un controle.
Il faut ensuite determiner si le composant est apte à recevoir l'objet glissé. Lorsque on veut manipule des objets de plusieurs applications, on fait appel à l'API Windows pour réaliser un glisser/déplacer.



Le glisser entre composant d'une même fiche

Cette opération est la plus facile à réaliser car il est réaliser dans un environnement Delphi.

Composant source


Il faut positionner la propriété "DragMode" du composant source à "dmAutomatic". Le composant autorise alors à prendre l'élément lorsque le bouton de la souris est enfoncé.
Pour changer le curseur lors de l'opération, il faut choisir le curseur dans la propriété "DragCursor".

Composant de destination

Un composant de destination doit avoir l'évènement "OnDragOver".

procedure OnDragOver(Sender, Source : TObject; X,Y : Integer;State :TDragState; var Accept: Boolean);

Expliquons ces différents paramètres.

Paramètre
Description
Sender Pointe sur le composant recevant l'objet.
Source Pointe sur le composant source(d'ou est parti l'objet).
X, Y Position du curseur au debut du glisser/deplacer dans l'objet source.
State Etat de l'objet glissé(dsDragEnter, dsDragMove, dsDragLeave).
Accept Acceptation de prendre l'objet.

Le paramètre accept est de type booléen. Positionnez-le à true pour indiquer au composant source que l'on accepte l'objet.

Ajoutez un composant TDriveComboBox, TDirectoryListBox, TFileListBox et TImage.
TImage sera le composant de destination.
Mettez la propriété "DirList" de TDriveComboBox à "DirectoryListBox1".
Mettez la propriété "FileList" de TDirectoryListBox à "FileListBox1".
Positionnez la propriété "DragMode" du composant TFilListBox à "dmAutomatic".
Mettez la propriété "Mask" de TFilmeListBox à *.bmp


procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept:=Source is TFileListBox;
end;

procedure TForm1.Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
Image1.Picture.LoadFromFile((Source as TFileListBox).FileName);

end;

Dans l'évènement "OnDragOver", on met le paramètre "Accept", le test d'appartenance du composant.
Dans l'évènement "OnDragDrop", on charge le fichier glissé dans l'image.


Glisser et deplacer    [ 18-11-2001 ]
 Permet de glisser et de deplacer un composant d'une même fiche.
Télécharger :  [5 Ko] [Télécharger glissmfic.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/


Le glisser entre fiche d'une même application

Dans ce cas, il peut être nécessaire de vérifier si l'objet glissé provient bien de la fiche attendue.

procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept:=(Source is TFileListBox) and ((Source as TWinControl).parent is TForm2);
end;


Le glisser de fichiers

Certaines applications(poste de travail, l'explorateur) utilisent le glisser/déplacer pour effectuer des opérations sur les fichiers.

Windows dispose de quatre fonctions qui autorisent le glisser/déplacer entre applications.
Ces fonctions sont definis dans l'unité "ShellApi".


Fonction
Description
DragAcceptFiles Enregistre la fenêtre afin d'accepter les fichiers sources.
DragFinish Libère la mémoire allouée aux fichiers source.
DragQueryFile Recupère le nombre ou le nom des fichiers source.
DragQueryPoint Recupère la position de la souris au début du glisser.

"DragAcceptFiles" attend le handle d'une fenêtre et une valeur booléenne qui indique si cette fenêtre doit être enregistrée ou non.

uses ShellApi;

procedure TForm1.FormCreate(Sender: TObject);
begin
DragacceptFiles(Handle,true);
end;

Lorsque l'on enregistre un fenêtre, permet de recevoir le message "WM_DROPFILES".

procedure WMDropFiles(var message : TMessage); message WM_DROPFILES;

Nous utiliserons également la fonction "DragQueryFile". Voici la structure de cette fonction :

function DragQueryFile(Drop : THandle;FileIndex: Word; FileName: PChar; cb : word):Word;

Paramètre
Descritpion
Drop Handle de la srtucture.
FileIndex Index du nom de fichier à recuperer.
FileName Nom du fichier pour index donné.
cb Taille du buffer alloué pour recevoir le nom du fichier.

Voici ce que vous devez tapez pour le code :

private
{ Déclarations privées }
procedure WMDropFiles(var msg : TMessage); message WM_DROPFILES;
end;

procedure TForm1.WMDropFiles(var msg : TMessage);
var hand: THandle;
nbFich, i : integer;
buf:array[0..254] of Char;
begin
hand:=msg.wParam;
nbFich:= DragQueryFile(hand, 4294967295, buf, 254);
for i:= 0 to nbFich - 1 do
begin
DragQueryFile(hand, i, buf, 254);
Form1.ListBox1.Items.Add(buf);
end;
DragFinish(hand);
end;

"DragFinish" libère la memoire de la structure qui a été allouée.

Glisser et deplacer    [ 16-03-2002 ]
 Permet de glisser et de deplacer un fichier.
Télécharger :  [5 Ko] [Télécharger glissfich.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/

Tous droits réservés - Contacts
Haut de la page