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;
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。