Delphi 使用TEdit和TUpDown与Association

Delphi 使用TEdit和TUpDown与Association,delphi,delphi-2007,Delphi,Delphi 2007,我正在使用Tnt组件(带有unicode的组件)创建一个Delphi2007应用程序。 我有一张表格,上面写着: edit : TTntEdit; updown : TTntUpDown 千组件的设置为: edit.OnKeyPressed := edKeyPress; edit.OnKExit := edExit; updown.Max := 900; updown.Min := 300; updown.Assosiate := edit; updown.onCl

我正在使用Tnt组件(带有unicode的组件)创建一个Delphi2007应用程序。 我有一张表格,上面写着:

edit         : TTntEdit;
updown       : TTntUpDown
千组件的设置为:

edit.OnKeyPressed := edKeyPress;
edit.OnKExit := edExit;
updown.Max := 900;
updown.Min := 300;
updown.Assosiate := edit;
updown.onClick := updownClick;

procedure TForm.edKeyPress(Sender: TObject;
     var Key: Char);
begin
    if Key = #13 then
    begin
        Key := #0;
        SetValue(edit, updown, some_global_variable );
    end;
end;


procedure TForm.edExit(Sender: TObject);
begin
    SetValue(edit, updown, some_global_variable);
end;

procedure TForm.SetValue(ED: tTntEdit;UD: tUpDown;var CardValue: real);
var
    rVal             : real;
begin
    if MainForm.CheckRealStr(ED.Text,rVal,'.') or
      MainForm.CheckRealStr(ED.Text,rVal,',') then
    begin

        if rVal <= (UD.Min/10) then rVal := (UD.Min/10);
        if rVal >= (UD.Max/10) then rVal := (UD.Max/10);
        CardValue := rVal;

        UD.Position := Round(CardValue*10);
        ED.Text :=  FormatFloat('0.0', UD.Position/10 );
    end 
    else 
        ED.Text :=  FormatFloat('0.0', UD.Position/10 );
end;

procedure TForm.updownClick(Sender: TObject;
    Button: TUDBtnType);
begin
    edit.Text :=  FormatFloat('0.0', updown.Position/10 );
end;
edit.onkeypress:=edKeyPress;
edit.OnKExit:=edExit;
向上向下。最大值:=900;
向上向下。最小值:=300;
updown.associate:=编辑;
updown.onClick:=向上向下单击;
程序TForm.edKeyPress(发送方:ToObject;
var键:Char);
开始
如果键=#13,则
开始
键:=#0;
设置值(编辑、上下、某些全局变量);
结束;
结束;
程序TForm.edExit(发送方:TObject);
开始
设置值(编辑、上下、某些全局变量);
结束;
过程TForm.SetValue(ED:tTntEdit;UD:tUpDown;var-CardValue:real);
变量
rVal:真实的;
开始
如果MainForm.CheckRealStr(ED.Text,rVal,“.”)或
CheckRealStr(ED.Text,rVal,,),然后
开始
如果rVal=(UD.Max/10),则rVal:=(UD.Max/10);
CardValue:=rVal;
UD.位置:=圆形(CardValue*10);
ED.Text:=FormatFloat('0.0',UD.Position/10);
结束
其他的
ED.Text:=FormatFloat('0.0',UD.Position/10);
结束;
过程TForm.updownClick(发送方:TObject;
按钮:tudbntype);
开始
edit.Text:=FormatFloat('0.0',updown.Position/10);
结束;
正如您所看到的,UpDown的位置可能在300到900之间,这意味着edit.Text的范围是从“30.0”到“90,0”。 如果文本设置为89.8,我们使用向上箭头或向下箭头来增加其位置,则编辑中的文本将更改如下:“89.9”->“90.0”->“900”并停止。当edit.text从“90.0”更改为“900”时,甚至不会调用updownClick事件

下面是我的问题:

  • 为什么会出现“900”值
  • 为什么不调用updownClick事件 除去

    它可以是上下控制更改值,也可以由自定义代码执行

    在同一个问题上有两个互相矛盾的主人是没有好处的。如果您定制了
    设置值
    ,那么不要让
    上下
    的内置函数妨碍您

    最好使用一些现成的旋转按钮编辑,并支持浮点数


    另外,您可能希望设置
    Edit.OnExit
    ,以便它能够解析用户键入的文本并相应地调整
    UpDown.Value

    ,非常感谢,这很有帮助!当然,我不需要两位数的tnt,我使用它们只是因为项目中有很多其他(tnt)组件——编辑、分组框、标签和其他。
    updown.Assosiate := edit;