Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

Сортировка в FileListBox е   Найти похожие ветки 

 
Checist [root]   (2003-07-12 19:37) [0]

У меня на форме есть FileListBox1 и десять ListBox’ов. Мне нужно чтобы в FileListBox’е не отображались те файлы (итемы) имена которых есть в ListBox’ах (названия файлов в самих ListBox’ах не могут совпадать). Я разработал следующий алгоритм и повесил его на метод OnChange FileListBox’а:

procedure TFormMain.FileListBox1Change(Sender: TObject);
var
i1, i2, i3: integer;
begin
for i1 := 0 to FileListBox1.Items.Count - 1 do
for i2 := 1 to 10 do
if (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items.Count <> 0 then
for i3 := 0 to (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items.Count - 1 do
begin
if (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items[i3] = FileListBox1.Items[i1] then FileListBox1.Items.Delete(i1);
end;
end;

Вылетает ошибка ‘Out of bounds’. Там, где я сравниваю итемы и удаляю совпадающий из FileListBox1. Возможно, при этом уменьшается само значение итемов в нем. А у меня на это значение сылается первый цикл for.
Как мне избежать этой ошибки? Если можно напишите поправленный соурс.


 
Song ©   (2003-07-12 19:49) [1]

При удалении итемы сдвигаются. Подумай над этим.


 
Checist [root]   (2003-07-12 19:51) [2]

Хм, про это я думал, но идей нема. А у тебя как?


 
Anatoly P   (2003-07-12 20:05) [3]

Попробуй DownTo


 
Checist [root]   (2003-07-12 20:09) [4]

Я, вот только что, замутил следующее:

procedure TFormMain.FileListBox1Change(Sender: TObject);
var
i1, i2, i3: integer;
begin
i1 := 0;
repeat
for i2 := 1 to 10 do
if (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items.Count <> 0 then
for i3 := 0 to (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items.Count - 1 do
begin
if (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items[i3] = FileListBox1.Items[i1] then FileListBox1.Items.Delete(i1);
end
else i1 := i1 + 1;
until i1 = FileListBox1.Items.Count - 1
end;

Форма воообще пропала!


 
Palladin ©   (2003-07-12 20:10) [5]

Подумай еще раз над этим


 
Checist [root]   (2003-07-12 20:14) [6]

Ладно, признаюсь - туплю. Может вместо того чтобы издеваться, поможешь, а?


 
Checist [root]   (2003-07-12 20:20) [7]

for i1 := FileListBox1.Items.Count - 1 downto 0 do
for i2 := 1 to 10 do
if (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items.Count <> 0 then
for i3 := 0 to (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items.Count - 1 do
begin
if (FindComponent("ListBox" + IntToStr(i2)) as TListBox).Items[i3] = FileListBox1.Items[i1] then FileListBox1.Items.Delete(i1);
end;


 
Checist [root]   (2003-07-12 20:25) [8]

Большое спасибо тебе Checist [root] !!!
Реально помог !!!


 
Palladin ©   (2003-07-12 20:25) [9]

незачто...



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

Текущий архив: 2003.07.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-77757
Cranium
2003-06-30 18:50
2003.07.24
Как можно получить список пользователей подключенных к серверу?


14-78073
Кен
2003-07-06 02:27
2003.07.24
ОРТ представляет : Терракты и КВН - вместе веселее


3-77746
Avreliy
2003-07-01 14:38
2003.07.24
Параметр в представление.


11-77816
tamerlan311
2002-11-20 13:29
2003.07.24
обновление сайта !


14-78133
MetalFan
2003-07-09 09:56
2003.07.24
рисование блок-схем