Déplacement des éléments
Remonter à Implémentation du glisser-déplacer dans les contrôles
Si un contrôle indique qu'il peut accepter un élément déplacé, il doit le traiter s'il est effectivement lâché. Pour gérer les éléments lâchés, attachez un gestionnaire à l'événement OnDragDrop du contrôle qui accepte l'opération lâcher. Comme l'événement "glisser-dessus", l'événement "glisser-déplacer" indique la source de l'élément déplacé et les coordonnées du curseur de la souris lorsqu'il est au-dessus du contrôle acceptant l'élément. Le dernier paramètre vous permet de contrôler le chemin emprunté par un élément au cours de l'opération glisser ; vous pouvez, par exemple, utiliser ces informations pour modifier la couleur affichée par les composants si un élément est déposé.
Dans l'exemple VCL suivant, une arborescence de répertoires, qui accepte les éléments déplacés depuis une boîte liste de fichiers, répond en déplaçant les fichiers vers le répertoire sur lequel ils sont lâchés :
procedure TFMForm.DirectoryOutline1DragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
if Source is TFileListBox then
with DirectoryOutline1 do
ConfirmChange('Move', FileListBox1.FileName, Items[GetItem(X, Y)].FullPath);
end;
void __fastcall TForm1::TreeView1DragDrop(TObject *Sender, TObject *Source,
int X, int Y) {
if (Source->InheritsFrom(__classid(TFileListBox))) {
TTreeNode *pNode = TreeView1->GetNodeAt(X, Y); // pNode is drop target
AnsiString NewFile = pNode->Text + AnsiString("//") + ExtractFileName
(FileListBox1->FileName); // build file name for drop target
MoveFileEx(FileListBox1->FileName.c_str(), NewFile.c_str(),
MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED); // move the file
}
}