Code:

uses

  Clipbrd;

 

procedure ListBoxToClipboard(ListBox: TListBox;

  BufferSize: Integer;

  CopyAll: Boolean);

var

  Buffer: PChar;

  Size: Integer;

  Ptr: PChar;

  I: Integer;

  Line: string[255];

  Count: Integer;

begin

  if not Assigned(ListBox) then

    Exit;

 

  GetMem(Buffer, BufferSize);

  Ptr   := Buffer;

  Count := 0;

  for I := 0 to ListBox.Items.Count - 1 do

  begin

    Line := ListBox.Items.strings[I];

    if not CopyAll and ListBox.MultiSelect and (not ListBox.Selected[I]) then

      Continue;

    { Check buffer overflow }

    Count := Count + Length(Line) + 3;

    if Count = BufferSize then

      Break;

    { Append to buffer }

    Move(Line[1], Ptr^, Length(Line));

    Ptr    := Ptr + Length(Line);

    Ptr[0] := #13;

    Ptr[1] := #10;

    Ptr    := Ptr + 2;

  end;

  Ptr[0] := #0;

  ClipBoard.SetTextBuf(Buffer);

  FreeMem(Buffer, BufferSize);

end;

 

procedure ClipboardToListBox(ListBox: TListbox);

begin

  if not Assigned(ListBox) then

    Exit;

 

  if not Clipboard.HasFormat(CF_TEXT) then

    Exit;

 

  Listbox.Items.Text := Clipboard.AsText;

end;

 

 

//Copy all items from Listbox1 to the clipboard

procedure TForm1.Button1Click(Sender: TObject);

begin

  ListBoxToClipboard(ListBox1, 1024, True);

end;

 

//Paste items in clipboard to Listbox2

procedure TForm1.Button2Click(Sender: TObject);

begin

  ClipboardToListBox(Listbox2);

end;

 

//Copy only selected items from Listbox1 to the clipboard

procedure TForm1.Button3Click(Sender: TObject);

begin

  ListBoxToClipboard(Listbox1, 1024, False);

end;

 

Мне нужно использовать clipboard для сохранения данных в собственном формате и я хочу для этого написать набор процедур ввода/вывода с использованием потоков (streams). Возможно ли создать объект TMemoryStream, эаполнить его и поместить в Clipboard?

 

Hе только возможно, именно так поступают функции Clipboard.GetComponent и Clipboard.SetComponent. Сначала вы должны зарегистрировать свой собственный формат данных для Clipboard с помощью функции RegisterClipboardFormat:

Code:

//Ctrl+C, Strg+C:

 

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);

keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);

keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)

 

 

 

//Ctrl+V, Strg+V:

 

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);

keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);

keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)