Newsgroups : Borland : borland.public.delphi.rtl.win32 : 2006 Mar : Clipboard
| Subject: | Clipboard |
| Posted by: | "JM" (spamfree@world.ss) |
| Date: | Tue, 14 Mar 2006 18:44:42 |
I'm using the clipboard to store a record (strings and widestrings)
Unfortunately there seems to be a problem when the data gets a bit large.
I'm also having trouble accessing the data on the clipboard from other app
instance.
Maybe I'm not seeing something or I'm plainly wrong with my aproach.
Comments?
TIA
PS: I'm using Delphi 6
-------
Uses clipbrd;
procedure PutClipboardData(Format: Word; var Buffer; Size: Integer);
var
Data: THandle;
DataPtr: Pointer;
begin
Clipboard.Open;
Clipboard.Clear;
try
Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Buffer, DataPtr^, Size);
SetClipboardData(Format, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
Clipboard.Close;
end;
end;
function FetchClipboardData(Format: Word): Pointer;
var
Data: THandle;
DataPtr: Pointer;
begin
Result := nil;
Data := 0;
Clipboard.Open;
try
Data := GetClipboardData(Format);
if Data <> 0 then
begin
DataPtr := GlobalLock(Data);
if DataPtr <> nil then Result:=DataPtr;
end;
finally
GlobalUnlock(Data);
end;
Clipboard.Close;
end;
-----
procedure StoreData;
var data: TSampleRec;
begin
data.name:='Test';
data.xml:=MyXML.xml;
PutClipboardData(CF_MyFormat,data,sizeof(data));
end;
procedure GetData;
var RecPtr: PSampleRec;
begin
RecPtr:=FetchClipboardData(CF_MyFormat);
if NodePtr<> nil then
begin
DebugMemo.Lines.Add('Name:'+RecPtr^.Name);
DebugMemo.Lines.Add('Data Length: '+inttostr(length(RecPtr^.XML)))
end
end;