Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.05;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2007.08.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
3-1177407202
Павел Калугин
2007-04-24 13:33
2007.08.05
Посоветуйте как лучше организовать календарь


1-1179831235
parasolka
2007-05-22 14:53
2007.08.05
Работа с несколькими мониторами.


15-1183203882
Познающий
2007-06-30 15:44
2007.08.05
Ring0


2-1184063392
AZIZE
2007-07-10 14:29
2007.08.05
Вопрос на засыпку


2-1183897691
Gringoire
2007-07-08 16:28
2007.08.05
Работа с буфером обмена