2014-12-19 151 views

回答

4

复制到剪贴板代码应该是这样的:

procedure ListBoxToClipboard(ListBox: TListBox; CopyAll: Boolean); 
var 
    i: Integer; 
    s: string; 
begin 
    s := ''; 
    for i := 0 to ListBox.Items.Count - 1 do 
    begin 
    if CopyAll or ListBox.Selected[i] then 
     s := s + ListBox.Items[i] + sLineBreak; 
    end; 
    ClipBoard.AsText := s; 
end; 

注:我从原代码改变CopyAll逻辑,因为它没有多大意义了我。所有项目都必须复制到剪贴板,或只有选定的项目。不管ListBox是否具有MultiSelect,都不应该有任何区别。

+0

@jc您可能想知道是否值得保留'if not Assigned(ListBox)'。我知道我不会。 – 2014-12-19 10:30:12

+0

@David同意,这个Assigned只是多余的。 – 2014-12-19 10:31:32

+2

你会在'Clipbrd'单元中找到'ClipBoard'。 – 2016-04-08 02:49:26

1
procedure ListBoxToClipBoard(lb:TListBox; copyAll:Boolean); 
var 
    i: integer; 
    sb: TStringBuilder; 
begin 
    sb := TStringBuilder.Create; 
    try 
    for i := 0 to lb.Items.Count -1 do 
     if copyAll or lb.Selected[i] then 
     sb.AppendLine(lb.Items[i]); 
    Clipboard.AsText := sb.ToString; 
    finally 
    sb.Free; 
    end; 
end; 
+1

欢迎来到SO.Code可能会回答这个问题,但稍微有些解释可能会帮助其他程序员了解它是如何工作的。 – Daenarys 2014-12-19 10:46:25

1

为了列表框内容到剪贴板复制,您可以使用下面的代码:

uses 
    Vcl.Clipbrd; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Clipboard.AsText := ListBox1.Items.Text; 
end; 
+0

添加一些关于此代码的解释,代码只能回答删除的风险。 – 2017-12-04 22:50:27

+0

我不认为这需要解释。它不会做的只是复制选定的文本。如果列表框有1000行,并且只需要最后5行,那么就会产生问题。但否则这是一个非常简单的解决方案。 – jcdammeyer 2017-12-05 16:29:44