Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2008, 23:39   #1
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию Drag & Drop + HBitmap

Собственно как видно из топика, сколько раз не брался столько и бросал. Но вот щас решился, конечно могу я сам свое окно сделать и с эимитировать такой Drag&Drop но лучше взаимодействовать с системой. Собственно проблема не то что в самом Drag&Drop а в том как сделать чтобы я мог указывать при перетаскивании из моей проги куда-либо ту картинку под курсором во время перетаскивания. Нашел ссылку на этом форуме но там .NET и вообще немного не допонял смысла, как я понял вроде там создается курсор с этой самой картинок и указывается как текущий в системе. Или все же есть вариант ? Если через курсор то я уж лучше руками все сделаю без системы.
BOBAH13 вне форума Ответить с цитированием
Старый 05.12.2008, 11:40   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

когда тиз твоей проги что-то перетаскивают так есть стандартный значок, тебе надо его заменить?
rpy3uH вне форума Ответить с цитированием
Старый 05.12.2008, 23:48   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вопрос у вас конечно такой с заковыркой. Я в теории спрашиваю как мне сделать Drag&Drop чтобы при перетаскивании возле курсора была "картинка" того что я перетаскиваю.
BOBAH13 вне форума Ответить с цитированием
Старый 06.12.2008, 14:29   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

сообщение TVM_CREATEDRAGIMAGE пробовал? (или TreeView_CreateDragImage). После этого сообщения мы получаем хендл имидж_листа.

это читал? http://www.wasm.ru/article.php?article=1001019
посмотри что там написано про сообщение TVM_CREATEDRAGIMAGE
rpy3uH вне форума Ответить с цитированием
Старый 14.02.2009, 23:54   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Чтобы не создавать подобную, тему хочу продолжить. Дело в том что, я создал прием файлов в моем приложении.

Код:
function TgdDropTarget.Drop(const dataObj: IDataObject; grfKeyState: Integer;
  pt: TPoint; var dwEffect: Integer): HResult;
var
  FETC: TFormatETC;
  STGM: TSTGMedium;
  fileDropped: array [0..MAX_PATH] of char;
  Count, i: Integer;
begin
  Result := S_OK;
  if (FDataObj = NIL) then
  begin
    dwEffect := DROPEFFECT_NONE;
    Exit;
  end;

  with FETC do
  begin
    cfFormat := CF_HDROP;
    ptd := NIL;
    dwAspect := DVASPECT_CONTENT;
    lindex := -1;
    tymed := TYMED_HGLOBAL;
  end;

  if (dataObj.GetData(FETC, STGM) = S_OK) then
  begin

    //ShowMessageFmt('%d', [STGM.tymed]);
    
    if (STGM.tymed = TYMED_HGLOBAL) then
    begin
      Count := DragQueryFile(STGM.hGlobal, MAXDWORD, NIL, 0);
      
      for i:= 0 to Count - 1 do
      begin
        DragQueryFile(STGM.hGlobal, i, fileDropped, SizeOf(fileDropped));
      end;

      DragFinish(STGM.hGlobal);

    end;  
    
    ReleaseStgMedium(STGM);
  end;

  dwEffect := DROPEFFECT_LINK;
end;
Да, работает на отлично со всеми файлами в системе. (пример как подобное реализовать найти не сложно).

Дело в том, что к примеру объекты шела (таже корзина) просто не проходит
Код:
if (dataObj.GetData(FETC, STGM) = S_OK) then
как быть ? Как верно составить FETC чтобы получить ID объекта ?
BOBAH13 вне форума Ответить с цитированием
Старый 06.07.2009, 15:10   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Решил не создавать новую тему.
Проблема состоит в том, что допустим в какой-то момент времени мне захотелось:
1. Определить позицию курсора
2. Определить окно под курсором
3. Передать по методу Drag&Drop этому окну некоторые файлы (пути к файлам).

Собственно вот код, в теории должно работать, но какому окну не пытался это передать (к примеру, просто навести курсор на десктоп, даже пытался прямо указывать GetDesktopWindow).

Delphi 2009.

Код:
const
  Path = 'C:\boot.ini'; // just for fun :)

var 
  Wnd: HWND;
  DropData: PDropFiles;
  Global: HGLOBAL;
begin
  Wnd := WindowFromPoint(Mouse.CursorPos);

  //  if (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_ACCEPTFILES = WS_EX_ACCEPTFILES) then
  // тут я не уверен надо ли ?
  // begin
    Global := GlobalAlloc(GMEM_SHARE or GHND or GMEM_ZEROINIT,
      SizeOf(TDropFiles) + (Length(Path) + 1) * 2{Wide Char});

     DropData := GlobalLock(Global);
     DropData^.pFiles := SizeOf(TDropFiles);
     DropData^.fWide := True;
     DropData^.pt := Mouse.CursorPos; // нужно ли ?

     StrCopy(PWChar(Integer(DropData) + SizeOf(TDropFiles)), Path);

     GlobalUnlock(Global);

     SendMessage(Wnd, WM_DROPFILES, Global, 0);

     GlobalFree(Global);
end;
Что еще интересно, брал Global как HDROP - и проверял через DragQueryFile - возращает путь нормально.

Помогите
Спасибо. Владимир.
BOBAH13 вне форума Ответить с цитированием
Старый 19.07.2009, 00:17   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Приветствую.
Щас данный вопрос не в топ листе но все же.
Яркий пример реализации - попробуйте "перетащить" иконку на рабочем столе как такой Drag&Drop реализовать ? Принимаю любые источники будь то статьи или коды на английском или русском языке (сам уже обыскался, не могу найти). Спасибо.
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag&Drop-continue. Icons MAcK Общие вопросы .NET 2 16.09.2008 12:59
drag&drop задание координат MAcK Общие вопросы .NET 5 15.09.2008 15:26
Drag&Drop в ListBox'ах MAKEDON Общие вопросы Delphi 3 21.08.2008 13:12
Drag&Drop по сети в Delphi vovan-brn Помощь студентам 0 28.05.2008 23:12
Drag&Drop shtuceron Общие вопросы Delphi 3 09.04.2008 19:04