Главная страница
    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.46 MB
Время: 0.039 c
3-1171369985
Layner
2007-02-13 15:33
2007.05.06
Можно ли через ADOConnection узнать все SQL запросы


3-1171348665
xKL
2007-02-13 09:37
2007.05.06
Как выловить клик мыши на DBGrid?


2-1176454419
ALS
2007-04-13 12:53
2007.05.06
Access и региональные настройки


2-1176584879
Ezorcist
2007-04-15 01:07
2007.05.06
Как правильно вести лог событий работы программы?


3-1171378156
dest81
2007-02-13 17:49
2007.05.06
ib и удаленный доступ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский