Textの長さが、MaxLength以上の状態で、TRichEditのRecreateWndが呼び出されると、RichEdit内のテキストが破壊され、MaxLengthが無効になります。
<例> フォームにRichEdit1を配置し、FormCreateに以下を記述
begin
RichEdit1.MaxLength := 3;
RichEdit1.Text := 'abc';
RichEdit1.Perform(CM_RECREATEWND, 0, 0);
end;
※実際にはCM_RECREATEWNDではなく、WordWrapやScrollBarsの設定で起きています。
この現象を回避するには、一時的にMaxLengthを0にして戻すという方法しか無いのでしょうか?
開発環境はDelphi XE7、OSはWindows7Proです。
MaxLengthを一旦0として長さ制限を解除し、
上記の設定後、再度MaxLengthの値を設定する様にして対応しました。
また、上記命令を使用すると、テキストの破壊とは関係なく
MaxLengthの指定が無効になるので、これらを使うときは、
一旦MaxLengthを0にする必要がありそうです。
ツイート | ![]() |