使用TEdit和TUpDown与关联

时间:2013-07-23 10:48:09

标签: delphi delphi-2007

我正在使用Tnt组件(带有unicode的Compenents)创建Delphi 2007应用程序。 我有一个表格:

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;

正如您所看到的,UpDown可能位于300到900之间,这意味着edit.Text从'30 .0'到'90,0'。 如果Text设置为89.8并且我们使用updown的箭头来增加它的位置,那么编辑中的文本将改变如下:'89 .9' - &gt; '90 .0' - &gt;'900'和stopes。当edit.text从'90 .0'变为'900'时,甚至不会调用updownClick事件!

所以这是我的问题:

  1. 为什么价值'900'出现;
  2. 为什么不调用updownClick事件;

1 个答案:

答案 0 :(得分:1)

删除

updown.Assosiate := edit; 

要么是UpDown控件更改值,要么是自定义代码。

对于同一个问题,有两个矛盾的主人没有什么好处。如果您是自定义的SetValue,那么请不要让UpDown的内置函数继续使用。

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

PS。您可能希望设置Edit.OnExit,以便解析用户输入的文字并相应地调整UpDown.Value