Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];

Вниз

Drag-n-Drop файлов из проводника   Найти похожие ветки 

 
D@nger   (2008-10-09 10:53) [0]

Здравствуйте! Реализовал драг энд дроп следующим методом:

procedure TFmain.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, True);
end;

procedure TFmain.FileIsDropped(var Msg:TMessage);
var hDrop:THandle ;
   fName:array[0..256]of CHAR ;
begin
  inherited;
  hDrop := Msg.WParam ;
  DragQueryFile(hDrop,0,fName,256);
  if DragQueryPt
  showmessage(fname);
  DragFinish(hDrop);
end;



В результате переноса файла из проводника программа отображает имя этого файла. Как мне узнать на какой компонент на форме был брошен файл? Нашел апи функцию DragQueryPt .. которая должна говорить место куда был брошен файл, но как с ней работать не нашел.... Подскажите как быть.


 
{RASkov} ©   (2008-10-09 11:30) [1]

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ShellApi;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   ListBox2: TListBox;
   procedure FormCreate(Sender: TObject);
 private { Private declarations }
   procedure DropFiles(var Mes: TWmDropFiles); message WM_DROPFILES;
 public { Public declarations }
 end;

var Form1: TForm1;

implementation
{$R *.dfm}

procedure AddFile(const FL: String; Lst: TWinControl);
begin
  if Assigned(Lst) and (Lst is TListBox) then TListBox(Lst).Items.Add(FL);
end;

procedure TForm1.DropFiles(var Mes: TWmDropFiles);
var N, I: Integer;
FlNm: String;
L: TWinControl;
P: TPoint;
begin
 N:=DragQueryFile(Mes.Drop, $FFFFFFFF, nil, 0)-1;
 GetCursorPos(P);
 L:=FindControl(WindowFromPoint(P));
 try
  for I:=0 to N do begin
   SetLength(FlNm, MAX_PATH);
   DragQueryFile(Mes.Drop, I, PChar(FlNm), MAX_PATH);
   FlNm:=PChar(FlNm);
   AddFile(FlNm, L);
  end;
  if N>=0 then AddFile("<<***Добавлено "+IntToStr(N+1)+" файл(а,ов)***>>", L);
 finally DragFinish(Mes.Drop); end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var N, N1: Integer;
begin
 ListBox1.Clear;
 N1:=ParamCount;
 for N:=1 to N1 do AddFile(ParamStr(N), ListBox1);
 if N1>0 then AddFile("<<***Добавлено "+IntToStr(N1)+" файл(а,ов)***>>", ListBox1);
 DragAcceptFiles(Handle, True);
end;

end.


 
{RASkov} ©   (2008-10-09 11:38) [2]

> [0] D@nger   (09.10.08 10:53)
> Нашел апи функцию DragQueryPt ..

Может всетаки DragQueryPoint ?
 if DragQueryPoint(Mes.Drop, P) then ShowMessage(Format("x=%d y=%d", [P.X, P.Y]))
  else ShowMessage("Oops");

P: TPoint;


 
D@nger   (2008-10-09 13:38) [3]

Всем ОГРОМНОЕ спасибо за ответы, в особенности RASkov"у .
L:=FindControl(WindowFromPoint(P)); - это то что мне нужно ...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
8-1187769846
ZMRaven
2007-08-22 12:04
2008.11.16
Поганое изображение.


15-1221719515
Azize
2008-09-18 10:31
2008.11.16
Китайцы создали компьютер мощностью 230 триллионов операций в сек


2-1223030545
Alex7
2008-10-03 14:42
2008.11.16
Наследование от главной формы


2-1223343510
Developer
2008-10-07 05:38
2008.11.16
Несколько Form в проекте,Показ Формы.


2-1223495398
АгатаКристи
2008-10-08 23:49
2008.11.16
IP, Основной Шлюз, DNS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский