Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1184057373
koha
2007-07-10 12:49
2007.08.05
Помогите разобраться с ошибкой


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


15-1184063617
IzvR@T
2007-07-10 14:33
2007.08.05
Пополнить WMR(Z) с помощью карты Visa


2-1183880553
Скарамуш
2007-07-08 11:42
2007.08.05
Привязка переменной к объекту.


15-1184036630
Искатель
2007-07-10 07:03
2007.08.05
Есть ли альтернативы TColorDialog ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский