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

Delphi 为什么TEdit只显示长度等于或小于37440个字符的文本?,delphi,user-controls,delphi-6,Delphi,User Controls,Delphi 6,如果您这样做: Edit1.Text := StringOfChar('X', 37440); Edit1.Text := StringOfChar('X', 37441); 但是,如果您这样做,它将显示文本: Edit1.Text := StringOfChar('X', 37440); Edit1.Text := StringOfChar('X', 37441); 文本将不会显示 有人知道为什么吗 如果这是一个错误,有另一种方法调整而不是更换TMemo的所有现有组件?

如果您这样做:

  Edit1.Text := StringOfChar('X', 37440);
  Edit1.Text := StringOfChar('X', 37441);
但是,如果您这样做,它将显示文本:

  Edit1.Text := StringOfChar('X', 37440);
  Edit1.Text := StringOfChar('X', 37441);
文本将不会显示

有人知道为什么吗
如果这是一个错误,有另一种方法调整而不是更换TMemo的所有现有组件?

为什么是37440?

从表面上看,您应该能够通过以下信息控制这一点:

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

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

此消息由
TEdit
MaxLength
属性公开

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

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

我相信微软会争辩说,单行编辑控件的设计不是为了容纳数千个字符,因此它们没有动机使该控件更具功能


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

太好了,现在我必须更换系统中的所有组件!!如果您有CNWizard(例如,您可以使用组件选择器),则可以逐个表单选择所有
TEdit
组件,并将它们
MaxLength
设置为限制值(很遗憾,与0不同)。但是谁会出于好奇而读这么多的咒文呢?[+1]有一个选择组件,它将所选项目的键值“,”+键值….[…]返回给TEdit。我不能使用范围,因为键值不是序号。如果我们使用类似的操作系统,如果使用
f.I.而不是
X
,则可以显示37440多个字符。这意味着MS文档中指定的限制根本没有任何意义,因为您会遇到由实现细节施加的任意限制。是的,在这种情况下,它将限制在43679点,如果您使用,如果在一个api调用中使用该字符串,您不需要坚持使用W版本的api调用吗?