Lo quieras creer o no, hay un error que no se puede ignorar en los componentes que vienen con Delphi.
Al principio no pensé que hubiera un error bajo el control de Delphi. Fue tan frustrante que lo depuré muchas veces y solo lo descubrí después de rastrearlo.
¿Ves el control TSpinEdit en la página Muestras? Tiene las propiedades de MaxValue (valor máximo) y MinValue (valor mínimo).
Error 1: Primero establezca el Valor en 7, luego establezca MaxValue en 5 y MinValue en 0, ¡pero el Valor no cambiará automáticamente! ! !
Error 2: configuró MaxValue en -7 y MinValue en 7. ¿Viste eso? El valor máximo puede ser menor que el valor mínimo.
Error 3: Cuando el valor máximo y el valor mínimo son iguales, el valor se puede establecer de forma casual...
No entiendo cómo el autor diseñó tantos errores en ese momento, y no entiendo por qué Borland adoptó este control. Quizás el guardián de Borland sea un GG, y este desarrollador sea un MM, así que...
Volvamos al punto y abramos el directorio de instalación de Delphi /Source/Samples/Spin.Pas
Buscar PRoperty MaxValue: LongInt leer FMaxValue escribir FMaxValue;
propiedad MinValue: LongInt lee FMinValue escribe FMinValue;
¡Se encontraron Bug1 y Bug2 al mismo tiempo! No hay juicio, los valores de FMaxValue y FMinValue se configuran directamente, es decir, los valores máximo y mínimo no están restringidos y se pueden configurar a voluntad. Después de establecer los valores máximo y mínimo, el valor no se actualiza, lo que provoca la aparición del error 1.
Cambiar a:
propiedad MaxValue: LongInt lee FMaxValue escribe SetMaxValue;
propiedad MinValue: LongInt lee FMinValue escribe SetMinValue;
Agregue dos procedimientos en Privado:
procedimiento SetMaxValue(Valor: LongInt);
procedimiento SetMinValue(Valor: LongInt);
El contenido es el siguiente:
procedimiento TSpinEdit.SetMaxValue(Valor: LongInt);
comenzar
si Valor >= FMinValue entonces
FMaxValue := Valor;
EstablecerValor(Valor propio);
fin;
procedimiento TSpinEdit.SetMinValue(Valor: LongInt);
comenzar
si Valor <= FMaxValue entonces
FMinValue := Valor;
EstablecerValor(Valor propio);
fin;
Claramente hay una función CheckValue en Privado, déjame echarle un vistazo.
función TSpinEdit.CheckValue (NewValue: LongInt): LongInt;
comenzar
Resultado := NuevoValor;
si (FMaxValue <> FMinValue) entonces
comenzar
si NuevoValor <FMinValue entonces
Resultado := FMinValue
de lo contrario, si NewValue > FMaxValue entonces
Resultado := FMaxValue;
fin;
Encontré el motivo del error 3. El autor de este control no juzgó si FMaxValue y FMinValue son iguales.
Cambiar a:
función TSpinEdit.CheckValue (NewValue: LongInt): LongInt;
comenzar
Resultado := NuevoValor;
si (FMaxValue <> FMinValue) entonces
comenzar
si NuevoValor <FMinValue entonces
Resultado := FMinValue
de lo contrario, si NewValue > FMaxValue entonces
Resultado := FMaxValue;
fin
demás
comenzar
Resultado:=FMaxValue;
fin;
fin;