Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/67: Рейтинг темы: голосов - 67, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 43

Присвоение дробного значения MaskEdit

18.07.2011, 19:00. Показов 14355. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется дробное значение в переменной, максимум знаков до запятой - 9, после запятой - 2. Но может быть и меньшее количество.
Если задать так:

NewVal.EditMask := '### ### ###,##';

... и присвоить этому Эдиту, скажем начальное значение переменной 52,14:
old_val := FloatToStr(MyVal);
NewVal.Text:= old_val;

...то получится следующая каша:
52, ___ ___, __

Как нормально присваивать значения, меньше заданной маски?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.07.2011, 19:00
Ответы с готовыми решениями:

Как сохранить значения ComboBox и MaskEdit в файл?
Имеются ComboBox1: TComboBox; ComboBox2: TComboBox; MaskEdit1: TMaskEdit; MaskEdit2: TMaskEdit; При нажатии на bitton...

Присвоение значения переменной
Добрый день. Динамически создается кнопка в GroupButton Так же есть массив buttonmassinfo, в котором указаны данные. в стринговом...

Присвоение переменным значения из Edit
У меня 2 дополнительные формы, на которых расположены окна Edit, на одной форме 3 окна, значения 2-х из них присваивается переменным,...

18
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
18.07.2011, 19:19
Мне кажется, что Вам нужна следующая маска...
'!999999999\,99;1; ';
Перед кавычкой закрывающей нужен пробел - символ, который будет отображаться на экране. В данном случае это именно пробел.
Не тестил. Но думаю, что так.
И наверное придется поставить ввод справа налево. Там есть где то такая опция
---------
Хотя, наверно за счет восклицательного знака поглотится последняя нужда))
Советую и так и так попробовать))
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
18.07.2011, 19:48
Да, можно так, или так
Delphi
1
MaskEdit1.EditMask:='!999999999C99;1; ';
0
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
18.07.2011, 19:58
Зачем нам С =)
Мне кажется выше крыши одной запятульки... Иначе придется делать для этого символа доп проверку.
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 43
18.07.2011, 20:43  [ТС]
Это немного получше ), но всё равно очень криво.
Во первых - восклицательный знак не помогает, в Эдите масса пробелов стоит слева. Во вторых - нужно поменять порядок. Даже не просто поменять, а чтоб число сдвигалось на один порядок с каждым новым
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
18.07.2011, 20:47
Цитата Сообщение от OLMER Посмотреть сообщение
в Эдите масса пробелов стоит слева
А Вы что хотели? Не нужны пробелы, не пользуйтесь маской...

