Показать сообщение отдельно
Старый 20.02.2010, 21:48   #1
Tronix
Знающий
 
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений
(для 331 пользователей)
Прошу помощи

Привет, ситуация: есть CheckListBox. Изначально пустой, по ходу работы программы туда добавляются имена файлов. Программа производит сканирование всех *.exe и *.dll, ищет в них некоторую сигнатуру. Если находит - добавляет имя файла в CheckListBox.
Хочется сделать чтоб если юзер нажал на имени файла в CheckListBox - показалось информация - размер файла, и некоторая другая информация об этом файле (см скриншот внизу). Очень не хотелось заморачиваться с динамическим списком, поэтому делаю через костыль примерно так: Есть тип:
Type
  FInfo 
record
    Id   
Integer//сюда будем заносить itemindex из checklistbox'а
    
Size Cardinal// размер файла
    
Info String// дополнительная информация о файле.
  
end
Потом есть такой массив и его индекс:
Var
  
FI : Array [1..1000of 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(SenderTObject);
Var 
Word;
begin
      
For := 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. На всех остальных - показывает. Ничего не понимаю, весь моск сломал. Что не так? Скриншоты ниже:
Миниатюры
Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 1093
Размер:	19.3 Кб
ID:	9152  Нажмите на изображение для увеличения
Название: 3.PNG
Просмотров: 1111
Размер:	21.8 Кб
ID:	9153  
(Offline)
 
Ответить с цитированием