[Delphi] TMemo の最大入力行数を制限

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

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; // 再入時

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

コメント (0件)


くろねこ研究所
https://www.blackcat.xyz/article.php/ProgramingFAQ_del0031