|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.02.2012, 11:39 | #1 |
Пользователь
Регистрация: 02.01.2010
Сообщений: 58
|
Как вырезать файл в буфер обмена?
Нужно вырезать файл в буфер обмена в моей программе. Так, чтобы потом можно было этот вырезанный файл вставить в любом файловом менеджере (Ctrl+V): проводник, TotalCommander, DubleCommander...
в прикреплённым ниже файле: все функции для копирования/вырезки/вставки через буфер обмена: http://forum.sources.ru/index.php?ac...ttach_id=16203 Пользуйтесь на здоровье!
мой сайт: kuzduk.ru
Последний раз редактировалось kuzduk; 17.02.2012 в 11:54. |
10.08.2012, 23:32 | #2 |
Пользователь
Регистрация: 02.01.2010
Сообщений: 58
|
Модуль усовершенсвовал. Качаем и радуемся жизни: http://kuzduk.narod.ru/UIP/kuShell.pas
Также заходим на мой сайт там много полезных модулей: http://kuzduk.narod.ru/_tvor.html
мой сайт: kuzduk.ru
|
11.08.2012, 00:06 | #3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Хорошо. Но о комбинации Ctrl+X(команда "вырезать" в контекстном меню) вы не слышали?
Посмотрел KuModul функций много и есть полезные, НО комментариев нет даже к функционалу, а они должны быть как минимум! Молчу уже об комментах к коду... Кроме того, есть некоторые поправки к некоторым, мягко говоря, функциям, которые сделаны убого.... Про KuLanguage я молчу, т.к. даже боюсь спрашивать, под каким кайфом его писали О том, что все контейнерные компоненты(формы, панели и.т.д.) имеют методы перебора содержимого и обращения к его методам, а уж тем более о RTTI, вы не слышали.... Посмотрел все исходники. Увы где-то "странная" реализация, может это из-за того, что я вижу в несколько другом свете, более простой подход к решению некоторых задач в исходниках. Прочитал про стиль комментирования кода, УВЫ... исходя из того, что в ваших модулях вообще нет осмысленных комментариев/ описаний того, чтоже делает такая-то функция/метод(молчу о комментированном коде т.к. таковой вообще не наблюдается) выводы сами сделаете, по своим же понятиям. |
11.08.2012, 00:46 | #4 | ||||||||
Пользователь
Регистрация: 02.01.2010
Сообщений: 58
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Жду ответов на мои вопросы по поводу аргументированной критики с примерами как и что keit сделать - буду очень признателен.
мой сайт: kuzduk.ru
Последний раз редактировалось kuzduk; 11.08.2012 в 00:50. |
||||||||
11.08.2012, 00:51 | #5 |
Пользователь
Регистрация: 02.01.2010
Сообщений: 58
|
В этой теме давайте будем общаться только про модуль kuShell - про вырезания/копирования и вставляния.
Я потом отдельные темы создам по другим модулям. По другим модулям всю критику пожалуйста в личку или на почту
мой сайт: kuzduk.ru
|
11.08.2012, 01:14 | #6 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
ComponentCount Components ControlCount Controls со всеми вытекающими... Код:
Об Run-Time Type Information в сети много написано. Да и поиск по форуму никто не отменил. Цитата:
Код:
я бы написал её вот так: Код:
Далее по KuShell.... Код:
2. Также есть нуль-терминальные строки именуемые PChar. Посему работа функции сводится к простому: Result:=PChar(Str.Text); Так же есть мнение, что система сама заботится о признаке конца строки при помещении текста в буфер. По поводу работы БО(Буффер обмена). Не надо его очищать ибо кроме текста тамможет находится куча всего(картинки к примеру). И система сама разбирается, что и куда можно вставить без последствий и epic win'а. Нету блоков Try Finally, Try Except. Последний раз редактировалось Человек_Борща; 11.08.2012 в 01:21. |
||
11.08.2012, 09:34 | #7 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
По интерфейсу модуля...
Shell_Str/Shell_DataOperations не имеет смысла выносить в interface, поскольку это низкоуровневые функции, которыми пользуются другие (высокоуровневые) функции модуля. Неочевидное название Clipboard_DataSend. Возможно, было бы лучше использовать имена вроде ClipboardFilesCopy/ClipboardFilesPaste. Неправильно спроектирована ClipBoard_GetDataList: 1). Непонятно, где взять описатель для её параметра. Лучше, чтобы она получала параметр сама. 2). Возврат создаваемого объекта результатом функции - плохое решение. Неочевидный параметр MoveType. Итого: Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
11.08.2012, 10:11 | #8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
По реализации...
Нестандартный стиль оформления. Отсутствует обработка ошибок. ClipBoard_GetDataList: Перепутаны байты и символы в вызове DragQueryFile. По этой же причине, статический буфер - не самая удачная идея. Итого: Код:
Вместо if h <> 0 then { большой кусок кода } лучше использовать if h = 0 then exit; Утечка памяти (не удаляется TStringList) из-за вышеупомянутого неверного дизайна ClipBoard_GetDataList. Вместо Copy(Sourse, 0, Pos(#0, Sourse) - 1) лучше просто взять первый файл в списке от ClipBoard_GetDataList. Вместо IncludeTrailingBackslash нужно использовать IncludeTrailingPathDelimiter. При сравнении имён файлов (и путей) нужно использовать не "равно", а SameFileName. Обе ветки if можно (и нужно) объединить, введя параметризацию. Clipboard_SendType не используется нигде более и должна быть сделана локальной. Аналогично, case нужно параметризировать и свернуть. Clipboard_SendType: Не понятно, чего это здесь используется OpenClipboard, хотя в остальном коде - Clipboard.Open. Вместо 'Preferred DropEffect' нужно использовать CFSTR_PERFORMEDDROPEFFECT. Вообще, я не спец в буфере обмена, но зачем надо перечислять форматы, если можно просто сделать IsClipboardFormatAvailable/Clipboard.HasFormat? Итого: Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
11.08.2012, 10:17 | #9 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Вместо волшебных констант 2, 5 и т.п. нужно использовать DROPEFFECT_NONE, DROPEFFECT_COPY, DROPEFFECT_MOVE, DROPEFFECT_LINK. И откуда там вообще 5 взялось?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
12.08.2012, 16:00 | #10 | ||||||||||
Пользователь
Регистрация: 02.01.2010
Сообщений: 58
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Shell_DataOperations(Shell_Str(Sour seStrs), Shell_Str(TargetStrs), FO_COPY, 0) или удалить: Shell_DataOperations( Shell_Str(SourceStrs), 'КОРЗЫНА!', FO_DELETE, FOF_ALLOWUNDO ) Цитата:
Цитата:
Цитата:
мой сайт: kuzduk.ru
|
||||||||||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
скопировать файл в буфер обмена | Rolls | Общие вопросы Delphi | 15 | 17.02.2012 01:03 |
Как макросом Vba определить содержит ли буфер обмена рисунок? | roborrr | Microsoft Office Excel | 2 | 27.02.2011 14:24 |
КАк поместить файл в буфер обмена? | Paul Hindenburg | Общие вопросы Delphi | 1 | 16.07.2009 10:17 |
Как очистить буфер обмена? | StasSv | Microsoft Office Excel | 2 | 11.08.2008 17:38 |