Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2007.05.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
2-1176576148
unregistered_member
2007-04-14 22:42
2007.05.06
Очистить строку от спецсимволов


3-1171441590
Монг
2007-02-14 11:26
2007.05.06
Компонет cxGrid


2-1176444828
trula
2007-04-13 10:13
2007.05.06
excel вставка рисунка под нужным углом в нужную точку


1-1173285225
DevilDevil
2007-03-07 19:33
2007.05.06
компонент TScrollBox


3-1171881112
EvChul
2007-02-19 13:31
2007.05.06
Как узнать о завершении асинхронной операции.