为啥我的 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 要求我将 & 符号加倍? [复制]的主要内容,如果未能解决你的问题,请参考以下文章