<p>TMemoの入力行数を制限できる方法。<br />TMemoを拡張して行数を制限できる新しいMemoコンポーネントを作成します。<br />新しいTMemoをTMemoExとします。このTMemoExには、1つのプロパティ、3つの変数と3つのメンバー関数を追加します。</p>
<pre class="brush:delphi">interface

TMemoEx = class(TMemo)
private
  FMaxLines: Integer;
  // 内部処理用
  mLimitLineProc: Boolean;
  mOldPos: Integer;
  mOldText: String;
protected
  procedure Change; override;
  procedure DoEnter; override;
public
  constructor Create(AOwner: TComponent); override;
  property MaxLines: Integer read FMaxLines write FMaxLines default 0;
end;

implementation

constructor TProMemo.Create(AOwner: TComponent);
begin
  inherited;
  mOldPos := 0;
  mOldText:= '';
  FMaxLines := 0;
end;

procedure TProMemo.DoEnter;
begin
  inherited;
  mOldPos := SelStart;
  mOldText := Text;
end;

procedure TProMemo.Change;
begin
  if (mLimitLineProc) then Exit; // 再入時

  // 現在の行数 &gt; 最大行数
  if (FMaxLines &lt;&gt; 0) and (SendMessage(Handle, EM_GETLINECOUNT, 0, 0) &gt; FMaxLines) then
  begin
    mLimitLineProc := true; // 再入時用
    Text := mOldText;
    SelStart := mOldPos;
    mLimitLineProc := false; // 再入時用
  end;
  mOldPos := SelStart;
  mOldText := Text;
  inherited;
end;
</pre>