Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Про поиск в RichEdit... [D7]


Nic (gr. 442) ©   (2006-03-20 17:38:00) 

Вопрос такой:Имеется TRichEdit. допустим с таким текстом:
Name Вася dsfsdfdsfsdfdsfsd df gt вапв аппа ва павпвапеавпаа аппа пвапаFamily Пупкин dfdsfsdf
В TreeView должно отоброжаться Типо

+Name
  Вася
+Family
  Пупкин

Так вот не подскажите как это осуществить. Текст может быть довольно большим~ 1000 строк. И может меняться, т.е. если мы допустим в Пупкин удалим одну букву, то чтобы в TreeView Фамилия тоже изменилась или удалим в Family одну букву и Пупкин бы исчез.Я думал поставить таймер и секунды через 4 проверять текст на нахождение слов Family, Name. Не будет ли это тормозить? Подскажите, пожалуйста, как осуществить поиск по TRichEdit, чтобы при нахождении Famile в Tree записывалось следующее слово, какими функциями оперировать.


Рамиль   (2006-03-21 16:17:00) [1]

OnKeyDown используй


Nic (gr. 442)   (2006-03-21 15:52:00) [2]

С Timer разобрался. Пока скорость устраивает. Только, почему-то при нажатии на DEL OnPressKey не срабатывает. Не знаете из-за чего такое может быть?


Nic (gr. 442)   (2006-03-21 14:48:00) [3]

Так я и думал...
Ладно буду пробовать. Ещё FindText свой писать, хех, ....


Рамиль   (2006-03-21 14:37:00) [4]

Ессно с таймером. По KeyPress запускаешь заново, в OnTimer дизэйблишь и ищешь. Interval подбираешь экспериментально.


Nic (gr. 442)   (2006-03-21 14:32:00) [5]

Рамиль

> Без потока на паузу при наборе попробуй сначала


Сейчас порылся в событиях Rich. Чего-то такого не нашёл. Есть такое событие? Или надо поработать с таймером?

P.S. Извените за может быть для Вас глупые вопросы. Я не волшебник я только учусь :-)


Рамиль   (2006-03-21 14:11:00) [6]

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


Nic (gr. 442)   (2006-03-21 13:58:00) [7]

>напиши свою, более "умную" функцию поиска. У тебе же есть RichEdit.Lines...
А встроенных нет ? :-(
Рамиль
>наверное, в отдельном потоке, скопировав весь текст из richedit
А как это сделать? Помогите, pls я с потоками не работал.


Рамиль   (2006-03-21 13:11:00) [8]

Вообще, я бы предложил начинать искать при паузе в наборе, а то при большом тексте тормозить будет (и, наверное, в отдельном потоке, скопировав весь текст из richedit, если будет и дальше тормозить).


clickmaker   (2006-03-21 13:06:00) [9]


> Nic (gr. 442)   (21.03.06 12:45) [6]

напиши свою, более "умную" функцию поиска. У тебе же есть RichEdit.Lines...


Nic (gr. 442)   (2006-03-21 12:45:00) [10]

Попробую разобраться...

Но пока начал делать кусок задания появился вопрос. А можно ли с помощью FindText искать несколко слов???
Т.е.
FindText( 'Name' or 'Family', ..., ..., [stWholeWord])

так просто не работает. А хотелось бы чтобы он искал Name , но если раньше встретится Family то записывал его. Чтобы было в одном цикле. А не так, чтобы он весь текст просканил вначале на Name, а потом опять начал сканить на Famiy


clickmaker   (2006-03-21 11:09:00) [11]


> Text_GL_PRESS_KEY(NIL, 'q') <--- Не работает

там же var, а ты передаешь константу


Nic (gr. 442)   (2006-03-21 03:18:00) [12]

Пока что маленькую часть сделал, не тормозит. Поставил на событие OnKeyPress. Пользовался методом FindText(). Ещё вопрос по RichEdit как вызвать его процедуру OnKeyPress:=Text_GL_PRESS_KEY из других процедур.

procedure TIndex_Form.Text_GL_PRESS_KEY(Sender: TObject; var key: char);
begin
.
.
end;

Text_GL_PRESS_KEY(NIL, 'q') <--- Не работает


Nic (gr. 442)   (2006-03-20 22:24:00) [13]

Я сейчас подумал, если человек быстро будет набирать текст на клавиатуре(символов 200 в минуту) Вы думаете не будет подвисать?


Nic (gr. 442)   (2006-03-20 22:17:00) [14]

СПАСИБО ОБЯЗАТЕЛЬНО ПОПРОБУЮ, как Вы написали.  Ещё отпишусь...


Boris Marchenko   (2006-03-20 17:49:00) [15]

Таймер здесь, не нужен... Проверяйте на OnKeyPress. 1000 строк, имхо, немного, тормозить не должно.
Поиск обычный,
for i := 1 to ... do
Наличие слов Name и Family проверять как
if AnsiMidStr(S, i, 4) = 'Name' и if AnsiMidStr(S, i, 6) = 'Family'.


Наверх

Титульная страница Поиск, карта сайта Написать письмо