![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 06.07.2011
Сообщений: 15
|
![]()
Уважаемые программисты делфи! Ещё совсем зеленый, помогите с моей простой (для Вас) проблемой)
У меня есть 3 EDITa для того, чтобы туда вписывать числа. Надо сделать чтобы можно было вписывать только значения от 0.01 до 0.99 Ещё надо штоб сумма значений в 3 эдитах была обязательно единица (тоесть я так понимаю вылезал шоумесач, говорящий об этом) И ещё при всём этом чтобы значение в 1 эдите было меньше чем во втором, а во втором меньше чем в третьем, тоесть edit1<edit2<edit3 как же мне все эти ограничения оформить? Есть какойто простой способ короткий, я просто очень слабенько шарю |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
MaskEdit попробовать не хочешь?
Там настроить маску типа \0.00;1;_ Получишь возможность ввода только после запятой.
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Ну, это можно сделать, если самостоятельно отслеживать ввод с клавиатуры.
Разумеется, при условии, если слегка смягчить условия. Так, как написано, вообще ни одной цифры изменить будет невозможно, т.к. при этом нарушится условие, накладываемое на все три одновременно. Еще: в постановке явно лишний третий - его состояние однозначно определяется первыми двумя. Т.е. его должен заполнять не пользователь, а программа: когда пользователь что-то вводит, скажем, в первый, программа синхронно меняет значение в 3-м. Но мне кажется,это неоптимальное решение. Я бы сделал это не тремя эдитами, а двумя или тремя полосами прокрутки (эдиты управляются ими и лишь индицируют результат, не позволяя пользователю вводить что-то туда самостоятельно). В этом случае диапазон значений каждой из полос динамически меняется в зависимости от состояния других (пусть их текущие значения a, b и с): - первая позволяет изменять величину от 0.01 до b, - вторая - от a до c, - третья - от b до 0.99. Шаг для любой, естественно, 0.01. Но лучше все-таки двумя: - первая управляет "границей" меду первым и вторым полем), - вторая - "границей" между вторым и третьим. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 146
|
![]()
я попробовал что-то подобное сделать,но получилось не очень)
P.S Компилировал в Delphi 2010. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 06.07.2011
Сообщений: 15
|
![]()
Довольно сложно всё это понять, эдитами не принципиально пользоваться, просто надо чтобы соблюдались условия, если есть идеи кода очень прошу поделиться)) Не обязательно чтобы всё было с иголочки, просто чтоб работало
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 146
|
![]()
Ок)А если так?)
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 06.07.2011
Сообщений: 15
|
![]()
так подумал над советом - можно наверное сделать на месте первого и второго эдита чтобы можно было выбирать из предложенного, а на месте третьего сделать формулу 1-выбор1+выбор2. но там тоже должны быть ограничения чтоб нельзя было выбрать выбор2 меньше по значению чем выбор1. Как это оформить?
Mrsqler похоже не работает, пишу значения 0.01 0.33 0.66 пишет результат не равен 1 Последний раз редактировалось Stilet; 21.05.2012 в 07:25. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Еще раз оптимальный, на мой взгляд, вариант:
Три Edit'а ReadOnly, т.е. пишет в них не пользователь, а программа. Два ScrollBar'а с шагом 0.01: - значение первого можно изменять от 0.01 до значения второго, - значение второго можно изменять от значения первого до 0.99. При изменении значения одного автоматически изменяются пределы (точнее, один предел) другого. Плюс к этому в момент отпускания ползунка делается проверка на Edit1<Edit2<Edit3, и, если не выполняется, ползунок автоматически возвращается в крайнее положение, в котором условие выполняется. Можно обойтись и без этого, но тогда пределы придется вычислять по более сложным формулам и, боюсь, такое управление станет менее очевидным для пользователя. Edit'ы естественно, отображают: - положение первой полосы, - разницу в положении второй и первой, - 1.0 - положение 2-й полосы. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 06.07.2011
Сообщений: 15
|
![]()
s-andriano прикольно придумано) очень тяжело будет разобраться как сделать, если не трудно то можно код?
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 146
|
![]()
Вот,теперь считает)Я случайно 2 раза одну и туже переменную указал.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с Edit | ольгаг | C++ Builder | 4 | 18.03.2012 15:50 |
Работа с компонентом Edit | Fon_Blut | Помощь студентам | 2 | 17.05.2011 21:19 |
Работа с Edit в делфи | sv2311 | Помощь студентам | 4 | 09.04.2009 17:57 |
Работа с Edit | Шура | Помощь студентам | 4 | 25.11.2008 16:50 |
Работа с Edit | One.Love | Общие вопросы Delphi | 1 | 03.05.2008 14:03 |