Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249

Замена '.' или ',' на системный разделитель при вводе в текстовый компонент

05.10.2015, 15:52. Показов 1797. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю новый компонент на базе TLabeledEdit, добавляю некоторые функции. Например разрешаю вводить только числа, опционально целые или дробные. При вводе дробных чисел хочется корректно отлавливать ввод пользователем '.' или ',' и подменять установленным в системе разделителем целой и дробной части. Сейчас я делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class PACKAGE TMyLabeledEdit : public TLabeledEdit
{
private:
    TFormatSettings FMyFormatSettings;
    bool FMyOnlyInteger;
protected:
    DYNAMIC void __fastcall KeyPress(System::WideChar &Key);
}
//---------------------------------------------------------------------------
__fastcall TMyLabeledEdit::TMyLabeledEdit(TComponent* Owner)
    : TLabeledEdit(Owner)
{
    FMyFormatSettings = TFormatSettings::Create();
    FMyOnlyInteger = false;
}
//---------------------------------------------------------------------------
void __fastcall TMyLabeledEdit::KeyPress(System::WideChar &Key)
{
        if ((Key == ',' || Key == '.') && !FMyOnlyInteger)
        {
            Key = FMyFormatSettings.DecimalSeparator;
        }
}
Но это получается в каждом экземпляре класса будет "жить" объект MyFormatSettings. Как-то это расточительно по-моему. Можно сделать по-другому?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2015, 15:52
Ответы с готовыми решениями:

Разделитель числа при вводе в поле
Добрый день. Подскажите, плз, что нужно сделать, чтобы при вводе числа сразу появлялись разделители, т.е. ввод числа напр 123456, в поле...

Замена символов при вводе
Здравствуйте! копирую цифры из 1С в Excel, а они с пробелами как удалять пробел при изменении ячейки? пытаюсь написать такой макрос...

Замена символа при вводе
Хочу сделать так чтоб при readln(S); если человек вводит символ '#' программа вводила символ '√' и присваивал переменной S его вместо '#'.

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,910
Записей в блоге: 12
05.10.2015, 16:34
Ну сделай его статическим членом класса - будет жить в одном месте.
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
05.10.2015, 16:45  [ТС]
При таком объявлении:
C++
1
static TFormatSettings FMyFormatSettings;
компилятор ругается:
C++
1
[ilink32 Error] Error: Unresolved external 'TMyLabeledEdit::FMyFormatSettings' referenced from C:\MYCOMPONENTS\WIN32\DEBUG\MYLABELEDEDIT.OBJ
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,910
Записей в блоге: 12
05.10.2015, 17:10
А ты саму переменную-то добавил? Или только описал статической?

http://www.learncpp.com/cpp-tu... variables/
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
05.10.2015, 17:34  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
А ты саму переменную-то добавил?
Не совсем понял. Нужно сделать что-то такое вне класса?
C++
1
TFormatSettings TMyLabeledEdit::FMyFormatSettings = TFormatSettings::Create();
Если да, то где?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,910
Записей в блоге: 12
05.10.2015, 17:35
Где-нибудь в cpp-файле
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.10.2015, 17:35
Помогаю со студенческими работами здесь

Системный разделитель
Проблема с dataGridView, когда по умолчанию в системе стоит разделитель "," матюкается БД что не может привести varchar к numeric меняешь...

EditText Замена символа при вводе
Всем привет! Помогите реализовать замену символа ' ' на '_' при вводе. Пытался сделать с помощью InputFilter InputFilter...

Замена символов при вводе пароля
Опять же я с глупыми вопросами как можно сделать или может есть кака я то функция что при вводе пароля эти символы оттображаются как * ...

Десятичный системный разделитель
Здравствуйте товарищи (господа) специалисты! Прошу помощи в решении вопроса любителю. Есть программа на Билдер 5. Она содержит...

Получить системный разделитель дробной части
Здрастуйте! Подскажите, plz, как определить какой разделитель дробной части стоит в системе: точка или запятая?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru