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

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

Поиск в ListBox не работает из-за цифр? [D7, WinXP]


kyn66 ©   (2005-08-30 14:40:00) 

Уважаемые мастера, вопрос уже задавался, однако ответа не получено. У меня в Листбокс добавляются цифры вводимые в Edit1. Когда выполняю поиск

ListBox1.Perform(LB_SELECTSTRING, 0, LongInt(PChar(Edit1.text)))

, то при MultiSelect = True, если в листе присутствует 10, то 1 уже не добавляется после проверки. Если MultiSelect = False, то 10 проскакивает, хоть в листе 10 уже есть. Почему поиск не работает? Может потому, что я ввожу цифры?


kyn66   (2005-09-01 15:07:00) [1]

Все нормально. После применения IndexOf(спасибо begin...end) все проверяет как надо.

Хочу попросить администратора форума присвоить begin...end степень магистра за неоднократные, грамотные, очень понятные ответы. СПАСИБО !


Наиль   (2005-09-01 11:15:00) [2]

У меня очущение, что отвечаю не в тему из-за фразы
> то 10 проскакивает, хоть в листе 10 уже есть
Но всё равно попробую.
Если нужно полное совпадение, то я делаю так:
ListBox1.ItemIndex:=ListBox1.Items.IndexOf('10');


begin...end   (2005-09-01 11:06:00) [3]

> kyn66 ©   (01.09.05 11:03) [13]

> Тогда и StringList должен с этим отработать правильно?

Да. А причём здесь TStringList?


kyn66   (2005-09-01 11:03:00) [4]

>> begin...end
ListBox.Items.IndexOf - работает. Тогда и StringList должен с этим отработать правильно?


Германн   (2005-09-01 01:03:00) [5]

2 begin...end ©   (31.08.05 21:32) [11]

Ты не так ответил! :)

Надо бы было так:
> tesseract ©   (31.08.05 21:22) [10]

> Странно, должно
Не должно.

> ты должен
Не должен.

> Попробуй
Не надо.

Но тогда бы пришлось ставить копирайт. :(


begin...end   (2005-08-31 21:32:00) [6]

> tesseract ©   (31.08.05 21:22) [10]

> Странно, должно работать.

Не должно.

> ты должен передать адрес PChar в функцию

Не должен.

> Попробуй (PChar(edit1.text)^) без longint.

Не надо.


tesseract   (2005-08-31 21:22:00) [7]

Странно, должно работать.
Проблема в том что ты должен передать адрес PChar в функцию,
Попробуй (PChar(edit1.text)^) без longint.


kyn66   (2005-08-31 19:24:00) [8]

>> Действительно не работает.


begin...end   (2005-08-31 14:55:00) [9]

> kyn66 ©   (31.08.05 11:51) [5]

> Т.е. MultiSelect нельзя ставить True?

MultiSelect можно ставить в True, но при этом не надо использовать LB_SELECTSTRING.

> Так ка-же тогда искать на полное совпадение?

ListBox.Items.IndexOf вызывать?

> tesseract ©   (31.08.05 13:43) [6]

Неверно.


kyn66   (2005-08-31 14:37:00) [10]

>> а это уже проверено? Ща буду пробывать искать.


tesseract   (2005-08-31 13:43:00) [11]

>>Так ка-же тогда искать на полное совпадение?

А просто PChar не подходит?
Тогда выбери нужный вариант

var temp:PCHAR;
new(temp);
temp:=PCHAR(edit.text);
ListBox1.Perform(LB_SELECTSTRING, -1, @temp);

ListBox1.Perform(LB_SELECTSTRING, -1, LongInt(@PChar(Edit1.text)))


kyn66   (2005-08-31 11:51:00) [12]

>> begin...end
Насчет -1я в курсе, уже исправил, но это не столько важно в данной ситуации. Меня угнетает поиск в принципе. А что означает сия строка, штось не допру.. Do not use this message with a list box that has the LBS_MULTIPLESEL or the LBS_EXTENDEDSEL stylesТ.е. MultiSelect нельзя ставить True? Так каой выход?. Сечас делаю проверку через таблицу в памяти, но не хотелось-бы прогу раздувать, подвешивая лишние компоненты. 8-(

>> LongInt(PChar(Edit1.text)) - числовое значение адреса первой буквы текста

Так ка-же тогда искать на полное совпадение?


begin...end   (2005-08-31 08:41:00) [13]

> kyn66 ©   (30.08.05 14:40)

> ListBox1.Perform(LB_SELECTSTRING, 0, LongInt(PChar(Edit1.text)))

ListBox1.Perform(LB_SELECTSTRING, -1, LongInt(PChar(Edit1.text)))

> то при MultiSelect = True...

MSDN: Do not use this message with a list box that has the LBS_MULTIPLESELor the LBS_EXTENDEDSEL styles.


Наиль   (2005-08-30 22:39:00) [14]

Стормозил. Передать строку в Perform можно только таким способом.


Наиль   (2005-08-30 22:37:00) [15]

Только сейчас заметил (спасибо   tesseract)
LongInt(PChar(Edit1.text))- числовое значение адреса первой буквы текста


tesseract   (2005-08-30 22:34:00) [16]

С точки зрения Tedit  - всё символы, с точки зрения Longint - всё цифры.
подумай что ты реально добавляешь


Наверх

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