![]() |
TUpDown Limitierung auf SmallInt
Ein TUpDown ist mit seinen Werten auf 16 Bit Zahlen, also -32767 bis +32767 limitiert. Aus diesem Grund kommt dessen Verwendung für viele Situationen nicht in Frage, wenn man höhere Werte braucht. Muß ich einen Descendent basteln der Integer Werte akzeptiert oder bin ich auf das TSpinEdit angewiesen?
Bei QualityCentral wurde das ![]() |
Re: TUpDown Limitierung auf SmallInt
Warum nutzt du nicht die Events und zählst selbst?
|
Re: TUpDown Limitierung auf SmallInt
TUpDown nutzt halt noch die alten 16-Bit-Messages, aber es gibt von einigen Anbietern auch komponenten, welche die "neueren" Messages verwendet.
zu Muetze1 (also die Hauptfuntion):
Delphi-Quellcode:
procedure TForm1.UpDown1ChangingEx(Sender: TObject;
var AllowChange: Boolean; NewValue: Smallint; Direction: TUpDownDirection); begin UpDown1.Tag := UpDown1.Tag + NewValue; Edit1.Text := IntToStr(UpDown1.Tag); AllowChange := False; end; procedure TForm1.Edit1Change(Sender: TObject); begin UpDown1.Tag := StrToInt(Edit1.Text); end; // Starteinstellungen: // Edit1.Text = '0' // ansonsten sind die beiden Komponenten nicht miteinander verbunden |
Re: TUpDown Limitierung auf SmallInt
Danke für den Tip. Sind ja nur wenige Code Zeilen von daher ein verschmerzbarer Hack.
|
Re: TUpDown Limitierung auf SmallInt
Hallo,
vielleicht sollte man noch prüfen, ob wirklich Zahlen im Editfeld eingegeben wurden... (die manuelle Eingabe ist ja trotz UpDown noch möglich)
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var i: Integer; begin If TryStrToInt(Edit1.Text, i) then UpDown1.Tag := i; end; |
Re: TUpDown Limitierung auf SmallInt
wobei ich es dann eher so erweitern würde
Delphi-Quellcode:
hatte oben absichtlich auf die Try- und Def-Version verzichtet, damit man bei Falscheingabe mit entsprechenden Fehlermeldungen "bombardiert" wird :angel2:
procedure TForm1.Edit1Change(Sender: TObject);
begin if (Trim(Edit1.Text) <> '') and (Trim(Edit1.Text) <> '-') then UpDown1.Tag := StrToInt(Edit1.Text); end; PS: völlig unoptimierte Zugriffe, aber sowas ist hier auch nicht unbedingt nötig ... soooooo schnell tippt ja eh keiner :nerd: [add] aber was eventuell nicht schaden könnte, wäre noch die Abfrage der Cursortasten für Hoch und Runter, im Edit, damit auch da die Taastatursteuerung wie "normal" funktioniert. |
Re: TUpDown Limitierung auf SmallInt
Ja, die Cursor Tasten würden sogar noch funktionieren, wenn man MeinUpDown.Associate = MeinEdit belässt. Leider gibt es dann aber den Effekt dass das MeinUpDown sein .Value auf MeinEdit überträgt sobald es zum ersten mal gemalt wird. Also lieber das Associate entfernen und die Cursortasten per OnKeyDown behandeln.
|
Re: TUpDown Limitierung auf SmallInt
@Muetze1:
so schlau war ich auch schon und jetzt rate mal, wofür das AllowChange := False; da drinnen ist :zwinker: NewValue gibt ja den "neuen" Wert an, also einen Positiven für hoch und einen Negativen für runder, da ist das Direction vollkommen egal, da dieses immer ausgehend von der Ausgangs-0 geschieht :angel2: |
Re: TUpDown Limitierung auf SmallInt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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