XE7将文本复制到剪贴板
http://www.swissdelphicenter.com/torry/showcode.php?id=640有一个复制列表项目到剪贴板的示例。该代码适用于WIN-XP和Delphi 7.它不适用于XE7。我猜测16位字符或字符串类型导致问题,因为列表中的数据来自一个USB外设与8位字符。 但代码看起来正确。XE7将文本复制到剪贴板
复制到剪贴板代码应该是这样的:
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,都不应该有任何区别。
@jc您可能想知道是否值得保留'if not Assigned(ListBox)'。我知道我不会。 – 2014-12-19 10:30:12
@David同意,这个Assigned只是多余的。 – 2014-12-19 10:31:32
你会在'Clipbrd'单元中找到'ClipBoard'。 – 2016-04-08 02:49:26
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;
欢迎来到SO.Code可能会回答这个问题,但稍微有些解释可能会帮助其他程序员了解它是如何工作的。 – Daenarys 2014-12-19 10:46:25
为了列表框内容到剪贴板复制,您可以使用下面的代码:
uses
Vcl.Clipbrd;
procedure TForm1.FormCreate(Sender: TObject);
begin
Clipboard.AsText := ListBox1.Items.Text;
end;
添加一些关于此代码的解释,代码只能回答删除的风险。 – 2017-12-04 22:50:27
我不认为这需要解释。它不会做的只是复制选定的文本。如果列表框有1000行,并且只需要最后5行,那么就会产生问题。但否则这是一个非常简单的解决方案。 – jcdammeyer 2017-12-05 16:29:44
该代码是可怕的。它使用短字符串。不要使用该代码。 – 2014-12-19 10:10:56