Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];

Вниз

Поиск в ListBox   Найти похожие ветки 

 
DeMoN-777   (2002-04-09 19:04) [0]

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

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


 
MBo   (2002-04-09 19:25) [1]

по целому слову или,скажем, поиск "123" должен выделять
"1234565" или "64351234"?


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

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


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

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

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

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


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

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


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

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

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


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

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

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


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

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


 
Song   (2002-04-10 13:10) [8]

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


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

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


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

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


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


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

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

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


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

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


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

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


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

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

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


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

>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 раза, придумай сам, как быть.


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

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 минут довольно коряво и не учитывается то что подстроки может и не быть в строке но мысль думаю понятна


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

>Song © (10.04.02 13:37)

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


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

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


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

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

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


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


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

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


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

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


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

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

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


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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
14-70019
AlexS
2002-03-17 17:03
2002.04.22
Описание формата ISO9660


14-70008
Феликс
2002-03-16 20:43
2002.04.22
Компоненты?


1-69882
koks
2002-04-05 15:26
2002.04.22
Подскажите, где можно найти хорошие коллекции битмапов...


1-69787
Андре_
2002-04-01 09:44
2002.04.22
XML


1-69768
JokerJ
2002-04-10 06:05
2002.04.22
TWebBrowser :: автозаполнение форм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский