如何在TMemo组件中按行限制行数和字符数

时间:2010-11-19 17:14:27

标签: delphi

我需要在TMemo组件中按行限制行数和字符数。

示例a我喜欢这样做:

Memo1.MaxLines:=20;
Memo1.CharsByLine:=80;

我怎样才能在delphi中做到这一点?

2 个答案:

答案 0 :(得分:1)

我不相信有一种简单的方法可以做到这一点,我在尝试限制它之前设置了一个OnKeyPress事件(我不知道它是否处理文本中的粘贴)

procedure AddressMemoOnKeyPressEvent(Sender: TObject; var Key: Char);
var
   i, lineCount: Integer;
begin
   with Sender as TMemo do
   begin
      if (Key <> #13) and (Key <> #8) and (Length(Lines[CaretPos.Y]) >= MAX_CHARS_PER_LINE_IN_MEMO) then
         Key := #0;

      lineCount := 0;
      for i := 1 to Length(TMemo(Sender).Lines.Text) do
      begin
         if (TMemo(Sender).Lines.Text[i] = #13) then
            Inc(lineCount);
      end;

      if (Key = #13) AND (Key <> #8) AND (lineCount >= MAX_LINES_PER_MEMO - 1) then
         Key := #0;

      // if we got past the last line, no key can be entered...
      if (CaretPos.Y >= MAX_LINES_PER_MEMO) then
         Key := #0;
   end;
end;

答案 1 :(得分:1)

有一些不明显的问题......比如如果你用一大块文本分配memo1.lines.text值会发生什么?您是否希望发生错误,将数据强制降至80个字符/行...

听起来你需要一个文字处理器控制而不是TMemo。查看http://www.TRichView.comhttp://www.wpcubed.com/