Показать сообщение отдельно
  #1  
Старый 17.08.2011, 23:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию Дочерний диалог в диалоге

Имеется диалог, в который встроен ещё один (дочерний), напоминает SheetPage. На дочернем диалоге имеется контрол Edit (не TEdit) со стилем WS_EX_ACCEPTFILES, его я сабклассирую, чтобы перхвать очередь сообщений и перехватить сообщение WM_DROPFILES. Проблема в том, что именно это сообщение и не ловится. Если я ставлю ловушку на весь диалог, то сообщение в диалоге нормально ловится. Кто знает, в чём загвоздка?
Код:
 
  // сабклассирование Edit-а
  ...
  case Msg of
    WM_DROPFILES :
    try
      if DragQueryFile(wParam, 0, FileName, MAX_PATH) > 0 then
      begin
        SendMessage(GetParent(Wnd), WM_COMMAND, ID_BTNFILE, 0);
        DragFinish(wParam);
        Exit;
      end;
    finally
      DragFinish(wParam);
    end;
  end;
  ...

  // дочерний диалог
  WM_INITDIALOG :
  begin
    ...
    // не нужно, но так на всякий случай
    // в ресурсном файле, этот флаг уде установлен
    DragAcceptFiles(GetDlgItem(hWndDlg, ID_EDTFILE), True);
    // subclass the drag-drop edit control
    hEditPrev := Pointer(GetWindowLong(GetDlgItem(hWndDlg, ID_EDTFILE), GWL_WNDPROC));
    SetWindowLong(GetDlgItem(hWndDlg, ID_EDTFILE), GWL_WNDPROC, Longint(@EditWndProc));
    SetWindowLong(GetDlgItem(hWndDlg, ID_EDTFILE), GWL_EXSTYLE, GetWindowLong(GetDlgItem(hWndDlg, ID_EDTFILE), GWL_EXSTYLE) or WS_EX_ACCEPTFILES);
    ...
  end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием