AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TUpDown: Floats

Ein Thema von Jazzman_Marburg · begonnen am 23. Nov 2009 · letzter Beitrag vom 23. Nov 2009
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

TUpDown: Floats

  Alt 23. Nov 2009, 14:28
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: TUpDown: Floats

  Alt 23. Nov 2009, 14:39
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;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#3

Re: TUpDown: Floats

  Alt 23. Nov 2009, 16:41
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: TUpDown: Floats

  Alt 23. Nov 2009, 19:14
Man müßte nichtmal am Speichermanagement rumspielen
Delphi-Quellcode:
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;
PS:
* 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:
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;
* wenn .Position bei Programmstart <> 0 ist, dann sollte dieses Ereignis in {Form}.Create einmal aufgerufen werden, damit der angezeigte Wert stimmt
z.B.:
UpDown1.OnClick(UpDown1, btNext);
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: TUpDown: Floats

  Alt 23. Nov 2009, 19:50
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;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: TUpDown: Floats

  Alt 23. Nov 2009, 20:17
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

$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: TUpDown: Floats

  Alt 23. Nov 2009, 20:33
Zitat von himitsu:
> könnte Probleme geben, wenn man dort was eingibt/reinkopiert
Das TEdit ist in diesem Fall ReadOnly
Zitat von Jazzman_Marburg:
(in TEdit selbst nicht eingeben können)
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: TUpDown: Floats

  Alt 23. Nov 2009, 20:36
Reagiert UpDown nicht auch, wenn man an Edit.Text etwas übergibt?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#9

Re: TUpDown: Floats

  Alt 23. Nov 2009, 20:49
Zitat von himitsu:
Reagiert UpDown nicht auch, wenn man an Edit.Text etwas übergibt?
Nein.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz