Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Как перетаскивать файлы?

Поиск:
как принимать "перетаскиваемые" файлы.

При получении программой файлов, окну посылается сообщение WM_DROPFILES.
При помощи функции DragQueryFile можно определить количество и имена файлов.
При помощи функции DragQueryPoint можно определить координату мыши в тот момент,
когда пользователь "отпустил" файлы.

Эта программа открывает все "перетащенные" в нее файлы.
Причем, если пользователь перетащил файлы в PageControl1, то в PageControl1 эти файлы и откроются.

Код

...
 public
   procedure WMDropFiles(var Msg: TWMDropFiles);
     message WM_DROPFILES;
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

uses ShellAPI, stdctrls;

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
 HF: THandle;
 s: array [0..1023] of char;
 i, FileCount: integer;
 p: TPoint;
 ts: TTabSheet;
 memo: TMemo;
begin
 HF := Msg.Drop;
 FileCount := DragQueryFile(HF, $FFFFFFFF, nil, 0);
 for i := 0 to FileCount - 1 do begin
   DragQueryFile(HF, i, s, sizeof(s));
   ts := TTabSheet.Create(nil);
   DragQueryPoint(HF, p);
   if PtInRect(PageControl1.BoundsRect, p)
     then ts.PageControl := PageControl1
     else ts.PageControl := PageControl2;
   ts.Caption := ExtractFileName(s);
   memo := TMemo.Create(nil);
   memo.Parent := ts;
   memo.Align := alClient;
   memo.Lines.LoadFromFile(s);
 end;
 DragFinish(HF);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 PageControl1.Align := alLeft;
 PageControl2.Align := alClient;
 DragAcceptFiles(Form1.Handle, true);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DragAcceptFiles(Form1.Handle, false);
end;



Всего доброго,
Даниил Карапетян.
На сайте http://delphi4all.narod.ru Вы найдете еще более 100 советов по Delphi.
Email: delphi4all@narod.ru


--------------------------------------------------------------------------------

Код

{ На эту форму можно бросить файл (например из проводника)  
 и он будет открыт }
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics,  
 Controls, Forms, Dialogs,StdCtrls,  
 ShellAPI {обязательно!};

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   FileNameLabel: TLabel;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 protected
  {Это и есть самая главная процедура}
   procedure WMDropFiles(var Msg: TMessage); message wm_DropFiles;  
end;

var
 Form1: TForm1;
implementation
{$R *.DFM}

procedure TForm1.WMDropFiles(var Msg: TMessage);
var  
  Filename: array[0 .. 256] of Char;
  Count   : integer;
begin
 { Получаем количество файлов (просто пример) }
  nCount := DragQueryFile( msg.WParam, $FFFFFFFF,  
    acFileName, cnMaxFileNameLen);
 { Получаем имя первого файла }
 DragQueryFile( THandle(Msg.WParam),
    0, { это номер файла }
    Filename,SizeOf(Filename) );
 { Открываем его }
 with FileNameLabel do begin
  Caption := LowerCase(StrPas(FileName));
  Memo1.Lines.LoadfromFile(Caption);
 end;
 { Отдаем сообщение о завершении процесса }
 DragFinish(THandle(Msg.WParam));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
{ Говорим Windows, что на нас можно бросать файлы }
DragAcceptFiles(Handle, True);  
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
{ Закрываем за собой дверь золотым ключиком}
DragAcceptFiles(Handle, False);  
end;
end.


Источник: http://dmitry9.nm.ru/info/
Автор: DRKB
Сайт: http://www.delphist.com






Просмотров: 1928

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную