Editの入力制限


数値と'-.' のみ受付けます。
Delphi2009 には、NumbersOnly プロパティで制御できますが、'-' と '.' が入力できません。

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Pos(Key,'-0123456789.')=0) and (Ord(Key) <> VK_BACK) then
  Key := #0;
end;


Enterキーで次のコントロール、Shift+Enterで前のコントロールに移動する


// TEditのonKeyPress イベント
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then begin
    keybd_event(VK_TAB,0,0,0);
    Key:=#0;
  end;
   // 入力制限する場合 ここに記述する
end;

----------------- - - - 例 - - - -------------------
Edit1 からEdit4まで OnKeyPress イベントに割当て
[EnterKey] で、Edit1→Edit2→Edit3→Edit4→Edit1
[Shift+EnterKey] で逆に、Edit1→Edit4→Edit3→Edit2→Edit1 となるようにします。
    Button1 コンポーネントのプロパティ設定
  • Default : False
  • TabStop : False

上記例のようにフォーム上にボタンコンポーネントがあるのが一般的ですが、この場合ボタンコンポーネントのプロパティ設定に注意が必要です。


Editを、数値専用にする (右寄せ)


数値のみ受付けます。、'-' と '.' が入力できません。
Delphi2009 は、TEditコンポーネントのNumbersOnly プロパティとAlignmentプロパティで実現できます。

  //フォーム作成時に入れ替え (FormのOnCreateイベント)
procedure TForm1.FormCreate(Sender: TObject);
begin
	SetWindowLong(Edit1.Handle, GWL_STYLE,
	              GetWindowLong(Edit1.Handle, GWL_STYLE)
	              or ES_RIGHT		//右寄せ
	              or ES_NUMBER);
	
	  {変更を反映}
	SetWindowPos(Edit1.Handle, 0, 0, 0, 0, 0,
	             SWP_NOMOVE or SWP_NOSIZE or
	             SWP_NOZORDER or SWP_FRAMECHANGED);
end;


ページトップ