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

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

Сортировка в ListBox с сохранением старого ItemIndex [D5, WinXP]


lost3000 ©   (2004-12-22 11:33:00) 

Господа, подскажите, пожалуйста, по проблеме...
Из файла закачиваю в ListBox строки. При включении Sorted меняется ItemIndex строк. Возможно ли его сохранить изначальным?


lost3000   (2004-12-22 13:25:00) [1]

Спасибо всем!


Alexander Panov   (2004-12-22 13:18:00) [2]

lost3000   (22.12.04 11:33)

Быстрее будет при заполнении TListBox заполнить уникальными значениями ListBox.Items.Objects и после сортировки вести поиск по этому полю.

Перед сортировкой(или раньше):

for i := 0 to ListBox.Count-1
 do ListBox.Items.Objects[i] := Pointer(i);


var
 p: Ponter;
 i: Integer;
begin
 p := ListBox.Items.Objects[ListBox.ItemIndex];
 ... //Сортировка


После сортировки:

 for i := 0 to ListBox.Count-1 do
 begin
   if ListBox.Items.Objects[i]=p then
   begin
     ListBox.ItemIndex := i;
     break;
   end;
 end;


antonn   (2004-12-22 13:09:00) [3]


> Александр Иванов ©   (22.12.04 12:48) [11]

ну, собственно, и все... Под условие вопроса ответ не проходит.


Александр Иванов   (2004-12-22 12:48:00) [4]

antonn ©   (22.12.04 12:32) [10]

Ну попадутся, и что?


antonn   (2004-12-22 12:32:00) [5]

lost3000   (22.12.04 11:33)  

вставляй объекты, а то попадуться 2 одинаковых строки...


lost3000   (2004-12-22 12:19:00) [6]

Понял. Спасибо, Александр!


Александр Иванов   (2004-12-22 12:15:00) [7]

А зачем еще варианты, ведь даже если имеются одинаковые строки неважно какая из них станет текущей. Конечно за исключением случаев, когда к ним "привязана" какая-то дополнительная информация, но тогда и поиск следует осуществлять по этой информации.

var buf:string;i:integer;
begin
buf:=ListBox1.Items[ListBox1.ItemIndex];
ListBox1.Sorted:=True;
i:=0;
while buf <> ListBox1.Items[i] do inc(i);
ListBox1.ItemIndex:=i;
end;


lost3000   (2004-12-22 12:11:00) [8]

Александру : Поиск, опять же, по содержанию строки? Или есть ещё варианты?


lost3000   (2004-12-22 12:09:00) [9]

Спасибо.


Александр Иванов   (2004-12-22 12:06:00) [10]

Поиск, после сортировки.


Плохиш   (2004-12-22 11:57:00) [11]

Запомнить содержимое этой строки до сортировки и найти её после


lost3000   (2004-12-22 11:55:00) [12]

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


lost3000   (2004-12-22 11:54:00) [13]

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


Плохиш   (2004-12-22 11:44:00) [14]

ItemIndex - в переводе, "порядковый номер элемента в списке"
Следующий вопрос?


Наверх

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