Добавлено через 1 минуту
Цитата Сообщение от OLMER Посмотреть сообщение
Во вторых - нужно поменять порядок. Даже не просто поменять, а чтоб число сдвигалось на один порядок с каждым новым
Ну а это вообще Филькина грамота. Сами то поняли что написали?
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 43
18.07.2011, 21:22  [ТС]
а каким боком тогда это можно организовать в обычном Эдите?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
18.07.2011, 21:24
Цитата Сообщение от OLMER Посмотреть сообщение
это можно организовать в обычном Эдите?
Что именно? Вы даже не написали суть задачи.
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 43
18.07.2011, 21:32  [ТС]
Цитата Сообщение от OLMER Посмотреть сообщение
Имеется дробное значение в переменной, максимум знаков до запятой - 9, после запятой - 2. Но может быть и меньшее количество.
Вроде всё понятно написано. То есть возможный ввод любого числа, если введена запятая, то после неё возможно ввести только 2 знака. Целая часть может состять максимум из 9-ти знаков.
0
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
18.07.2011, 21:53
Ну это просто можно делать с помощью обработки событий нажатия клавиш клавиатуры: отлавливать использование запятой, блокировать лишние цифры и буквы, и тд и тп...
Совсем не сложно.
Строчек может на 15 будет)) Возможно, что больше. Ну и меньше.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
18.07.2011, 22:45
Цитата Сообщение от OLMER Посмотреть сообщение
Вроде всё понятно написано.
Возможно, особенно это
Цитата Сообщение от OLMER Посмотреть сообщение
Во вторых - нужно поменять порядок. Даже не просто поменять, а чтоб число сдвигалось на один порядок с каждым новым
Кроме того, число может быть отрицательным?
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 43
19.07.2011, 00:33  [ТС]
так в том то и дело, писал для обычного Эдита, но у меня полностью блочился ввод, если после запятой 2 знака, надо сделать, чтоб целую часть же можно было ещё вводить. А особенно крутой эффект, если запятую вставлять посреди текста (ну бывает такое надо)...
Puporev, число НЕ может быть отрицательным. Про порядок - то про МаскЭдит, уже отпала в нём необходимость, понял, что проще через обычный Эдит.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.07.2011, 08:32
Вот такая процедура вроде делает то, что Вам нужно.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
#8,'0'..'9':// цифры и <Back Space>
            //если позиция=9, вводим разделитель
            if length(Edit1.Text)=9 then Key:=DecimalSeparator
            //если уже ввели разделитель
            else if (Pos(DecimalSeparator,Edit1.Text) <> 0 )
            //то можно ввести только 2 цифры
            and(length(Edit1.Text)-pos(DecimalSeparator,Edit1.Text)>1)
            and(Key<>#8)then Key:=#0;
       '.',',': // разделитель целой и дробной частей числа
              begin
              if Key <> DecimalSeparator then
              Key := DecimalSeparator; // заменим разделитель на допустимый
              if (Pos(DecimalSeparator,Edit1.Text) <> 0 )
              or(length(Edit1.Text)=0)then Key := Chr(0); // запрет ввода второго разделителя
              end;                                        //или первым
else   // остальные символы запрещены
     key := Chr(0);
end;
 
end;
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 43
19.07.2011, 14:47  [ТС]
Спасибо, но получилось тоже самое, что я писал выше - после двух чисел после запятой вообще ничего ввести нельзя, всмысле и в целой части тоже, то есть, чтобы редактировать целую часть, нужно стереть хоть одну цифру дробной (хоть Бэкспейс работает).
Только что поэксперементировал, если ставить разделитель посреди текста, то не только цифры, а даже Бэкспейс заблочился
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.07.2011, 14:50
Цитата Сообщение от OLMER Посмотреть сообщение
после двух чисел после запятой вообще ничего ввести нельзя,
Так ты же этого и хотел...
Цитата Сообщение от OLMER Посмотреть сообщение
максимум знаков до запятой - 9, после запятой - 2
Ты уж определись сам что тебе нужно, а потом изгаляйся...
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
19.07.2011, 14:57
Разбей вводную строку на 3 составные части, 1 часть - знаки до запятой, 2 - сама запятая, и 3 - знаки после запятой, преобразуй в одну строку потом это все, и конвертируй во Float, естественно нужно пропарсить 1 и 3 части, для того чтобы каждая часть была не зависима от другой - это для редактирования, то есть для до записи в строку
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 43
19.07.2011, 16:17  [ТС]
Puporev, ПОСЛЕ запятой больше двух чисел не вводить, а не ВООБЩЕ не вводить по всему Эдиту, так и у самого получалось, я же выше описывал это
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.07.2011, 16:49
У меня вводится 9 цифр до запятой и 2 после, как и написано у тебя. А если ты еще путаешь цифры и числа, то пока учись, через годик приходи...
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 43
19.07.2011, 18:59  [ТС]
Я прекрасно понимаю разницу между цифрами и числами. Если после ввода необходимо редактировать целую часть, каким образом это может произойти при том, что Кей наглухо обнуляется?
Проблему решил сам, тему можно закрывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.07.2011, 18:59
Помогаю со студенческими работами здесь

Присвоение значения в combobox из файла
Здравствуйте! Есть файл конфигурации к игре .txt: ################# #### Quality #### ################# #1-Very low #2-Low ...

Присвоение одного значения нескольким переменным сразу
Всем привет! Подскажите, пожалуйста. Такая проблема: есть несколько переменных, и одно значение, актуальное для них всех. Можно ли одной...

Какой тип данных использовать для дробного значения
У меня уже давно появилась проблема, часто нужно вписать дробное значение и чтобы была валидация. Как это сделать? потому что какой бы...

Как из DataTimePicker взять значение даты без дробного значения времени?
При записи в файл записывает 23.12.2012 00.00.00 а время в формате 17:34:20 И дату дробью 00.00.00 Подскажите как взять только время и...

Switch: при вводе дробного числа программа выдает неправильные значения
При вводе не целого числа, например 0.5 программа выдает неправильные значение del Подскажите, что не правильно? switch (choice) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru