... но вот как написано в требованиях, так нужно делать
Я так понимаю, что выхода нет в данной ситуации?
Есть лазейка, а для выхода нужно изменить возникновение события OnDoneInput объекта "Поле" на завершение ввода, в т.ч. и без изменения переменной (Enter или клик мыши вне поля ввода переменной).
Построить двухслойную структуру из объектов поле, каждый из которых связан со своей переменной. Верхнее поле Field2 для вывода, ввод запрещен. Нижнее Field1 - для ввода.
Скрипты по событиям:
Field2_OnClick, Field2_OnMouseEnter
begin
Field2.Visible := false;
end.
Field1_OnMouseLeave (вернуть верхнее поле если переменная не изменилась, собственно это и есть лазейка), Field1_OnDoneInput
begin
VisVar.Value := ExtVar.Value / 100; // VisVar - внутренняя вещественная переменная формата 0.## для вывода,
Field2.Visible := true; // ExtVar - переменная контроллера со шкалой 0..300
end.
Ограничения при вводе - указатель мыши должен находится в поле ввода (иначе поле ввода невидимо, а ввод может быть продолжен).
Есть лазейка
Отлично. Большое спасибо
Есть способ по проще ;)
Создаём переменную типа double и в неё же пихаем шкалу 0...300, подключаем переменную к полю Field1. По событию OnDoneInput пишем этот код:
begin
vrZ.Value := Field13.Value / 100;
end.
И как только редактирование поля завершено, значение принимает нужный мне вид. Всем спасибо :)