Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

Работа с буфером обмена   Найти похожие ветки 

 
leonidus ©   (2006-12-08 13:24) [0]

Суть такая, я перехватываю факт изменения содержимого буфера обмена и сохраняю буфер на диск в файл, а потом в нужный момент читаю из файла и загружаю в буфер, вот этой функцией:

procedure TForm1.ClipbrdLoadFromFile(FileClipbrdNum:integer);
var
 h: THandle;
 p: Pointer;
 CBF: Cardinal;
 CBBlockLength: Cardinal;
 i, CBCount: Integer;
 FileStream: TFileStream;
begin
 if OpenClipBoard(0) then
 begin
   FileStream := TFileStream.Create(copy(application.ExeName,1,lastdelimiter("\",application.ExeN ame)-1)+
                                    DirTmpPrefix+FileClipbrdName+inttostr(FileClipbrdNum)+"."+FileClipbrdExt, fmOpenRead);
   if FileStream.Size = 0 then Exit;

   FileStream.Read(CBCount, sizeOf(Integer));
   if CBCount = 0 then Exit;

   for i := 1 to CBCount do
   begin
     FileStream.Read(CBF, SizeOf(Cardinal));
     FileStream.Read(CBBlockLength, SizeOf(Cardinal));
     h := GlobalAlloc(GMEM_MOVEABLE or GMEM_SHARE or GMEM_ZEROINIT,CBBlockLength);
     if h > 0 then
     begin
       p := GlobalLock(h);
       if p = nil then GlobalFree(h)
       else
       begin
         FileStream.Read(p^, CBBlockLength);
         GlobalUnlock(h);
         SetClipboardData(CBF, h);
       end;
     end;
   end;

   FileStream.Free;
   CloseClipBoard;
 end;
end;

так вот вопрос, как мне сделать так что-бы я мог в буфер добавить сразу несолько элементов, т.е. считал один файл, добавил его в буфер, считал второй, тоже добавил в буфер в добавок к первому, а не поверх?


 
Rouse_ ©   (2006-12-08 13:58) [1]

Никак, буффер знает только то, что в него поместили. Это не жесткий диск, это место где временно храниться некая информация. Либо читай все файлы в байтовый массив а потом этот массив разом помещай, либо читай то что уже есть в буффере, добавляй к нему новую информацию и помещай обратно...


 
leonidus ©   (2006-12-08 14:30) [2]

Ну вот про чтение в байтовый массив я и думал, а как это реализовать подкорректировав данную процедуру?


 
Rouse_ ©   (2006-12-08 14:35) [3]

GlobalAlloc в начале, GlobalReAlloc при считывании файла, ну и про позицию не забывать. SetClipboardData после успешного считывания всего


 
leonidus ©   (2006-12-08 15:01) [4]

Не совсем понял, можно примерчик?



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.042 c
15-1176060159
Суслик
2007-04-08 23:22
2007.05.06
Дайте модуль grids.pas от д7 или д6


9-1147765159
Ньюб2
2006-05-16 11:39
2007.05.06
DelphiX сглаживание


2-1176295679
Ezorcist
2007-04-11 16:47
2007.05.06
Отреагировать на ошибку 10061 TClientSocket-a


15-1175851704
Vlad Oshin
2007-04-06 13:28
2007.05.06
Как прочитать из VBA excel ключ реестра?


15-1176167708
Riply
2007-04-10 05:15
2007.05.06
Ищу удаленную работу.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский