为什么TEdit只显示长度等于或小于37440个字符的文本?

5
如果你这样做:
  Edit1.Text := StringOfChar('X', 37440);

它会显示文本,但是如果你这样做:

  Edit1.Text := StringOfChar('X', 37441);

文本不会显示。

有人知道原因吗?
如果这是一个错误,是否有其他方式进行调整而不是替换所有现有组件到TMemo?
为什么是37440呢?


如果我们使用相似的操作系统,您可以使用 . 代替 X,显示超过37440个字符。这意味着MS文档中指定的限制根本没有意义,因为您会受到实现细节所强加的任意限制。 - Sertac Akyuz
是的,在这种情况下,它将被限制在43679个点。 - EProgrammerNotFound
如果您使用“.”,那么如果您在其中一个调用中使用该字符串,是否必须坚持使用API的W版本? - Glenn1234
1个回答

4
表面上看,您应该能够使用EM_LIMITTEXT消息来控制它:

EM_LIMITTEXT消息仅限制用户可以输入的文本。当发送该消息时,它不影响编辑控件中已有的任何文本,也不影响通过WM_SETTEXT消息复制到编辑控件中的文本的长度。如果应用程序使用WM_SETTEXT消息将更多的文本放入编辑控件中,超过了EM_LIMITTEXT消息中指定的文本数量,则用户可以编辑编辑控件的全部内容。

在调用EM_LIMITTEXT之前,用户在编辑控件中输入的文本数量的默认限制为32,767个字符。

而这个消息是由TEditMaxLength属性公开的。

然而,将MaxLength设置为一个大值似乎没有帮助。我无法说服一个单行编辑控件显示大量字符。

我怀疑您唯一可行的选择是使用多行编辑控件,即TMemo

我相信微软会辩称单行编辑控件并非设计用于容纳数千个字符,因此他们没有动力使该控件更具能力。
顺便说一下,使用Unicode版本的控件,截断似乎发生在37444而不是37440!

太好了,现在我必须替换系统中的所有组件!!这样做太容易了。 - EProgrammerNotFound
如果您使用CnWizards,例如,您可以使用组件选择器,逐个选择所有的“TEdit”组件,并将它们的“MaxLength”设置为一个限制值(不幸的是,这个值不能为0)。但是,谁会出于好奇心而阅读那么多字符呢?[+1] - TLama
有一个选择组件,它返回所选项目的Key Value,+Key Value...[...]到TEdit,我无法使用范围,因为键值不是连续的数字。 - EProgrammerNotFound

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接