Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 03.07.2013
Сообщений: 56

Изменить цвет TEdit на 5 сек а потом вернуть как было

14.11.2013, 22:33. Показов 2122. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот занимаюсь разработкой новой версии своей программы и я захотел добавить в программу проверку введенных значений в поля TEdit (Всего их у меня в программе 14).

Суть в том, что есть обнаружено что в поле TEdit введено недопустимое значение то это поле изменит свой цвет на красный а через 5 сек обратно на белый.

С проверкой введенных значений особых трудностей не возникло, да и как поменять цвет тоже знаю, но как сделать так что-бы через 5 сек цвет TEdit изменился с красного на белый у меня не получилось.

В ту функцию которая занимается проверкой введенных значений передается в качестве аргумента указатель на TEdit. Если программа находит ошибку то она меняет цвет этого поля.

Пробовал использовать компонент TTimer, но возникла проблема, я не могу или не догадался как передать в эту процедуру нужные мне аргументы.

В общем ребят если кто знает как мне лучше это реализовать прошу помочь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.11.2013, 22:33
Ответы с готовыми решениями:

Как сохранить содержимое буфера, изменить его, а потом вернуть всё обратно?
Собственно вопрос: как сохранить содержимое буфера, выполнить некоторые действия (используя буфер), а потом вернуть всё обратно?

Изменить цвет текста компонента Tedit
На форме есть 7 компонентов Tedit. По нажатию кнопки данные из них считываются в массив и находится минимальное значение. Необходимо,...

Изменить цвет и потом воспроизвести звук
Здравствуйте. C# приложение WPF Всё работает но немного не так. При нажатии на кнопку сначала воспроизводится звук, а потом меняется...

5
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
14.11.2013, 23:23
Код функции, возможно, упростит "поиск" решения проблемы.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33411 / 21521 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
14.11.2013, 23:46
Root_user, а у тебя есть уверенность (при использовании одного таймера), что в то время, как цвет одного из Edit-ов еще не вернется в нормальный clWindow, пользователь уже не занесет неправильную информацию в другой Edit? Получится наложение, таймер еще не доработал, а уже надо запускать новый...

Если уверен, что этого не будет - то все тривиально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    ((TEdit*)Timer1->Tag)->Color = clWindow;
    Timer1->Enabled = false;
    Timer1->Tag = 0;
}
 
// Этот обработчик назначить в Инспекторе Объектов всем Edit-ам на OnChange,
// а на форму положить таймер с Enabled = false, и обработчиком OnTimer, показанным выше
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    int Value;
    TEdit *edit = static_cast<TEdit*>(Sender);
    if(!TryStrToInt(edit->Text, Value)) // Или любую другую проверку
    {
        edit->Color = clRed;
        Timer1->Tag = (int)edit;
        Timer1->Enabled = true;
    }
}
А если пользователь будет быстрее?
2
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.11.2013, 13:44
Я бы так сделал: пронумеровал бы тэги эдитов (от 1 до 14), создал бы массив счетчика секунд под это дело, и по таймеру анализировал его. Примерно так бы выглядело...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    char cvet[15] = {0};
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
   TEdit *edd = static_cast<TEdit*>(Sender); // общий для всех Edit
   int VV = edd->Text.ToIntDef(-1);
   if (VV<0) { edd->Color=clRed; cvet[edd->Tag] = 5; } else
   if (cvet[edd->Tag]) { cvet[edd->Tag] = 0; edd->Color=clWindow; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    for (int t=sizeof(cvet),i=0;i<t;i++)
      if (cvet[i])
        if (--cvet[i]==0) {
          for (int g=0;g<ComponentCount;g++)
            if (Components[g]->ClassNameIs("TEdit"))
              if (((TEdit*)Components[g])->Tag==i)
                ((TEdit*)Components[g])->Color=clWindow;
        }
}
Добавлено через 12 минут
И, наверное, можно упростить, если в массиве хранить не тэги, а указатели на "провинившийся" эдит.
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596
18.11.2013, 10:16
- Вот передаю два простых проекта, навеянные вариантами UI и nick42. Можно попробовать
все в живую! UI опасался, что обработчик OnEditChange не обеспечивает правильную работу при
повторном вхождении в него (нереентерабельный). Я просто запретил повторное вхождение в обработчик
с помощью метода Other_Edits. В варианте nick42 все Едиты, как он и задумывал, работают параллельно.
Смотрите, кому что больше нравится ...
Вложения
Тип файла: rar Vers_UI.rar (320.1 Кб, 1 просмотров)
Тип файла: rar Vers_nick42.rar (331.8 Кб, 6 просмотров)
1
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
18.11.2013, 12:33
Цитата Сообщение от Root_user Посмотреть сообщение
Суть в том, что есть обнаружено что в поле TEdit введено недопустимое значение то это поле изменит свой цвет на красный а через 5 сек обратно на белый.
Почему именно 5 секунд? Разве не будет логичнее оставлять TEdit красным пока в нём находятся недопустимые значения? В таком случае можно обойтись вообще без таймеров.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2013, 12:33
Помогаю со студенческими работами здесь

Как в TEdit изменить регистр вводимых символов?
Подскажите как в Edit изменить регистр букв ввода, в данном случае должны быть все большие. XE 5 android

Код, меняющий цвет куба с интервалом 2.5 сек. Как сделать смену цветов плавным?
Как сделать смену цвета куба плавным? using System.Collections; using System.Collections.Generic; using UnityEngine; ...

Можно ли как-то вернуть поведение со сниппетами типа foreach, как было до решарпера?
Здравствуйте! Может тут кто знает, в англофорумах не нашёл почему-то. Пытаюсь вместе с командой приучиться к решарперу, но по...

После обновления до Windows 10 хочу вернуть всё как было
Добрый день, может кто и мне поможет вернуть все как было, после обновления до Windows 10

В TEdit ввести путь к папке, а потом ее содержимое вывести в TMemo
В TEdit нужно ввести путь к папке. Потом в TMemo вывести содержимое этой папки. Как реализовать с помощью программного кода Лазарус. Кто...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru