2013-07-23 1 views
0

Je crée une application Delphi 2007, en utilisant des composants Tnt (Compenents with unicode). J'ai un formulaire avec:en utilisant TEdit et TUpDown avec assosiation

edit   : TTntEdit; 
updown  : TTntUpDown 

paramètres pour thouse composants sont:

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; 

Comme vous pouvez le voir, UpDown pourrait avoir position entre 300 et 900, thats signifie que edit.Text est de ' 30,0 'à '90, 0'. Si Texte est réglé sur 89.8 et que nous utilisons la flèche vers le haut de la mise à jour pour augmenter sa position, le texte en édition changera comme suit: '89 .9 '->' 90.0 '->' 900 'et les butées. Lorsque edit.text passe de '90 .0 'à' 900 ', l'événement updownClick n'est même pas appelé!

Voici donc mes questions:

  1. pourquoi la valeur '900' apparaît;
  2. pourquoi l'événement updownClick n'est pas appelé;
+0

merci beaucoup, cela a aidé! Bien sûr, je n'ai pas besoin de tnt pour 2 chiffres, je les utilise juste parce qu'il y a beaucoup d'autres composants (tnt) dans le projet - Edits, GroupBoxes, Labels et autres. –

Répondre

1

Supprimer

updown.Assosiate := edit; 

Soit il est le contrôle UpDown changer la valeur, ou vous faire par votre code personnalisé.

Il n'y a rien de bien à avoir deux maîtres contradictoires pour le même problème. Si vous personnalisez SetValue, alors ne laissez pas les fonctions intégrées de UpDown faire obstacle.

Et mieux utiliser quelques éditions de bouton-poussoir prêts avec un support natif pour les nombres flottants.

PS. Vous pouvez configurer Edit.OnExit afin qu'il analyse le texte tapé par l'utilisateur et ajuster UpDown.Value en conséquence