Форум: "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