![]() |
TUpDown: Floats
Mahlzeit!
Sorry, aber ich habe da mal 'nen Problem: Ich habe eine TEdit Eingabefeld mit TUpDwon verheiratet, und der Benutzer soll den Wert um 0.1 erhöhen bzw. verkleinern können (in TEdit selbst nicht eingeben können), aber irgendwie stehe ich auf dem Schlauch: procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType); begin if Button = btNext then Edit2.Text := FloatToStr(StrToFloat(Edit2.Text)+0.1); if Button = btPrev then Edit2.Text := FloatToStr(StrToFloat(Edit2.Text)-0.1); end; Was mache ich denn falsch? Es tut sich garnix! Vermutlich wäre das Event OnChanging besser -- aber da habe ich doch kein 'Button' als Parameter -- wie werte ich dann aus, ob addiert order subtrahiert werden soll? Vielen Dank Jazzman |
Re: TUpDown: Floats
Hallo,
Das sollte schon funktionieren, forausgesetzt, im Edit2 steht anfangs ein gültiger Float Wert. Damit du den Wert nicht umwandeln musst, könntest du es auch etwa so machen:
Delphi-Quellcode:
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
{$J+}const Value: Real = 0; // Anfangswert {$J-} begin case Button of btNext: Value := Value + 0.1; btPrev: Value := Value - 0.1; end; Edit2.Text := FloatToStrF(Value, ffNumber, 1, 1); end; |
Re: TUpDown: Floats
Hhhmm,
irgendwie war da der Wurm drin -- selbst der Debugger hielt dort nicht, wenn ein Breakpoint im EventHandler zum UpDown2 gesetzt war. Habe einfach beide Controls gelöscht und dann neu auf die Form gesetzt -- und Dein (weil eleganteres) Coding übernommen. Funktioniert prima. Vielen Dank für die schnelle Reaktion. Gruß Jazzman |
Re: TUpDown: Floats
Man müßte nichtmal am Speichermanagement rumspielen :angel:
Delphi-Quellcode:
PS:
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
var Value: Real; begin Value := StrToFloatDef(Edit2.Text, 0); case Button of btNext: Value := Value + 0.1; btPrev: Value := Value - 0.1; end; Edit2.Text := FloatToStrF(Value, ffNumber, 1, 1); end; * krallt sich das bei .Associate eingetragene Edit * Ereignis kann für beliebig viele UpDown-Buttons genutzt werden, da keine externen Variablen verwendet werden * der Wertebereich kann begrennzt werden > .Min und .Max des jeweiligen UpDowns ( x / 10 )
Delphi-Quellcode:
* wenn .Position bei Programmstart <> 0 ist, dann sollte dieses Ereignis in {Form}.Create einmal aufgerufen werden, damit der angezeigte Wert stimmt
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin Assert(Sender is TUpDown); If TUpDown(Sender).Tag = 0 Then Begin TUpDown(Sender).Tag := Integer(TUpDown(Sender).Associate); TUpDown(Sender).Associate := nil; Assert(TObject(TUpDown(Sender).Tag) is TEdit); End; TEdit(TUpDown(Sender).Tag).Text := FloatToStrF(TUpDown(Sender).Position / 10, ffNumber, 1, 1); end; z.B.:
Delphi-Quellcode:
UpDown1.OnClick(UpDown1, btNext);
|
Re: TUpDown: Floats
Warum nicht einfach so?
Delphi-Quellcode:
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin Assert(Sender is TUpDown); with TUpDown(Sender) do begin Assert(Associate is TEdit); TEdit(Associate).Text := FloatToStrF(Position / 10, ffNumber, 1, 1); end; end; |
Re: TUpDown: Floats
Müßte man mal ausprobieren, aber so könnte es nicht sein, daß TUpDown dann durchdreht.
TUpDown überwacht .OnChange des in Associate eingetragenen Edits > könnte Probleme geben, wenn man dort was eingibt/reinkopiert und es könnte sein, daß TUpDown den an .Text übergebenen Wert mit seinem reellen Wert (.Position) überschreibt :gruebel: |
Re: TUpDown: Floats
Zitat:
Zitat:
|
Re: TUpDown: Floats
Reagiert UpDown nicht auch, wenn man an Edit.Text etwas übergibt?
|
Re: TUpDown: Floats
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz