Newsgroups : Borland : borland.public.delphi.rtl.win32 : 2006 Mar : Clipboard

www.cryer.info
Managed Newsgroup Archive

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;

Replies:

www.cryer.info
Managed Newsgroup Archive