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

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

Поиск в ;ListBox [D5]


Страницы:   1 2

DeMoN-777 ©   (2002-04-09 19:04:00) 

Уважаемые мастера прошу вас ответить на следующий вопрос
У меня в программе есть листбокс в котором мне необходимо
осуществить поиск по задонному слову и чтоб ещё и выделялся найденый текст.
Но вот только как енто реализовать я что-тоникак не пойму.

Помогите пожалуйста.


DeMoN-777   (2002-04-10 20:24:00) [1]

>Леха (10.04.02 17:54)
Спасибо тебе ОГРОМНОЕ!!!
Я уже начал думать что не дано...........
Но ведь есть ещё люди добрые =)

unit QStrings RuleZzz тама много инересного.........


Да кстати, вопрос закрыт на все 100%


DeMoN-777   (2002-04-10 19:33:00) [2]

Ща посмотрю....


Леха   (2002-04-10 17:54:00) [3]

Я же тебе отправил решение


DeMoN-777   (2002-04-10 17:46:00) [4]

Нет мне надо искать именно в самом ListBox
Вот этот метод мне не подходит.

procedure TForm1.ToolButton6Click(Sender: TObject);
begin
if edit1.text <> "" then
listbox1.ItemIndex:=( listbox1.Items.IndexOf(edit1.text))
else
showmessage("Вы должны ввести текст для поиска");
end;


Так как он ищет только строгие соответствия, а мне надо чтобы поис производился как например в хелпах, то есть по строгим соответствиям а по похожим.
Надеюсь я ясно изложил вопрос.
Как же быть-то ?


Song   (2002-04-10 16:07:00) [5]

Ищите на предмет вхождения слова, пока не найдёте рисуйте с белым цветом фона, как только нашли изменяте на синий цвет фона и рисуйте найденное слово. Далее удаляем наденное слово из строки и снова с начала.


DeMoN-777   (2002-04-10 15:50:00) [6]

>Song © (10.04.02 13:37)

Вообще-то ты прав мне надо примерно такой-же поиск как и в хелпе.
Не подскажешь поподробнее как его реализовать?
И если можешь, то с примером.
Буду очень благодарен.


Леха   (2002-04-10 14:52:00) [7]

procedure GirnyyPos(Text,Str:string;Canvas:TCanvas;Left,Top:integer);
var s,s1,s2,s3:string;
Tek:integer;
begin
Tek:=Left;
s:=Text;
s1:=copy(s,1,pos(Str,s)-1);
delete(s,1,pos(Str,s));
s2:=Str;
delete(s,1,length(Str));
s3:=s;
Canvas.TextOut(Tek,Top,s1);
Tek:=Tek+Canvas.TextWidth(s1);
Canvas.Font.Style:=Canvas.Font.Style+[fsBold];
Canvas.TextOut(Tek,Top,s2);
Tek:=Tek+Canvas.TextWidth(s2);
Canvas.Font.Style:=Canvas.Font.Style-[fsBold];
Canvas.TextOut(Tek,Top,s3);
end;


Написанно за 5 минут довольно коряво и не учитывается то что подстроки может и не быть в строке но мысль думаю понятна


MBo   (2002-04-10 14:39:00) [8]

>DeMoN-777
возможно, тебе подойдет RichEdit, т.к. в вопросе нет намеков на действия, характерные для ListBox
тогда задача решается так - строки в Richedit1.Lines
SS:искомая строка

with Richedit1 do begin
i:=Pos(ss, Lines.Text);
if i>0 then begin
SelStart:=i-1;
SelLength:=Length(ss);
SelAttributes.Color:=clRed;
end;
end;

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


DeMoN-777   (2002-04-10 14:11:00) [9]

>Song ©
Надо писать свой обработчик onDrawItem

Помоги плиз его написать
Хотя-бы примерно.........


Song   (2002-04-10 13:37:00) [10]

А знаете как делает Дельфи такую же штуку в хэлпе? Он просто "выделяет" нужные части строки закрашиванием нужных участков цветом фона (синего), потом рисует вокруг них пунктирную рамку и всё!. Т.е. это делается именно так как я Вам предлагал.
Если же Вы хотите именно выделить, то EM_SETSEL, но по-моему там можно выделить только один сплошнойотрывок.


Леха   (2002-04-10 13:36:00) [11]

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


Song   (2002-04-10 13:25:00) [12]

Конечно понял:
Вот у тебя есть 3 строки:
Маша
Наташа
Ирина

Ты ищешь по "Наташа" после поиска оно должно быть у тебя выделено. Если ты хочешь выделять жирным шрифтом то делай как я сказал. Если ты хочешь выделить "закрашенным фокусом ввода" не знаю как тебе это ещё объяснить, то тебе нужно юзать АПИ. Потому что не для первого ни для второго в классе TListBox нет встроенных средств.


DeMoN-777   (2002-04-10 13:24:00) [13]

Song © (10.04.02 13:10)
_________________________
Читай вопрос...
_________________________


Ну, например я ищу слово "Delphi".
Есть фраза "Delphi это среда разработки"
Поиск должен выделить так " Delphiэто среда разработки"
только не жирным а цветом.
А если я ищу слово "Раз" он должен выделить"
"Delphi это среда разработки"
Во как.


DeMoN-777   (2002-04-10 13:21:00) [14]

>Song ©
А ты вопрорс-то правильно понял ?
Прочитай ещё разок тогда я думаю поймёшь


Song   (2002-04-10 13:10:00) [15]

2Леха (10.04.02 13:07)
А это уже уточнил MBo © (09.04.02 19:25)
Если бы так проблема стояла, то, действительно, нужен будет перебор по Pos.


Леха   (2002-04-10 13:07:00) [16]

Song
а какой вариант вы можете предложить если требуется поиск по _подстроке_ IndexOf тут не поможет он ищет только строгие соответствия


Song   (2002-04-10 12:52:00) [17]

Дак так тогда и спрашивай.

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


DeMoN-777   (2002-04-10 12:45:00) [18]

>Song © (10.04.02 11:49
>Я же ему уже советовал IndexOf и LB_FINDSTRING, ему не понравилось...

Да всё мне понравилось, только я не понимаю как найденный текст выделить ..............


Song   (2002-04-10 11:49:00) [19]

2Леха (10.04.02 11:45)
Ваш вариант самый плохой.
Я же ему уже советовал IndexOf и LB_FINDSTRING, ему не понравилось...


Леха   (2002-04-10 11:45:00) [20]

Выделение с помощью OnDrawItem только устанлви стиль в lbOwnerDrawFixed

Поиск пооходишь по списку с помощью Pos

Если хочешь могу выслать работающий пример такого поиска пиши


Страницы:   1 2

Наверх

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