- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
Сегодня мы научимся открывать файл перетаскиванием на форму средствами Delphi.
Открывать мы будем текстовый файл и его содержимое отображать в компоненте Memo. Стоит отметить, что открывать таким образом можно любые файлы, а не только текстовые. Все дело в том, что при перетаскивании мы будем получать адрес файла, а уже с этим адресом мы можем делать все, что угодно.
Итак приступим. Для примера нам потребуется создать новое приложение и разместить на его форме компонент TMemo. Все, больше никакие компоненты нам не понадобятся. Следующее, что нужно сделать - подключить модуль ShellAPI в разделе uses. Далее я выложу код программы с комментариями.
Логика работы следующая:
Открывать мы будем текстовый файл и его содержимое отображать в компоненте Memo. Стоит отметить, что открывать таким образом можно любые файлы, а не только текстовые. Все дело в том, что при перетаскивании мы будем получать адрес файла, а уже с этим адресом мы можем делать все, что угодно.
Итак приступим. Для примера нам потребуется создать новое приложение и разместить на его форме компонент TMemo. Все, больше никакие компоненты нам не понадобятся. Следующее, что нужно сделать - подключить модуль ShellAPI в разделе uses. Далее я выложу код программы с комментариями.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Forms, ShellAPI, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
CFileName: array [0 .. MAX_PATH] of char; // переменная, хранящаяимяфайла
begin
try
If DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH) > 0 then
// Получаем путь к файлу и открывем его
begin
if ExtractFileExt(CFileName) = '.txt' then
Memo1.Lines.LoadFromFile(CFileName);
end;
finally
DragFinish(Msg.Drop); // отпустить файл
end;
end;
end.
- Мы разрешаем программе принимать файлы drag'n'drop
- При перетаскивании мы получаем адрес файла
- Проверяем чтобы файл был с расширением "txt"
- Открываем файл