В этом маленьком уроке я покажу вам как осуществить поиск текста в компоненте MEMO. Давайте откроем Delphi и создадим новый проект, кидаем на форму компонент Edit, Memo, Button все они с закладки Standart. Отлично, идем дальше, в обработчике OnClick кнопки прописываем следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var // Объявляем переменные
Find:string; // Искомая строка
i:integer; // Счетчик для цикла
begin
find:=Edit1.Text; // Записываем в find текст из Edit
For i:=0 to Memo1.Lines.Count-1 do // Запускаем цикл поиска строки
If Pos(FIND, Memo1.Lines.Text)<>0
Then
Begin
Memo1.SetFocus();
Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;
Memo1.SelLength:=Length(FIND);
End;
end;
Программа будет искать в Memo текст введенный в Edit и если найдет выделит его. Довольно просто и понятно..
Похожие материалы
Последние из рубрики
- Delphi. Запрещаем второй запуск.
- Учимся в delphi получать информацию о системе
- Учимся освобождать занимаемую программой память на Delphi
Мне не до конца понятно задание.
Ты говоришь тебе даны строки
photo1_1
photo1_2
photo1_2
phot
и нужно удалить строчку со словом phot. Строка должна в точности соответствовать вводимому тексту или слово просто должно встречаться в строке, чтоб она была удалена? Т.е. в данном примере должны удалиться все строки или только последняя?
Добавлено через 9 минут
Если нужно удалить только строки полностью соответствующие условию, то делаем так:
Delphi | ||
|
Добавлено через 1 минуту
Если же нужно удалить строки, в которых присутствует данное слово, то делаем так:
Delphi | ||
|
Форум программистов Vingrad
Модераторы: Poseidon, Snowy, bems, MetalFan |
Поиск: |
|
Опции темы |
Johnny M |
|
||
Новичок Профиль Репутация: нет
|
Привет всем. Нужна помощь!!! Пример. Компонент memo заполнен текстом. Нужно найти необходимую комбинацию слов (или просто нужное слово), например, «ананас» — и определить номер строки, его содержащий, чтобы затем вставить строку с текстовым комментарием сразу за данной строкой. |
||
|
|||
_hunter |
|
||
Эксперт Профиль
Репутация: 15
|
ну так в чем проблема? strings memo получить можно — потом в этом списке пробегаеш. а найти слово — pos ——————— Tempora mutantur, et nos mutamur in illis… |
||
|
|||
Негодяй |
|
||
Порядочный Профиль
Репутация: нет
|
|
||
|
|||
Негодяй |
|
||||
Порядочный Профиль
Репутация: нет
|
значит я перетрудился, я вставил строку сразу за словом, решение
|
||||
|
|||||
Pakshin A. S. |
|
||
Эксперт Профиль Репутация: 21
|
А случаем не от нуля ли цикл начинать надо… |
||
|
|||
RA |
|
||
Брутальный буратина Профиль
Репутация: 14
|
от нуля |
||
|
|||
Негодяй |
|
||
Порядочный Профиль
Репутация: нет
|
Johnny M |
||
|
|||
Serhik_z |
|
||
Шустрый Профиль Репутация: нет
|
Добавь на форму CheckBox |
||
|
|||
Fantasist |
|
||
Лентяй Профиль Репутация: нет
|
Что-то не понял, а на фига цикл по Lines? Есть же свойство Техt, которая выдает текст целиком. ——————— Волны гасят ветер… |
||
|
|||
Marriage |
|
||
Опытный Профиль
Репутация: нет
|
А если слово перенесено ……
——————— Praemonitus, praemunitus |
||
|
|||
RA |
|
||||
Брутальный буратина Профиль
Репутация: 14
|
То ворд врап включить.
Ну в вопросе сказанно что нужен номер строки. |
||||
|
|||||
|
Правила форума «Delphi: Общие вопросы» | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
Июнь 29, 2013
Memo потрясающий по своей простоте и удобности компонент! Но далеко не все осознают его мощь.
Сегодня я хочу научить вас делать поиск по этому компоненту.
На многих сайтах видел подобные статьи с примерами, но меня не устраивал всегда один нюанс: поиск всегда производился всего один раз, без возможности реализации кнопки «найти след.» Давайте сделаем нормальный поиск по компоненту Memo:
Скачать видео
Кидаем на форму компоненты Memo1, Button1, Edit1
Для начала нам понадобятся несколько вспомогательных, глобальных переменных:
1 2 3 4 |
var s:string; //В этой переменной мы будем производить поиск, в ней же будем обрезать текст p:integer; //Здесь будут храниться координаты найденного куска текста i:integer; //Количество обрезанных символов |
В обработчике нажатия Button1 пишем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if p=0 then begin i:=0; //если поиска еще не было то заполняем переменные начальными для поиска значениями s:= Memo1.Text ; // переносим весь текст в переменную в которой будем производить поиск end; p:= pos(edit1.Text,s); //ищем строку в переменной s if p<>0 then //если строка найдена то делаем begin //три следующие строчки - выделяем найденный текст Memo1.SetFocus(); memo1.SelStart:=p+i-1; memo1.SelLength:=length(edit1.text); i:=i+p+length(edit1.Text)-1; //заполняем i новыми данными об обрезанном количестве символов s:= copy(s,p+length(edit1.Text),length(s)); //обрезаем строковую переменную чтобы исключить повторные нахождения одного и того же элемента end else showmessage('поиск закончен'); |
Чтобы не было лишних багов при любом изменении Edit1 нужно обнулять переменную p. Я делаю это в событии OnKeyDown:
Вот и все, удачки вам)
P.S. Если хотите постичь все фишки работы с Delphi, то возможно стоит задуматься о приобретении моего курса по Delphi — progdelphi.ru/
Понравилась статья? Жми: |
Поделиться в соц. сетях |
Публикатор/Автор: Артём Кашеваров
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…
Поиск строки в Мемо
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
есть компонент Мемо1 в нем имеется некоторый текст |
Shaggy |
|
Moderator Рейтинг (т): 130 |
Memo.Text+pos |
olga90 |
|
Цитата Shaggy @ 02.08.06, 16:02 Memo.Text+pos а можно пример или чуть поподробнее |
DMX_XC |
|
Senior Member Рейтинг (т): 21 |
Если правильно понял тебя. Но эту процедуру я использовал для RichEdit procedure TTextDoc.Stroka; VAR RLNum : LongInt; RKNum : LongInt; begin RLNum := RichEdit.Perform(EM_LINEFROMCHAR, RichEdit.SelStart, 0); RKNum := RichEdit.Perform(EM_LINEINDEX, RLNum, 0); StatusBar1.Panels[0].text := ‘Ст ‘+IntToStr(RLNum+1)+’ Кол ‘+IntToStr((RichEdit.SelStart-RKNum)+1); end; |
Alex Wolf |
|
Full Member Рейтинг (т): 16 |
Цитата olga90 @ 02.08.06, 16:16 а можно пример или чуть поподробнее if Pos(’55’, Memo1.Text)=0 then ShowMessage(‘Не найден текст «55»‘); Вместо ’55’ — подставь то, что тебе надо найти Сообщение отредактировано: Alex Wolf — 02.08.06, 16:27 |
olga90 |
|
Всем спасибо. |
olga90 |
|
а как мне удалить найденные символы if Pos(’55’, Memo1.Text)=0 then //нужно их удалить из Мемо1 |
Anatoly Podgoretsky |
|
SelStart, SelLength |
olga90 |
|
Цитата Anatoly Podgoretsky @ 09.08.06, 16:34 Pos() должен быть > 0
это конечно же так так как удалить, я так и не поняла??? |
Soul |
|
ps:=Pos(substr, Memo1.Text); if ps<>0 then begin st:=memo1.text; delete(st,ps,length(substr)); memo1.text:=st; end; else showmessage(‘Ошибка!’); ИМХО так элегантнее, и удалит все вхождения подстроки в строку… memo1.text:=stringreplace(memo1.text,substr,»,[rfReplaceAll, rfIgnoreCase]); |
olga90 |
|
Цитата Soul memo1.text:=stringreplace(memo1.text,substr,»,[rfReplaceAll, rfIgnoreCase]);
такой вариант для меня лучше, т.к. сразу удаляет из всех строк нужную подстроку |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0377 ] [ 16 queries used ] [ Generated: 27.05.23, 17:10 GMT ]