Delphi 11中TDrawGrid.Canvas.TextRect将&显示为_的问题排查
问题原因与解决方案
这是VCL文本渲染的默认行为导致的:Canvas.TextRect方法默认会将字符串中的&识别为热键前缀标记——它会隐藏&本身,同时给紧随其后的字符添加下划线,模拟控件热键的显示效果(类似按钮Caption里的&用法)。
解决方法
有两种直接的修复方式:
1. 禁用热键前缀解析
调用TextRect时,在最后一个参数中传入[tfNoPrefix]标志,明确告诉VCL不要解析热键前缀:
Canvas.TextRect(ARect, ACol, ARow, YourString, [tfNoPrefix]);
2. 转义&符号
如果需要兼容特殊场景,也可以将字符串中的单个&替换为&&,VCL会将&&解析为单个&显示:
Canvas.TextRect(ARect, ACol, ARow, StringReplace(YourString, '&', '&&', [rfReplaceAll]));
补充说明
你调试时看到的字符串正确,是因为TextRect并没有修改传入的字符串本身,只是在渲染阶段对文本做了特殊处理,所以原始字符串保持不变,但显示结果被调整了。
内容的提问来源于stack exchange,提问作者Jens
相关产品推荐
相关产品推荐

