вторник, 6 января 2015 г.

Drag&drop - это модель переноса данных общего назначения, не привязанная к каталогам Проводника

Это перевод Drag and drop is a general purpose transfer model, not exclusive to Explorer directories. Автор: Реймонд Чен.

Если вы спроектировали свою программу таким образом, что она подразумевает, что пользователь может перетаскивать ваш объект только в каталог файловой системы, то вы уже проиграли.

piers хочет определить назначение операции перетаскивания. Однако из постановки вопроса становится ясно, что piers, на самом деле, заинтересован в пути назначения. Но кто сказал, что назначением будет каталог? Пользователь может перетащить объект в сообщение e-mail, бросить на FTP-сайт, на Web-сайт (через Web-папки), или даже в каталог операционной системы внутри виртуальной машины!

Следующее уточнение ещё больше запутывает. Если пользователь перетащит файл на FTP или другую виртуальную папку, то как ваша программа может перезапустить закачку? Вы же не знаете пароля для FTP. Вы не знаете как перезапустить виртуальную машину и войти в неё тем же пользователем. А даже если вы сможете это сделать, то вы понятия не имеете, как писать в папку внутри виртуальной машины - только менеджер виртуальной машины знает, как это сделать. В мире сегодня существует бесчисленное множество вариантов виртуальных папок. Я крайне сомневаюсь, что вы знаете как запихать свои данные в каждый вариант виртуальной папки.

Как только пользователь перетащит объект, сам процесс переноса - это личное дело только источника (source) и назначения (target). И вы, как источник, не можете просто взять и сказать: "теперь командую я", потому что даже если бы назначение согласилось, то вы всё ещё остаётесь с проблемой, а как же это осуществить.

Какова моя рекомендация?†

Объект перетаскивания (data object) в цикле drag/drop должен следовать стандартному протоколу Оболочки, так что пользователь сможет перетащить объект в e-mail, FTP и т.д.‡

Для дополнительного шика, я бы создал ловушку drag/drop (drag/drop hook). Пользователь сможет перетащить объект, используя правую кнопку мыши°. Когда пользователь отпустит кнопку мыши, появится контекстное drop-меню - вместе с вашей ловушкой. Ловушка может создать пункт вроде "Скопировать с КрутойПрограммой" (конечно же, пункт создаётся ловушкой только в случае, если объект данных идентифицировал себя как созданный в КрутойПрограмме). Если пользователь выбирает "Скопировать с КрутойПрограммой", то вы можете выполнить своё копирование с дополнительными возможностями.

Уголок зануды

† Заметьте, что я не утверждаю, что все продукты Microsoft следуют моим рекомендациям. Также заметьте, что это мои личные рекомендации, не являющиеся официальной позицией Корпорации Microsoft.

‡ И, прежде чем реализовывать не стандартный протокол передачи объекта, вам нужно понимать стандартный протокол.

° Точнее: вторичную кнопку мыши, поскольку вы могли поменять кнопки мыши местами.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.