Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как послать данные другому приложению используя auto-drag-n-drop? 
:(
    Опции темы
Poseidon
Дата 18.5.2005, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Код
uses 
  ShellAPI; 

function MakeDrop(const FileNames: array of string): THandle; 
// Creates a hDrop Object 
var 
  I, Size: Integer; 
  Data: PDragInfoA; 
  P: PChar; 
begin 
  // Calculate memory size needed 
  Size := SizeOf(TDragInfoA) + 1; 
  for I := 0 to High(FileNames) do 
    Inc(Size, Length(FileNames[I]) + 1); 
  // allocate the memory 
  Result := GlobalAlloc(GHND or GMEM_SHARE, Size); 
  if Result <> 0 then 
  begin 
    Data := GlobalLock(Result); 
    if Data <> nil then 
      try 
        // fill up with data 
        Data.uSize := SizeOf(TDragInfoA); 
        P  := PChar(@Data.grfKeyState) + 4; 
        Data.lpFileList := P; 
        // filenames at the at of the header (separated with #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' 
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 
procedure TForm1.Button1Click(Sender: TObject); 
var 
  Wnd: HWnd; 
  Drop: hDrop; 
begin 
  // search for Delphi's Editor 
  EnumChildWindows(FindWindow('TEditWindow', nil), @MyEnum, Integer(@Wnd)); 
  if IsWindow(Wnd) then 
  begin 
    // Delphi's Editor found. Open msdos.sys 
    Drop := MakeDrop(['c:\msdos.sys']); 
    if Drop <> 0 then PostMessage(Wnd, wm_DropFiles, Drop, 0); 
    // Free the memory? 
    GlobalFree(Drop); 
  end; 
end; 



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0745 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.