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

EPr*_*und 5 delphi user-controls delphi-6

如果你这样做:

  Edit1.Text := StringOfChar('X', 37440);
Run Code Online (Sandbox Code Playgroud)

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

  Edit1.Text := StringOfChar('X', 37441);
Run Code Online (Sandbox Code Playgroud)

文本不会出现.

有人知道为什么吗?
如果这是一个错误,还有另一种方法可以调整而不是将所有现有组件替换为TMemo吗?
为什么选择37440?

Dav*_*nan 4

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

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

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

而这条消息是由MaxLength的属性暴露的TEdit

但是,设置MaxLength为较大的值似乎没有帮助。我无法说服单行编辑控件显示大量字符。

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

我确信 MS 会争辩说,单行编辑控件不是设计来容纳数千个字符的,因此他们没有动力使该控件更强大。

FWIW,使用 Unicode 版本的控件,截止值似乎是 37444 而不是 37440!