Отправляет email-рассылки с помощью сервиса Sendsay

Советы по Delphi

  Все выпуски  

Советы по Delphi


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
Механизм drag&drop файлов

Здравствуйте, уважаемые подписчики! Извините за большую паузу. Сегодня поговорим о том, как принимать "перетаскиваемые" файлы.

При получении программой файлов, окну посылается сообщение 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



http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное