Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод данных в TEdit, выполнить событие с задержкой 
:(
    Опции темы
pavelv
Дата 15.11.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Всем привет.
На форме есть TEdit. На OnChange прописано выполнение запроса в sql(фильтр по названию). Хочется чтобы OnChange срабатывал когда человек уже закончил ввод сиволов, тоесть с задержкой 0.3с или какой-либо другой. Думал как такое реализовать. Мысль одна взять таймер с интервалов 0.3с и сначала выключать, потом включать его после каждого нажатого символа, если в таймер будет второй заход то вызывать процедуру. Но метод немного топорный, куча флагов и в общем красоты кода такая реализация не добавит smile. Если кто сталкивался с подобной задачей расскажите как выкрутились?
PM MAIL   Вверх
dumb
Дата 15.11.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: нет
Всего: 158



какая куча флагов?!

в дизайнере на таймере поставь Interval=0.

в Edit-OnChange:
Код

  Timer1.Interval := 0;
  Timer1.Inteval := 1000;


в Timer-OnTimer:
Код

  Timer1.Interval := 0;
  // запрос

PM MAIL   Вверх
~FoX~
Дата 15.11.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 4
Всего: 68



pavelv, вообще по онченджь выполнять запросто это не есть хорошо.....Поставь ты кнопку рядом с едитом и как только человек закончит набирать он ее нажмет.....Ну на крайний случай пусть по окончании набора ентер надавит...


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
pavelv
Дата 18.11.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



~FoX~ в принципе если сделать нужную задержку думаю не нужно лепить лишние кнопки. На OnEnter вариант тоже рассматривался, сам посидел понажимал и когда на onChange срабатывает понравилось куда больше. Комфорт тоже требует жертв smile. Возможно со временем когда база станет намного больше и фильтр будет медленно работать я от этого откажусь. dumb вариант хороший, но  хотелось бы использовать таймер не только для этой цели, а собственно из-за этого и появляются дополнительные переменные. Хочется сделать раз и навсегда, тоесть если захочется где-нибудь подобное сделать чтобы изменения заняли крап времени. 


PM MAIL   Вверх
mutex
Дата 18.11.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: 2
Всего: 3



pavelv. Событие OnExit не подходит?
PM MAIL   Вверх
dumb
Дата 18.11.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: нет
Всего: 158



Цитата(pavelv @  18.11.2007,  11:30 Найти цитируемый пост)
но  хотелось бы использовать таймер не только для этой цели, а собственно из-за этого и появляются дополнительные переменные
не стоит заниматься подобными экономиями: таймер - это не монстр, занимающий мегабайты кода и данных. да и экономия такая чревата коллизиями... короче, на каждую необходимость создавай свой таймер.
PM MAIL   Вверх
pavelv
Дата 19.11.2007, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



mutex OnExit не подходит. Ситуация такая: во-время ввода данных идёт фильтр в базе на like и хочется сразу видеть все объекты отфильтрованные. Поэтому OnChange и сделал, как самое удобное в данном случае.
dumb если честно не хотелось  захламлять форму, хотя скорее всего ты и прав. Если что-нибудь когда-нибудь косякнёт за***шься исправлять smile. Видимо пока сделаю в лоб.
PM MAIL   Вверх
Bose
Дата 20.11.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



dumb, +1
я тоже такие штуки через таймер делаю. 
PM MAIL WWW Skype   Вверх
Deniz
Дата 22.11.2007, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(dumb @  18.11.2007,  18:06 Найти цитируемый пост)
короче, на каждую необходимость создавай свой таймер.
 а смысл?
Можно и в одном обработать, просто правильно рассчитать интервал и ввести приватную переменную
Например интервал = 100 т.е. 10 раз в секунду
в Edit-OnChange:
Код

EditOnChangeVar:=0;


в Timer-OnTimer:
Код

if EditOnChangeVar > -1 then 
begin
  Inc(EditOnChangeVar);
  if EditOnChangeVar = 3 then // прошло 0.3 секунды после редактирования
  begin
    EditOnChangeVar = -1;
    // выбор из БД
  end;
end;



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1053 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.