使用RegExp的带掩码的输入对话框

使用RegExp的带掩码的输入对话框,regex,delphi,dialog,Regex,Delphi,Dialog,如何在Delphi Xe中创建带有正则表达式掩码的输入对话框。例如,仅限制3个数字。Delphi没有接受正则表达式(regex)作为输入掩码的文本输入。不过,你可以很容易地做类似的事情 使用TMaskEdit和EditMask的000创建您自己的表单;1;_或TSpinEdit设置为100的MinValue和999的MaxValue。添加两个按钮(Ok和Cancel),分别将ModalResult设置为mrOK和mrCancel 添加一个属性,该属性读取您使用的任何控件的值(stroint(Ma

如何在Delphi Xe中创建带有正则表达式掩码的输入对话框。例如,仅限制3个数字。

Delphi没有接受正则表达式(regex)作为输入掩码的文本输入。不过,你可以很容易地做类似的事情

使用
TMaskEdit
EditMask
000创建您自己的表单;1;_
TSpinEdit
设置为
100的
MinValue
999的
MaxValue
。添加两个按钮(
Ok
Cancel
),分别将
ModalResult
设置为
mrOK
mrCancel

添加一个属性,该属性读取您使用的任何控件的值(
stroint(MaskEdit1.Text);
SpinEdit1.value
),例如

其中,
GetValue
只是:

procedure TNumberInputForm.GetValue: Integer;
begin
  Result := SpinEdit1.Value;  // or Result := StrToInt(MaskEdit1.Text);
end;
然后使用代码:

Value := 0;
NumberInputForm := TNumberInputForm.Create;
try
  if NumberInputForm.ShowModal = mrOK then
    Value := FrmNumberInput.Value;
finally
  NumberInputForm.Free;
end;

thx是一个很好很简单的方法,只有一个问题,我如何阻止其他单位访问TMaskEdit1。我尝试将组件设置为私有,但在这种情况下会生成异常。我不确定我是否理解您的问题。为了创建表单,必须发布表单包含的控件(以便生成RTTI以用于流式处理)。如果从另一个单位可以看到MaskEdit,那又有什么关系呢?也许你应该创建一个单独的问题,并询问在那里,有空间解释你想做什么。例如,从我的主窗体我可以这样做:NumberInputForm.MaskEdit1:=“123”,我如何阻止来自其他单元的组件的直接访问。我希望可以使用我自己声明的方法修改或读取MaskEdit1值。防止这种情况发生的唯一方法是在运行时而不是在设计时创建MaskEdit,设置代码中的所有属性。然后可以将其声明为
private
,而不是
published
,因为创建表单时不需要将其流式导入。由于它不再是
NumberInputForm
已发布
公共
字段,因此该代码将不再编译。
Value := 0;
NumberInputForm := TNumberInputForm.Create;
try
  if NumberInputForm.ShowModal = mrOK then
    Value := FrmNumberInput.Value;
finally
  NumberInputForm.Free;
end;