我想限制 TMemo 只能输入 xxx 个 Unicode 字符,该怎样做?具体问题请进。(50分)

  • 主题发起人 happyjoe
  • 开始时间
H

happyjoe

Unregistered / Unconfirmed
GUEST, unregistred user!
大家可以先看看 WinXP 或 Win2000 中发送控制台消息那个窗体的消息输入框,如果输入的全是单字节字符(比如半角的英文、数字)只能输 885 个,但如果输入的是双字节字符(比如汉字)也能输 885 个(这可相当于 885 x 2 个单字节字符啊)。在 Delphi 里如何实现呢?[?]
 
sw:widestring;
c:string;
s:string;
s:=memo1.text;
sw:=s;
if length(sw)>885 showmessage('')
 
在onchange里判断,可以用这个函数ByteType判断汉字字数
 
to: ugvanxk
我想你是将这段放在OnChange事件里吧,我想只加个限制(不弹出对话框),
输到885不能再输,另外还得考虑粘贴问题(又分几种情况:全部粘贴超过885、
在已输入的中间粘贴时超过885)。
 
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
l_Str : WideString;
begin
l_Str := Memo1.Text;
if Length(l_Str) > 885 then
key := #0;
end;
可以限制用户输入字符过长,但如果用户采用粘贴的方法,这段代码不会生效,
所以还要在Memo的OnExit里进行一次判断
procedure TForm1.Memo1Exit(Sender: TObject);
var
l_Str : WideString;
begin
l_Str := Memo1.Text;
if Length(l_Str) > 885 then
Begin
Application.MessageBox('您输入字符过多!','提示',64);
Memo1.SetFocus ;
end;
end;
 
多人接受答案了。
 
顶部