|
Tutoriaux
- Glisser/déplacer |
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] [
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; |
|
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] [
glissfich.zip]
Auteur : Yoann
Site internet : http://delphipage.free.fr/
|
|
|