Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Работа с буфером обмена 


AFROLOV   (2002-03-27 15:23) [0]

Привет всем.
Как сделать такую вещь:
1. Сохранить состояние буфера обмена(то что в нем было)
2. Поместить туда кусок текста
3. Вставить этот кусок текста
4. Восстановить состояние буфера до помещения туда куска текста.



MBo   (2002-03-27 15:35) [1]

Сохранение/восстановление всего содержимого буфера обмена

var FS:TFileStream;

procedure TForm1.bClearClick(Sender: TObject);
begin
OpenClipBoard(0);
EmptyClipboard;
CloseClipBoard;
end;

procedure TForm1.BSaveClick(Sender: TObject);
var CBF:Cardinal;
CBFList:TList;
i:Integer;
h:THandle;
p:Pointer;
CBBlockLength,Temp:Cardinal;
FS:TFileStream;
begin
if OpenClipBoard(0)then begin
CBFList:=TList.Create;
CBF:=0;
repeat
CBF:=EnumClipboardFormats(CBF);
if CBF<>0 then
CBFList.Add(pointer(CBF));
until CBF=0;
edit1.text:=IntToStr(CBFList.Count);
if CBFList.Count>0 then begin
FS:=TFileStream.Create("e:\cp.dat",fmCreate);
Temp:=CBFList.Count;
FS.Write(Temp,SizeOf(Integer));
for i:=0 to CBFList.Count-1 do begin
h:=GetClipboardData(Cardinal(CBFList[i]));
if h>0 then begin
CBBlockLength:=GlobalSize(h);
if h>0 then begin
p:=GlobalLock(h);
if p <> nil then begin
Temp:=Cardinal(CBFList[i]);
FS.Write(Temp,SizeOf(Cardinal));
FS.Write(CBBlockLength,SizeOf(Cardinal));
FS.Write(p^,CBBlockLength);
end;
GlobalUnlock(h);
end;
end;
end;
FS.Free;
end;
CBFList.Free;
CloseClipBoard;
end;
end;

procedure TForm1.bLoadClick(Sender: TObject);
var h:THandle;
p:Pointer;
CBF:Cardinal;
CBBlockLength:Cardinal;
i,CBCount:Integer;
FS:TFileStream;
begin
if OpenClipBoard(0)then begin
FS:=TFileStream.Create("e:\cp.dat",fmOpenRead);
if FS.Size=0 then Exit;
FS.Read(CBCount,sizeOf(Integer));
if CBCount=0 then Exit;
for i:=1 to CBCount do begin
FS.Read(CBF,SizeOf(Cardinal));
FS.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
FS.Read(p^,CBBlockLength);
GlobalUnlock(h);
SetClipboardData(CBF,h);
end;
end;
end;
FS.Free;
CloseClipBoard;
end;
end;



aus   (2002-03-27 15:39) [2]

Может быть задачу можно как-то проще решить, есть DDE, например, для обмена данными между программами.



AFROLOV   (2002-03-27 15:42) [3]

DDE и SendMessage к сожалению не подойдут :(.



MBo   (2002-03-27 15:45) [4]

P.S. можно, конечно, использовать MemoryStream или другой метод временного хранения




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.018 c
14-22837          Холостой              2002-03-01 07:11  2002.04.08  
Как в сделать так, чтобы текст в StaticText был в несколько строчек


14-22825          Hiks1                 2002-02-28 07:45  2002.04.08  
Господа авторы сайта.


1-22715           Di_wind               2002-03-26 21:07  2002.04.08  
Динамическое создание.


1-22704           Ghost12               2002-03-26 14:37  2002.04.08  
Ещё раз про HTML форму, люди помогите реально, дайте путный совет.


14-22792          BorisMor              2002-02-26 10:11  2002.04.08  
Какой инсталятор лучше всего жмет ?