为啥我的 tlistbox 要求我将 & 符号加倍? [复制]

Posted

技术标签:

【中文标题】为啥我的 tlistbox 要求我将 & 符号加倍? [复制]【英文标题】:Why is my tlistbox requiring me to double up my ampersands? [duplicate]为什么我的 tlistbox 要求我将 & 符号加倍? [复制] 【发布时间】:2014-10-28 04:13:31 【问题描述】:

有没有办法让你不必加倍你的 & 让 Delphi 列表框不将它们注册为热键?

我们在 ListBox 中填充了一个药物名称列表,其中一些药物包含 &'s,例如“A & D Ointment”,让“A _D Ointment”出现有点愚蠢,所以我们将 && 加倍以使其成为“A & D Ointment”,唯一的问题是,当我们这样做时,如果不重新转换文本,我们就无法将列表框中的文本用于任何有用的内容。

完全关闭热键对我们来说一定更方便,我似乎无法找到使用 IDE 的方法,但我确信有一些花哨的 Windows 消息可以覆盖它(希望我不必重写基类)


我们正在使用以下方法覆盖 DrawItem 函数:

DrawText(List.Canvas.Handle, PChar(List.Items.Strings[Index]), -1, Rect, DT_VCENTER);

【问题讨论】:

这根本不会发生。你确定你真的在和TListBox打交道吗? 同意@Andreas;例如在 Delphi 7 或 Delphi XE3 中,TListBox 项目文本通过包含 DT_NOPREFIX 标志显式呈现(防止呈现来自 & 字符的下划线)。 @AndreasRejbrand 哦,笨蛋,写代码的人是手动绘制的…… @TLama 好的,谢谢各位,我打算让办公室里的人回答这个问题。我打算删除它的问题,但他认为这可能对某人有用。 @jerry 我最初写它的时候还以为是一个列表视图,但我回到代码并意识到它不是。为什么你的问题得到这么多-1?此外,当只有答案相同时,这怎么是重复的。在我们三个经验丰富的 delphi 程序员看来,它确实是控件对我们自动传入的文本执行某些操作,并且不可能在双 & 符号、热键和 DT_NOPREFIX 之间进行心理跳跃。我不知道你想证明什么样的观点,但关闭这个你就大错特错了。 【参考方案1】:

如果发生这种情况,您可能没有使用默认的 TListBox 绘制函数,因为默认情况下它使用 DT_NOPREFIX 来绘制内容。

检查并确保您没有覆盖 DrawItem 函数以查看是否使用不带 DT_NOPREFIX 的 DrawText。如果您使用 DT_NOPREFIX,那么您的文本将保持不变。

【讨论】:

-1 如所问,DrawText 不相关。列表框不执行问题中描述的操作。也许如果您想编辑问题以描述此答案适用的场景,那么它可能对将来的某人有用。但就目前而言,这是非常具有误导性的。 好的,已删除反对票。如果您删除所有讨论列表框并仅包含对DrawText的调用,那会好得多。 这个问题是DrawText DT 标志和列表框在手动绘制的事实的组合。从这个意义上说,它可能对某人有所帮助。 对贵公司的人很有帮助,是的。对 Stack Overflow 的未来用户有帮助,不。 Stack Overflow 不适合您的公司记录您的代码。 在问题得到解决之前,这对未来的访问者没有帮助。

以上是关于为啥我的 tlistbox 要求我将 & 符号加倍? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何“刷新” TListBox?

如果我将输入值存储在变量中,为啥我的输入值总是空的?

为啥浏览器不要求记住密码? [复制]

为啥我的查询因 SQLCODE = -420 而失败?

为啥 :hover 不适用于 tr 元素?

Delphi读INI文件小节到TListBox的问题