|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
Note: This is an unedited contribution. If this article is inappropriate,
needs attention or copies someone else's work without reference then please
Report This Article
IntroductionFor many of my projects, which are mainly related to controlling hardware, I need a numeric UpDown (SpinEdit) control which could easily and quickly change value extending along many orders of magnitude, let say to change frequency from 1 to 2 GHz and then add 200 Hz more. Unfortunately standard controls provided by Borland VCL or .Net do not satisfy this requirement. Search among third party controls was not successful too as I needed some specific capabilities, most notably the value late update. Under the late update I mean that for hardware control application it is common that SpinEdit controls value on remote device and thus it is desirable to initiate value change by SpinEdit, but postpone actual Value change until hardware confirms that parameter has been changed. The simple Using the CodeThe control is built upon Increment value, which may change between
adjustable IncreamentMin and IncrementMax. On every Increment
change a position of the digit in the value controlled by Value UpDown is advanced back or forth
on one position thus providing quick navigation along wide range numbers. Tooltip gives clue which
digital position is currently affected.IncrementVisible property which control whether or not Increment UpDown
buttons are visible.ExternalUpdate property which governs if the Value changes instantly or
thru external code.Pow2Increment property which, if set, directs the control to generate sequence
where next value is twice as high or twice as low as previous one. It can generate any
base*2^n series, e.g. useful 1, 2, 4, 8 … n^2 (base = 1). In this mode Increment
is controlled by IgSpinEdit itself and thus Increment UpDown buttons are automatically
hidden.Value provided by FormatString property
along with ValueAsInt and ValueAsHex properties. ValueAsInt
and ValueAsHex do not change internal representation of the value, which is double,
but control how value is displayed. For example, to show value as Hex, set ValueAsHex
to true and FormatString to “0x{0:Xn}”, where n is number of digits to display.
ValueAsHex, if set, also changes Increment multiplier from default 10 to 16 to provide
same one digit advance on every hit on Increment UpDown.ValueChanging event which is raised if ExternalUpdate is set to true
and value UpDown button has been pressed. The control passes new value to handler without updating
its internal state. Handler may cancel update by setting e.Cancel or pass new
e.Value to external code which should later update internal value state by
assigning to Value property directly.ValueChanged event which is raised when Value has been updated
internally.Other properties and events are inherited from The control does not try to prevent all possible erroneous parameter combinations, so please apply common sense while setting control properties and it will work quite well. The Control is accompanied with simple test application showing how to use the control and allowing playing with parameters. The application screenshot is presented at the beggining of the article. One important thing to note is that For test convenience an "External update" handler is implemented in lower left corner of the test application
and it handles ConclusionThis article presents extended numeric UpDown control which is especially useful for hardware
control applications. There is nothing fancy in it, but I found it really useful for my projects. I hope some
readers will agree with me.
History06-18-2008:
|
||||||||||||||||||||||