![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Переслать данные в другую программу методом Drag-and-DropDelphi , Синтаксис , Drag and DropПереслать данные в другую программу методом 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; Программный код на Delphi демонстрирует реализацию функциональности Drag-and-Drop в приложении Windows. Цель - передача данных из одного программного обеспечения в другое путем перетаскивания файлов или других типов данных. Вот разбивка кода:
Альтернативное решение - использовать компонент Вот упрощенная версия кода с использованием
Код создает компонент Пересылка данных из программы в другую программу методом Drag-and-Drop: пример кода на Delphi. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Drag and Drop ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |