Форум: "WinAPI";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
ВнизDragAcceptFiles Найти похожие ветки
← →
sia © (2007-02-21 18:23) [0]Просветите, пожалуйста по функции.
Для того, что бы система позволила мне, к примеру, из проводника перетащить файл на мою форму, я у себя пишу DragAcceptFiles(Handle, True); , где Handle - это мое окно. При этом и курсор при перетаскивании рисуется как crDrag.
Можно ли воспользоваться этой функцией для отображения курсора как crDrag при перетаскивании обратно - из моего окна на чужое, например проводник? И как это сделать? Что передавать Handle?
← →
TRUNK © (2007-02-22 10:22) [1]
> Можно ли воспользоваться этой функцией для отображения курсора
> как crDrag при перетаскивании обратно
Нет. Смотри в сторону интерфейса IDropSource.
← →
SlymRO (2007-02-22 12:39) [2]
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 }
public
procedure WMDROPFILES(var Message: TMessage); message WM_DROPFILES;
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMDROPFILES(var Message: TMessage);
var
hDrop:THandle;
i,c:LongWord;
s:string;
begin
hDrop:=Message.WParam;
c:=DragQueryFile(hDrop,LongWord(-1),PChar(nil),0);
for i:=0 to c-1 do
begin
SetLength(s,MAX_PATH);
SetLength(s,DragQueryFile(hDrop,i,PChar(s),MAX_PATH));
Memo1.Lines.Add(s);
end;
DragFinish(hDrop);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle,true);
end;
end.
← →
SlymRO (2007-02-22 12:43) [3]Так кошернее:
begin
hDrop:=Message.WParam;
c:=DragQueryFile(hDrop,LongWord(-1),PChar(nil),0);
for i:=0 to c-1 do
begin
SetLength(s,DragQueryFile(hDrop,i,PChar(nil),0));
DragQueryFile(hDrop,i,PChar(s),Length(s));
Memo1.Lines.Add(s);
end;
DragFinish(hDrop);
end;
← →
sia © (2007-02-22 13:48) [4]
> SlymRO
это все прекрасно работает для drag drop из проводника в свою программу.
меня интересует обратное - из моей проги в проводник.
← →
MBo © (2007-02-22 13:49) [5]>меня интересует обратное - из моей проги в проводник.
уже подсказали:
TRUNK © (22.02.07 10:22) [1]
← →
DVM © (2007-02-22 15:57) [6]
> меня интересует обратное - из моей проги в проводник.
Можно послать WM_DROPFILES чужой программе.
← →
sia © (2007-02-22 17:28) [7]
> DVM ©
как?
← →
DVM © (2007-02-22 17:38) [8]
function MakeDrop(const FileNames: array of string): THandle;
// Creates a hDrop Object
// erzeugt ein hDrop Object
var
I, Size: Integer;
Data: PDragInfoA;
P: PChar;
begin
// Calculate memory size needed
// berechne notwendig Speichergro?e
Size := SizeOf(TDragInfoA) + 1;
for I := 0 to High(FileNames) do
Inc(Size, Length(FileNames[I]) + 1);
// allocate the memory
// alloziere den speicher
Result := GlobalAlloc(GHND or GMEM_SHARE, Size);
if Result <> 0 then
begin
Data := GlobalLock(Result);
if Data <> nil then
try
// fill up with data
// fulle daten
Data.uSize := SizeOf(TDragInfoA);
P := PChar(@Data.grfKeyState) + 4;
Data.lpFileList := P;
// filenames at the at of the header (separated with #0)
// am ende des headers nun die filenamen getrennt mit #0
for I := 0 to High(FileNames) do
begin
Size := Length(FileNames[I]);
Move(Pointer(FileNames[I])^, P^, Size);
Inc(P, Size + 1);
end;
finally
GlobalUnlock(Result);
end
else
begin
GlobalFree(Result);
Result := 0;
end;
end;
end;
.....
Drop: hDrop;
....
Drop := MakeDrop([ParamStr(1)]);
if Drop <> 0 then PostMessage(hMainWin, wm_DropFiles, Drop, 0);
GlobalFree(Drop);
← →
DVM © (2007-02-22 17:39) [9]там только вместо ParamStr(1) свои файлы.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c