скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Переслать данные в другую программу методом Drag-and-Drop



Оформил: DeeCo

// Autor: Hagen Reddmann

         uses
   ShellAPI;

 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;

 function MyEnum(Wnd: hWnd; Res: PInteger): Bool; stdcall;
 // search for a edit control with classname 'TEditControl' 
// suche ein child fenster mit klassennamen 'TEditControl' 
var
   N: string;
 begin
   SetLength(N, MAX_PATH);
   SetLength(N, GetClassName(Wnd, Pointer(N), Length(N)));
   Result := AnsiCompareText('TEditControl', N) <> 0;
   if not Result then Res^ := Wnd;
 end;

 // Example: Open msdos.sys in Delphi's Editor window 
// Beispiel: msdos.sys im Delphi Editor offnen 
procedure TForm1.Button1Click(Sender: TObject);
 var
   Wnd: HWnd;
   Drop: hDrop;
 begin
   // search for Delphi's Editor 
  // suche Delphis Editor Fenster 
  EnumChildWindows(FindWindow('TEditWindow', nil), @MyEnum, Integer(@Wnd));
   if IsWindow(Wnd) then
   begin
     // Delphi's Editor found. Open msdos.sys 
    // Delphis editor gefunden, also offne msdos.sys 
    Drop := MakeDrop(['c:\msdos.sys']);
     if Drop <> 0 then PostMessage(Wnd, wm_DropFiles, Drop, 0);
     // Free the memory? 
    // Speicher wieder freigeben? 
    GlobalFree(Drop);
   end;
 end;





Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook