Вопрос
У меня такая проблема. Необходимо в программе сделать так, чтобы когда переносишь, например ярлык с рабочего стола или любой файл на текстовое поле, то в нем появлялся путь к этому файлу, например c:\program files\the bat!\thebat.exe. Как это можно реализовать?
Ответ
На эту форму можно бросить файл (например из проводника) и он будет открыт.
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.
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация