Модуль DRAGFRM3 PAS


{

DRAGFRM3.PAS — Прием файлов несколькими элементами

Автор: Джим Мишель

Дата последней редакции: 27/04/97




} unit dragfrm3; interface uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, { FMDD определяет интерфейс перетаскивания } FMDD2; type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; Button2: TButton; Label1: TLabel; Label2: TLabel; ListBox2: TListBox; procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private { Private declarations } procedure OnListbox1FMDragDrop (DragDropInfo : TDragDropInfo);
procedure OnListbox2FMDragDrop (DragDropInfo : TDragDropInfo);
procedure ProcessDroppedFiles (lb : TListBox; DragDropInfo : TDragDropInfo);
public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject);
begin FMDD2.AcceptDroppedFiles (Listbox1, OnListbox1FMDragDrop);
FMDD2.AcceptDroppedFiles (Listbox2, OnListbox2FMDragDrop);
end; procedure TForm1.ProcessDroppedFiles (lb : TListBox; DragDropInfo : TDragDropInfo);
var i : Integer; begin { Проверяем, были ли файлы брошены в клиентской области } if DragDropInfo.InClientArea then Label2.Caption := "In client area" else Label2.Caption := "Not in client area"; { Заносим все файлы в список } for i := 0 to DragDropInfo.NumFiles - 1 do begin lb.Items.Add (DragDropInfo.Files[i]);
end; end; procedure TForm1.OnListbox1FMDragDrop (DragDropInfo : TDragDropInfo);
begin ProcessDroppedFiles (Listbox1, DragDropInfo);
end; procedure TForm1.OnListbox2FMDragDrop (DragDropInfo : TDragDropInfo);
begin ProcessDroppedFiles (Listbox2, DragDropInfo);
end; procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction);
begin { Прекращаем прием файлов } FMDD2.UnacceptDroppedFiles (Listbox1);
FMDD2.UnacceptDroppedFiles (Listbox2);
end; procedure TForm1.Button1Click(Sender: TObject);
begin Listbox1.Clear; Listbox2.Clear; end; procedure TForm1.Button2Click(Sender: TObject);
begin Close; end; end.

Вот теперь это похоже на Delphi-программу — никакой возни с логическими номерами и оконными процедурами. Все делается с помощью компонентов и обработчиков событий, как и положено программам, написанным в Delphi. Все страшные подробности спрятаны в FMDD — вне поля зрения прикладного программиста, который хочет получить брошенные файлы, но совершенно не желает возиться с циклом сообщений Windows.

Поймите меня правильно — я твердо верю в силу знаний, и по мере знакомства с тем, что происходит «под капотом» Windows и Delphi, вы наверняка придумаете и другие решения этой проблемы. Но если задача уже решена, стоит ли повторять все заново? На проектирование и реализацию хорошей «упаковки» для какого-либо средства Windows (в нашем случае — перетаски вания) потребуется некоторое время, но зато потом вы сможете пользоваться ей в любом приложении, избавившись от необходимости снова залезать в дебри Windows.

Модуль DRAGFRM3 PAS

Модуль DRAGFRM3 PAS
Модуль DRAGFRM3 PAS
Модуль DRAGFRM3 PAS



Содержание раздела