Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.200.179.138] |
|
Сообщ.
#1
,
|
|
|
kuDrag Модуль Delphi, добавив который вы сможете перетаскивать файлы из своей программы в другие приложения. Можно, например, перетащить файл из своей программы в проводник.
скачать: http://kuzduk.zz.mu/prog/kuDragDemo.zip Подскажите пожалуйста, как допрограммировать kuDrag чтоб: при перетаскивании файлов в проводник, например на рабочий стол, при удержании Shift - вырезалось, а при Alt - ярлык соpдавался? |
Сообщ.
#2
,
|
|
|
хм... вопрос давний но актуальный.
|
Сообщ.
#3
,
|
|
|
Цитата kuzduk @ Подскажите пожалуйста, как допрограммировать чтоб: при перетаскивании при удержании Shift - вырезалось, а при Alt - ярлык соpдавался? уточним немного: 1) куда вырезается? 2) в каком месте создается ярлык? |
Сообщ.
#4
,
|
|
|
при перетаскивании из kuDrag в проводник, например на рабочий стол, при удержании Shift - вырезалось, а при Alt - ярлык соpдавался?
|
Сообщ.
#5
,
|
|
|
Я тоже не понял, откуда чего должно вырезаться
|
Сообщ.
#6
,
|
|
|
в первом сообщении пример работы kuDrag: вы можете схватить файлы в FileListBox и перетащить их на рабочий стол или в папку в проводнике - они скопируются. Хотелось бы чтоб при удержании шифт они вырезались а при аль - ярлычились.
|
Сообщ.
#7
,
|
|
|
Разрешите угадать))
constructor TkuDrag.Create(AOwner: TComponent); begin inherited Create(AOwner); FDropEffects := [deCopy]; end; Не этот ли "deCopy" причина всех ваших бед? Предлагаю заменить на deMove, либо расширить конструктор, чтобы передавать аргументом текущий флаг для FDropEffects. Я не знаю делфей, поэтому не смогу сходу написать вам перегруженный конструктор, если попросите у делфистов, они смогут помочь) Второй вариант - менять пропертю DropEffects непосредственно в вашем методе procedure kuDragDo(itOwner: TComponent; Directory: string; FileList: TStrings; Shift: TShiftState; X, Y: Integer); Результат со свойством будет выглядеть примерно так: procedure kuDragDo(itOwner: TComponent; Directory: string; FileList: TStrings; Shift: TShiftState; X, Y: Integer); var kuDrag1: TkuDrag; begin if _kuDragCan = false then exit; if (ssLeft in Shift) = false then exit; if (Abs(X - _kuDragPoint1.X) < 5) and (Abs(Y - _kuDragPoint1.Y) < 5) then exit; kuDrag1 := TkuDrag.Create(itOwner); if(ssShift in Shift) then begin kuDrag1.DropEffects := [deMove]; // Shift - помечаем файлы на перемещение end; else if(ssAlt in Shift) then begin kuDrag1.DropEffects := [deLink]; // Alt - помечаем файлы на создание ярлыков end; kuDrag1.DragDrop(Directory, FileList); kuDrag1.Free; _kuDragCan := False; end; |
Сообщ.
#8
,
|
|
|
Вырезание - в устоявшейся терминологии это работа с буфером обмена (копирование в буфер с удалением из источника после вставки).
А то, что ты хочешь - это кастомная обработка после завершения дропа. |