You are on page 1of 2

...copy Listbox Items to the clipboard?

Author: Thomas Stutz

Category: VCL

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;

printed from
www.swissdelphicenter.ch
developers knowledge base

You might also like