| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Запятая вместо точки |
| Автор: ivan219 18.12.2005, 09:47 |
| Здравствуйте. Есть компонент Edit1 мне внего нужно писать только цифры и запятую преобразование из знаков в цифры делаю препомощи (R1:=StrToFloat(Edit1.Text);) так вот если в водить число (12,23) то всё ОК а если (12.23) то вознекает ошибка. Вопрос: как зделать так чтоб при нажатии на ( . ) в окне Edit1 поевлялась ( , ) и ошибки небыло. |
| Автор: Albinos_x 18.12.2005, 10:10 | ||
|
| Автор: Демо 18.12.2005, 14:27 | ||
| Albinos_x Подправлю.
|
| Автор: Albinos_x 18.12.2005, 15:23 |
| тот же икс, только вид сбоку |
| Автор: Snowy 18.12.2005, 15:25 | ||||
За исключением
Это правильнее. |
| Автор: Albinos_x 18.12.2005, 15:58 | ||
единственное.... но результат будет тот же... |
| Автор: DeadSoul 18.12.2005, 16:11 |
| А если я вставлю эту запятую\точку нажав Ctrl+v? ;) Код будет работать? По мне наилучший вариант - замена . на , при получение текста данного едита P.S. Я знаю, что я зануда. |
| Автор: Демо 18.12.2005, 16:13 | ||
Если только в системе разделитель тот же самый. А если нет, то результат будет другой ;) Вопрос настолько уже избит везде, что даже не знаю, сколько раз можно на него отвечать-)) |
| Автор: Albinos_x 18.12.2005, 16:35 | ||
ет точно, но если честно, то я с этим не разу не сталкивался... |
| Автор: Romikgy 19.12.2005, 15:46 | ||
|
| Автор: Guest 20.12.2005, 18:32 |
| Всем спасибо |
| Автор: TwisT_X 20.12.2005, 18:50 |
| А я вообще не догнал что такое DecimalSeparator подскажите.. |
| Автор: Snowy 20.12.2005, 18:55 | ||
Это точка, запятая или что угодно, что явняется разделителем целой и дробной части, согласно настроек системы. Добавлено @ 18:56 Я могу установить в качестве разделителя слово "хвост" и у меня не будет работать ни точка не запятая, а вот DecimalSeparator будет. |
| Автор: TwisT_X 20.12.2005, 19:01 |
| Snowy спосибо надо будет запомнить..?. |
| Автор: Alex 20.12.2005, 20:53 | ||
Горячиться не нужно DecimalSeparator - это Char. Так, что можно только 1 символ поставить. |
| Автор: Guest 20.12.2005, 22:05 |
| ivan219 Работает всем спасибо. |
| Автор: TwisT_X 20.12.2005, 22:26 |
| все таки а чем не подходить простая замена |
| Автор: Albinos_x 20.12.2005, 22:55 | ||||
|
| Автор: TwisT_X 21.12.2005, 16:55 |
| Albinos_x а ну да.. все ясно.. |
| Автор: ivan219 15.1.2006, 03:00 | ||
Этот процедура делает возможным в компоненте Edit писать только цифры 0...9 ставить только одну запетую и ползоватся клавишей Backspace <---
|
| Автор: ivan219 15.1.2006, 17:46 | ||||||
Так это я его и дописал из несколких которые вы мне дали, сночало был
Внём было две проблемы первая это возможность ставить больше чем одна запетая а это не правильно так что я перестраховался чтоб проблем небыло что разве это плохо когда код доведён до ума Вторая это много проуедур скажем есть уменя 6 штук Edit и что мне для каждого пришлось писать
Это тоже не выход 6 лишних процедур дополнительный код место и.т.д. Вот я и зделал одну.
А если где встречалась так это хорошо, вот только почемуто мне самому прешось до этого дойти и слова критики в свой адрес я считаю не провомерными так как я для других токихже как я сторался чтоб потом было проше. |
| Автор: ivan219 16.1.2006, 18:09 |
| Да вобще по уневерсальнее. Есть ещё вопрос как реализовать копирование т.е. есть 12.12 при такой записи будет ошибка надо автоматически зделать из 12.12 -> 12,12 когда копируеш из другого места |
| Автор: Демо 16.1.2006, 21:06 | ||
Обработать в OnChange ? |
| Автор: ivan219 16.1.2006, 22:35 |
| А по конкретнее как |
| Автор: Демо 16.1.2006, 22:45 | ||
|
| Автор: ivan219 16.1.2006, 23:03 |
| Во спасибо А как реализовать буфер обмена чтоб использовать комбинацию клавиш Ctrl+C Ctrl+V |
| Автор: Демо 17.1.2006, 00:09 |
| В смысле - как реализовать? Вставка и копирование работают по-умолчанию. Для этого ничего не надо писать дополнительно. |
| Автор: ivan219 17.1.2006, 01:49 | ||
| Нет. Это когда меню вызываеш а мне надо Ctrl+C Ctrl+V Вот нашол только как это реализовать чтоб было по нажатию Ctrl+C Ctrl+V
|
| Автор: Bog d`An 17.1.2006, 04:55 | ||||
Насчёт одной запятой - не будет работать, if not(DecimalSeparator in [',','.']) then думать надо, как DecimalSeparator, который не является константой запихать в case... вариант: всё что не является буквой или цифрой считать разделителем... Действительно точка и запятая - довольно скудно... например(не претендуя на реальность ситуации) разделителем является '&' а вместо него напечатали(опечаткались) '^' |
| Автор: Демо 17.1.2006, 10:56 |
| Конкретнее, что и в каком конкретно месте не будет работать? За универсализмом не надо гоняться. Нужно исходить из реалии и целесообразности. например(не претендуя на реальность ситуации) разделителем является '&' Почему бы тогда не предположить, что разделителем будет знак '-' или '+' (которые как раз тоже надо добавить в набор допустимых символов, и обработка, следовательно, усложнится), которые вляются допустимыми в числах? |
| Автор: ivan219 17.1.2006, 11:54 |
| Почему не будет уменя 2 вареанта работают и кроме , и . болше ненашто нереагирует некаких +-*/?:%;№"!" нет а если при копировании то это каким же надо быть чтоб пренять @ в качестве , или . Лучше обесните как выгледит нажатие клавиш Ctrl+C Ctrl+V |
| Автор: Alexeis 17.1.2006, 12:15 | ||
Выделяем любой текст , жмем Ctrl+C кликаем по Edit у , Жмем Ctrl+V и все |
| Автор: ivan219 17.1.2006, 14:05 |
| Я незнаю может что нужно вкл. но такой способ непроходит Ctrl+С потм Ctrl+V вот с помощю меню можно вставить и копировать можно вырезазт отменить а комбинация клавиш Ctrl+С Ctrl+V не проходит |
| Автор: Romikgy 17.1.2006, 14:18 |
| Конечно не будет работать |
| Автор: Демо 17.1.2006, 16:27 |
| У меня работает в том виде, в котором написал. ;) То, что у автора не работает, явно зависит от его остального кода и настроек форм, hotKey и т.д. |
| Автор: Bog d`An 17.1.2006, 23:44 | ||||||||||
вот это. Если DecimalSeparator не является точкой или запятой, он пойдёт не сюда а в else Но, действительно или целесообразность, или универсальность...
тогда зачем вообще использовать DecimalSeparator? писали бы '.' вот что-то более-менее универсальное
Правильно! там возможностей больше! и ещё для формы KeyPreview := true |
| Автор: ivan219 20.1.2006, 03:16 |
| Bog d`An товой код немного фальшивит в Edit можно писать и буквы только каждая последующая заменяет предыдущюю и запетые там можно их 2 штуки ставить. А поподробнее можно как в KeyDown это реализовать |
| Автор: Bog d`An 20.1.2006, 06:16 | ||||
| Упс. Щас посмотрю. Добавлено @ 06:28
Это потому что в событии onChange примерно так
|
| Автор: Демо 20.1.2006, 12:08 | ||
| Извини, но ты свой код пробовал хотя бы проверить? Могу даже предложить попроовать вот такой:
Эффект будет аналогичен. |
| Автор: ivan219 20.1.2006, 14:51 | ||
Компилятору чегото ненравится [Ошибка] Unit1.pas(103): Undeclared identifier: 'WrongSepArr'
|
| Автор: Bog d`An 20.1.2006, 14:56 | ||||
| нет не пробовал а надо? Добавлено @ 14:58
константа с предидущего примера...
|
| Автор: ivan219 20.1.2006, 16:49 |
| Ошибок нет а всё равно буквы идут когбудто и нет нечего. |
| Автор: Демо 20.1.2006, 16:50 |
| Надо, так как твой пример в OnKeyDown не будет работать ни в каком виде. |
| Автор: Alexeis 20.1.2006, 17:50 | ||
Как вам вот это
|
| Автор: ivan219 20.1.2006, 19:15 |
| А что он делает |
| Автор: Bog d`An 21.1.2006, 05:06 | ||
| о, точно там ещё +- надо первым символом разрешить млин, не всё так просто как казалось...
мда.. вот токо куда проверку на запятую и +- вставить... вроде они для рус\англ на различном ShiftState ? |
| Автор: ivan219 21.1.2006, 13:37 |
| Всё почти работает |
| Автор: Romikgy 23.1.2006, 11:19 | ||
А так ?
|
| Автор: Bog d`An 24.1.2006, 09:06 |
| С запятыми косяк... и позицией курсора... |
| Автор: Alexeis 24.1.2006, 09:54 |
| ivan219 Мой алгоритм ведь работает какие еще проблемы?? Разрешает вводить только числа причем только с правельным разделителем, все посторонние символы удаляются, второй и последующие разделители так же удаляются, перед числом можно поставить + или -, сtrl + c и ctrl + V не блокируются, при вставке автоматически удаляются все лишние символы. |
| Автор: Bog d`An 24.1.2006, 10:23 | ||
работает |
| Автор: Romikgy 24.1.2006, 11:04 |
| В смысле косяк?, курсор только в конце. Зачем юзать #8 в ченже??? Ведь это бекспейс, а он стирает символ, и в ф-цию передается строка без символа, стертого и символа 8 А че такое 42 |
| Автор: Albinos_x 24.1.2006, 13:55 |
| может он хотел написать 46(Del) |
| Автор: Romikgy 24.1.2006, 14:43 |
| Дык и он зачем этот дел в Change ??? |
| Автор: Alexeis 24.1.2006, 14:49 | ||
я думаю это "остатки" EditKeyDown1 |
| Автор: Romikgy 24.1.2006, 14:51 |
| Оттож!!!! В ченже они ненадо!!! |
| Автор: ivan219 24.1.2006, 18:13 | ||||||
Почти когда на запятую два раза жмёш то курсор в ночало уходит. Добавлено @ 18:15
Этот код тоже хорош но с запятыми проблема их можно целую кучу ставить а нужна всего одна. |
| Автор: Alexeis 24.1.2006, 18:20 | ||
| ошибка исправлена(решение украдено у Bog d`An)
|
| Автор: ivan219 24.1.2006, 18:27 | ||||||
Работае я немного подправил так что всё ОК Тут даже когда первая стоит запятая то ставит 0, это ещё лучше сам пытался это реализовать но неполучилось вобщем всё работает
Спасибо!!!!!!! Добавлено @ 18:30 Ещё Bog d`An если можеш распши всё просто мне надо это понять а так я неразберусь хотя попытають. |
| Автор: Alexeis 24.1.2006, 18:47 |
| в коде Bog d`An есть маленький глюк если установить курсор в начало строки и жать del то работает как то странно... Добавлено @ 18:59 если добавить - а перед ним разделитель минус удаляется |
| Автор: ivan219 24.1.2006, 22:28 | ||
Может кто подскажет как этот код в компоненте исползовать я тут попробовал но чтот неполучилось компонент установился а толку мало может кто даст ссылку на литераратуру где можно почитать ка создовать свои компоненты или пожет от куда начать.
|
| Автор: Akella 25.1.2006, 10:25 |
| про подмену разделителя целой и дробной части: давно уже сделано не забываем про "Арсенал" http://forum.vingrad.ru/index.php?showtopic=21411&view=findpost&p=409416 |
| Автор: Bog d`An 26.1.2006, 15:14 | ||
| а если юзверь станет в середине печатать? ??? что бы это значило?
|
| Автор: Kuper 9.2.2006, 09:24 | ||
| Ниже приведён код, который не позволяет вводить ничего лишнего, кроме символов и всего что их касаеца. Так же он оставляет знаки "+" и "-" только в начале, и оставляет только один разделитель. Запехни его просто в обработчик OnChange.
|