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

Вниз

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

 
TrollXP   (2003-12-10 11:34) [0]

Доброе время суток! Подскажите как реализовать отбор в ListBox, если я ввожу имя в Edit, т.е. если в ListBoxе написано один, огурец, вода и т.п., то при вводе в Edit "о" остались только один и огурец.


 
Stas   (2003-12-10 11:55) [1]

Procedure SearchListBox (ListBox:TListbox;Text:String);
Var i,n:Integer;
begin
n:=length(text);
For i:=0 to listbox.Items.Count-1
do begin
if UPPERCASE(text)=uppercase(Copy(Listbox.items[i],1,n)) then
begin
listBox.ItemIndex:=i;
exit;
end;
end;
end;


 
Тролль   (2003-12-10 16:10) [2]

Что-то не работает твой пример!


 
Erik   (2003-12-10 16:57) [3]

Он неподставил удаление элемента.


 
TUser   (2003-12-10 17:18) [4]

А ежели его поставить - то нумерация элементов поменяется. Поэтому делай так
1. вместо for пиши while и инкреминируй i только в том случае, если ничего не удалялось.
2. заноси все найденные элементы в отдельный динамический массив, но заноси туда не i, а i-length(yourindexarray)-1. Потом все удаляй.
3. в цикле for после удаления элемента проверяй вновь возникший на его месте, т.е.
for i:=0 to length(ar)-1 do
while UPPERCASE(text)=uppercase(Copy(Listbox.items[i],1,n)) do
// здесь удаляй элемент массива

Ну, можно еще какие-нибудь способы выдумать.


 
Тролль   (2003-12-15 15:52) [5]

2 TUser
Вот я тут 5 дней уже мучаюсь и никак не могу понять твой алгоритм. Может, объяснишь подробнее?


 
Palladin   (2003-12-15 17:51) [6]

var
AllItems:TStringList; // хранишь исходный массив строк

procedure TForm1.Edit1Change(Sender: TObject);
var
i:integer;
begin
LockWindowUpdate(ListBox1.Handle);
ListBox1.Clear;
for i:=0 to AllStrings.Count-1 do
if AnsiUpperCase(Copy(AllStrings[i],1,Length(Edit1.Text)))=AnsiUpperCase(Edit1.Text) then
ListBox1.Items.Add(AllStrings[i]);
LockWindowUpdate(0);
end;


 
Тролль   (2003-12-18 12:58) [7]

Спасибо. У меня был такой вариант, но я не смог его продумать. Тут такой вопрос: я так понял, что при добовление строк (AllItems.Add) строки не добовляются, а замещают старые. Так вот, а если использовать другой ListBox, это не повлияет на скорость?


 
TUser   (2003-12-18 13:17) [8]

1. Вроде должно работать так. Берем первый элемент, если первые буквы (n = length(text)) совпадают с точностью до их заглавности, то этот элемент надо удалить. Если удалили - то на его место встанет новый элемент, следовательно опять преоверяем, пока не окажется, что на этом месте остался элемент, который не надо удалять. для этого цикл while. (Его вообще-то неплохо бы записать, как while (...) and i<ListBox1.Items.Count), а то можно нарваться на AV). как только это случилось проевереяем след. элемент списка - для этого нам for.
2. Add добавляет строки в конец. На скорость не повляет, но можно скорость работы немного увеличть, если написать with ListBox1 do ... . Хотя, много ты не выиграешь, если длина списков в пределах разумного.


 
Тролль   (2003-12-18 16:52) [9]

2 TUser
Впринципе, я разобрался с кодом, который предложил Palladin. Правда, опять возникли вопросы. У меня два лист бокса: информация для одного берётся для другого. Т.е. если копию Листа (в котором ещю), то надо делать копию и второго Листа (помошника). А если, допустим, элементов более 1000 (а мож и больше) как это отразится на скорости и загруженности? Спасибо.


 
Тимохов   (2003-12-18 17:11) [10]

Если у тебя 16 мГц 286, то может и отразиться.
На нормальном современном компе 1000, как и 10000, фигня.

Не фигня, когда есть время не n, а n в квадрате.

Т.е. любые линейные действия (т.е. сложности n) работают быстро.

ИМХО



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

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

Наверх





Память: 0.46 MB
Время: 0.01 c
1-11949
ASt
2003-12-20 00:06
2004.01.05
Параметры запуска приложения


1-11891
GH@ST
2003-12-18 13:38
2004.01.05
TreeView определение родителя


14-12064
MONA
2003-12-07 14:13
2004.01.05
а разве можно войти в инет под XP


14-12130
SPeller
2003-12-13 14:43
2004.01.05
Тем, у кого браузер НЕ IE, или IE меньше 6-й версии


6-12029
bul82
2003-11-03 16:38
2004.01.05
Программа удаленного управления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский