Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520

Как определить - выделен ли текст в поле Edit ?

15.12.2009, 10:48. Показов 2314. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется ограничить ввод значений в поле Edit диапазоном 0-255.
Можно, конечно, сделать проверку, если введенное значение больше 255, то равнять его к 255.
Но ведь будет некрасиво, юзер случайно вместо 143 вводит 1433, а там появляется 255.
Хотелось бы просто игнорировать нажатие клавиши, если результат превышает заданный диапазон.
Вот так вроде работает:
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
int CurrentValue;
if (Key == 8) return;  // BackSpace
if (! ((Key >= '0') & (Key <= '9')) ) { Key = 0; return; }  // не цифра
if ((Edit1->Text)=="") CurrentValue = 0;
else CurrentValue = StrToInt (Edit1->Text);
int i = CurrentValue * 10 + StrToInt(Key);
if (i > 255) Key = 0;
}
Но, если в поле введено, например, 143, выделяем всё мышкой, чтобы перезаписать целиком, то набор не получается, проверка идет как на добавление символа.
Как определить выделение текста?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2009, 10:48
Ответы с готовыми решениями:

Как определить введен ли текст в Edit?
Как определить введен ли текст в Edit?

Как узнать, какой текст в браузере сейчас выделен?
Как узнать, какой текст в браузере сейчас выделен? Вроде как надо использовать document.selection, только вот не понял как. В...

Как найти элемент в котором был выделен текст
Здравствуйте возникла такая задача. Есть три поля textarea, в одном из них выделен текст, заранее неизвестно в каком. Задача найти поле в...

6
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
15.12.2009, 10:57
DrMcSheen, а зачем? по большому счету он затирает весь текст и вводит заново, зачем его в этом ограничивать?
0
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
15.12.2009, 10:59  [ТС]
Так я и не хочу ограничивать, код ограничивает. Думает, что туда дописывается что-то и игнорит ввод.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
15.12.2009, 11:02
вам поможет анализ одного из этих свойств: SelLength, SelStart, SelText
1
 Аватар для DrMcSheen
62 / 63 / 3
Регистрация: 25.05.2009
Сообщений: 520
15.12.2009, 20:43  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
одного из этих свойств: SelLength, SelStart, SelText
Не получается, блин!
Одним обойтись. Двумя получилось.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
     if (Key == 8) return;  // BackSpace
     if (! ((Key >= '0') & (Key <= '9')) ) { Key = 0; return; }  // не цифра
     if ((Edit1->Text)=="") return;
 
     AnsiString asText;
     int iSelStart, iSelLength, iCurrentValue;
 
     asText = Edit1->Text;
     iSelLength = Edit1->SelLength;
     iSelStart = Edit1->SelStart;
 
     iCurrentValue = StrToInt (asText.Delete(iSelStart+1,iSelLength).Insert(Key,iSelStart+1));
     if (iCurrentValue > 255) Key = 0;
}
Lord_Voodoo, откуда ты всё знаешь?
Спасибо.
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
15.12.2009, 23:11
А может так будет проще?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
float a;
 
 
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ((Key>='0')&&(Key<='9')&&(Edit1->Text.Length()<3))
 return;
if (Key==VK_BACK)
 return;
Key=0;
}
 
 
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if (Edit1->Text.Length()!=0)
{
 a=StrToFloat(Edit1->Text);
 if (a>255)
  Edit1->Text=255;
}
}
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
16.12.2009, 09:16
Цитата Сообщение от DrMcSheen Посмотреть сообщение
Lord_Voodoo, откуда ты всё знаешь?
я знаю, как вызывается справка в билдере, это просто кладязь знаний...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.12.2009, 09:16
Помогаю со студенческими работами здесь

Блокнот: Как сделать кнопку недоступной, пока не выделен текст
Создал блокнот! В менюшках есть кнопка Копировать и она копирует только когда выделен текст, хочу сделать ее недоступной для нажатия до тех...

Не активный текст в поле EDIT исчезающий при вводе
Возможно такое сделать? Просто места мало в окне программы для пояснений, удобнее когда описание в поле ввода... Как в html в общем.

Как определить какой из радиокнопок выделен.
Здравствуйте!!! Просмотрел кучу инфы в поисковиках так и не понял как определить какой из двух одинаковых радиокнопок выделен. Создал...

событие текст выделен, и выделеный текст в переменную
Я нашёл темы подобные, но не смог в точности понять, что там да как, ибо было больше кода чем мой мозг может перевосить... Объясните...

После выбора radiobutton и нажатия на button вывести текст в поле edit
if (LOWORD(wp) == IDC_BUTTON1) { LRESULT result = SendDlgItemMessage(hWnd, IDC_RADIO1, BM_GETCHECK, 0, 0); if (result ==...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru