Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование и чтение и буфера Windows 
V
    Опции темы
NieL
Дата 23.4.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 10.2.2008

Репутация: нет
Всего: 1



Господа программисты, помогите с заданием: Как можно скопировать файл (любой) в буфер операционной системы . По сути сделать то же, что и CTRL+C и CTRL+V. Заранее спасибо
PM MAIL   Вверх
Poseidon
Дата 24.4.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Копирование (DRKB):
Код
uses 
ShlObj, ClipBrd; 
 
procedure CopyFilesToClipboard(FileList: string); 
var 
DropFiles: PDropFiles; 
hGlobal: THandle; 
iLen: Integer; 
begin 
iLen := Length(FileList) + 2; 
FileList := FileList + #0#0; 
hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, 
   SizeOf(TDropFiles) + iLen); 
if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.'); 
begin 
   DropFiles := GlobalLock(hGlobal); 
   DropFiles^.pFiles := SizeOf(TDropFiles); 
   Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen); 
   GlobalUnlock(hGlobal); 
   Clipboard.SetAsHandle(CF_HDROP, hGlobal); 
end;


procedure TForm1.Button1Click(Sender: TObject); 
begin 
CopyFilesToClipboard('C:\Bootlog.Txt'#0'C:\AutoExec.Bat'); 
end; 


Это сообщение отредактировал(а) Poseidon - 24.4.2008, 08:31


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
neweraser
Дата 25.4.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



Стандартный вопрос, такой же ответ  smile , данная тема уже не раз повторяется на форуме, мне когда-то дали такой же ответ, я им и сейчас пользуюсь, но совершенно не понимаю код, можно сделать к нему комментарии?
и еще, существует ли какой-нибудь аналогичный код, только полегче и попроще?  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Antony41
Дата 28.9.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Да да да... А еще очень интересует как это переделать под delphi 2009...?
PM MAIL   Вверх
Antony41
Дата 29.9.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Нашёл описание, но вот только на C++

Код

int CopyFilesToClipboard(char *my_string)
{
// возвращаем 0 если ошибка, 1 если все ок

   //открываем буфер
   if(!OpenClipboard(NULL)) return 0;
   //очищаем буфер
   EmptyClipboard();
   int SizeLine(1);
   SizeLine = 1;
   //Определяем размер
   SizeLine+= strlen(my_string)+1;
   //Выделяем память
   HGLOBAL  hGlobal = GlobalAlloc(GMEM_SHARE|GMEM_MOVEABLE|GMEM_ZEROINIT,
                              sizeof(DROPFILES) + SizeLine);
   if (!hGlobal) { return 0; }
   //Создаем структуру
   DROPFILES *MyDropFiles = (DROPFILES*)GlobalLock(hGlobal);
   //записываем данные в структуру
   SizeLine = MyDropFiles->pFiles = sizeof(DROPFILES);
   strcpy((char*)MyDropFiles + SizeLine, my_string);
   SizeLine+= strlen(my_string) + 1;
   GlobalUnlock(hGlobal);
   //записываем данные в буфер
   if (!SetClipboardData(CF_HDROP, hGlobal)) return 0;
   //закрываем буфер
   CloseClipboard();

    return 1;
}



Пример вызова функции
Код

CopyFilesToClipboard("C:\\1112.xls"); 


Примерно понятно, но почему на D2009 не работает?

Это сообщение отредактировал(а) Antony41 - 29.9.2009, 17:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1015 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.