Форум: "Начинающим";
Текущий архив: 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.006 c