Привет, ситуация: есть CheckListBox. Изначально пустой, по ходу работы программы туда добавляются имена файлов. Программа производит сканирование всех *.exe и *.dll, ищет в них некоторую сигнатуру. Если находит - добавляет имя файла в CheckListBox.
Хочется сделать чтоб если юзер нажал на имени файла в CheckListBox - показалось информация - размер файла, и некоторая другая информация об этом файле (см скриншот внизу). Очень не хотелось заморачиваться с динамическим списком, поэтому делаю через костыль примерно так: Есть тип:
Type
FInfo = record
Id : Integer; //сюда будем заносить itemindex из checklistbox'а
Size : Cardinal; // размер файла
Info : String; // дополнительная информация о файле.
end;
Потом есть такой массив и его индекс:
Var
FI : Array [1..1000] of FInfo; // предположим, что файлов будет не больше 1k
Index : Word = 1; // индекс этого массива
Естественно Index сначала равен 1. Далее рекурсивно сканируем файлы.
Это уже если нашли DLL или EXE:
res := SearchSign(path+'\'+sr.name,False,S,SZ); // ищет в файле сигнатуру
// возвращает 255, если находит, а также возвращает в S - строку информацию
// а в SZ - размер файла
if res = 255 then //если нашли сигнатуру, добавляем имя файла в CheckListBox.
begin
form1.checklistbox1.Items.Append(path+'\'+sr.name); //добавляем
// а вот здесь заносим в массив информацию о файле
FI[Index].Id := form1.CheckListBox1.Items.IndexOf(path+'\'+sr.name);
FI[Index].Size := SZ; //размер
FI[Index].Info := S; //некая строка
Inc(Index); // и увеличиваем индекс массива
end;
Ну и обработчик, если юзер нажал в CheckListBox'е на имени файла, выводим инфу о файле из нашего массива:
procedure TForm1.CheckListBox1Click(Sender: TObject);
Var i : Word;
begin
For i := 1 to Index do
if FI[i].Id = checklistbox1.itemindex then // если ид совпадают
Begin
label4.Caption := CheckListBox1.Items[checklistbox1.itemindex]; //вывели имя файла
label5.Caption := IntToStr(FI[i].Size); //вывели размер
label3.Caption := FI[i].Info; // и дополнительную инфу
End;
end;
Косяк в том, что на первом файле не показывает информацию. На первом файле - имею ввиду Id = 0. На всех остальных - показывает. Ничего не понимаю, весь моск сломал. Что не так? Скриншоты ниже: