【问题标题】:Paste multiple string to TMemo in C++Builder在 C++Builder 中将多个字符串粘贴到 TMemo
【发布时间】:2022-01-01 11:49:24
【问题描述】:

我有一个来自 TListView 控件的字符串向量。我想将它们复制到剪贴板,然后将它们粘贴到 TMemo 控件中,这样列表中的每一行都在 TMemo 中的单独一行上。到目前为止,我尝试过的所有内容都粘贴为一行。但是在 TMemo 中复制/粘贴多行就可以了。想法?

谢谢!

【问题讨论】:

  • “字符串向量” - 你的意思是 StringList 吗?您可以将无效的代码添加到您的问题中吗?这样,乐于助人的人也许可以为您提供“想法”……您为什么要通过剪贴板进行此操作?
  • 我们从应用程序中的字符串 std::vector 开始(称之为“源”)。我们想将这些字符串复制到另一个使用 TMemo 的应用程序。我们试图将字符串放入单个字符串中以传递到剪贴板,例如... ` String s; BOOST_FOREACH(String str, strings) { s += str + 0x0d + 0x0a; } cb->SetTextBuf(s.c_str()); ` 我们假设 TMemo 将解释为下一行的一些分隔符,但我们还没有找到正确的分隔符。当然,我们不确定分隔符是否存在问题。抱歉,我不知道如何在这个编辑器中格式化代码
  • 没有代码很难。但是,如果“类似”的意思是“完全一样”,那么 s += str + 0x0d + 0x0a 行是错误的 - 您需要添加一个等于 CR LF 对的字符串,而不是这些十六进制常量。 TMemo 使用 CR LF 对作为分隔符。请记住,VCL 中的字符串都是 Unicode (wchar_t)(至少从 C++ builder 6.0 天开始)。
  • @RogerCigol "记住字符串在 VCL 中都是 Unicode (wchar_t)(至少从 C++builder 6.0 天开始)" - 这是不正确的。在 C++Builder 6.0 8 年后,VCL 在 C++Builder 2009 中切换到 Unicode 字符串
  • 感谢 Remy 的严谨/精确。这是真的,我确实知道哪个版本改变了哪些事情混淆了,我很感激被纠正。

标签: clipboard c++builder tmemo


【解决方案1】:

使用 RTL 的 sLineBreak 常量而不是单个字符:

String s;
BOOST_FOREACH(String str, strings) {
    s += (str + sLineBreak);
}

另外,您应该使用TClipboard::AsText 属性而不是TClipboard::SetTextBuf() 方法:

cb->AsText = s;

【讨论】:

  • 再次感谢雷米!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
相关资源
最近更新 更多