Вопрос

Я создаю программу, которая должна на Form_Create, заполнить TListView вызванный FileList, каталог , который я хочу заполнить , находится там , где находится скомпилированная программа + \Files, поскольку я никогда не использовал TListView Я хочу знать, как это сделать?

Это было полезно?

Решение

Ваш вопрос состоит из нескольких частей.Я предоставлю Обзор вот.Если вам нужна помощь по какому-либо конкретному шагу, пожалуйста, отправьте более конкретный последующий вопрос.

  1. Определите, к чему относится фраза "где находится скомпилированная программа".

    Чтобы получить полный путь к исполняемому файлу, вызовите ParamStr(0).Чтобы удалить имя EXE-файла из этой строки, чтобы у вас была только часть каталога, вызовите ExtractFilePath.Убедитесь , что оно заканчивается обратной косой чертой (IncludeTrailingPathDelimiter) а затем добавьте свой каталог "Files".

  2. Получите список файлов.

    Использование FindFirst и FindNext чтобы создать цикл, который просматривает все файлы.Имена будут включать "." и ".." относительные имена каталогов, поэтому вы можете исключить их.Обратите внимание, что файлы не перечислены в каком-либо определенном порядке.Например, если вам нужно, чтобы они были отсортированы в алфавитном порядке, вам нужно будет сделать это самостоятельно.(Они могут появиться чтобы в ваших тестах все было в алфавитном порядке, но это не всегда будет правдой.)

    var
      Rec: TSearchRec;
    begin
      if FindFirst(path + '\*', faAnyFile, Rec) = 0 then try
        repeat
          if (Rec.Name = '.') or (Rec.Name = '..') then
            continue;
          if (Rec.Attr and faVolumeID) = faVolumeID then
            continue; // nothing useful to do with volume IDs
          if (Rec.Attr and faHidden) = faHidden then
            continue; // honor the OS "hidden" setting
          if (Rec.Attr and faDirectory) = faDirectory then
            ; // This is a directory. Might want to do something special.
          DoSomethingWithFile(Rec.Name);
        until FindNext(Rec) <> 0;
      finally
        SysUtils.FindClose(Rec);
      end;
    end;
    
  3. Добавьте узлы к элементу управления для представления файлов.

    Возможно, вы захотите сделать это в гипотетическом DoSomethingWithFile функция, о которой я упоминал выше.Используйте представление списка в Items свойство выполнять какие-либо действия с элементами, например добавлять новые.

    var
      Item: TListItem;
    begin
      Item := ListView.Items.Add;
      Item.Caption := FileName;
    end;
    

    TListItem обладает дополнительными свойствами;подробности см. в документации.В SubItems свойство полезно, если вы показываете представление списка в режиме "отчет", где для одного узла может быть несколько столбцов.

  4. Свяжите изображения с элементами.

    Изображения узлов в виде списка берутся из связанных списков изображений, LargeImages и SmallImages.Они относятся к одному или нескольким TImageList компоненты в вашей форме.Поместите туда свои изображения значков, а затем назначьте элементы ' ImageIndex свойства к соответствующим номерам.

В зависимости от того, насколько сложной вы хотите сделать свою программу, вы можете захотеть использовать Delphi TShellListView контролируйте, вместо того чтобы выполнять всю вышеперечисленную работу самостоятельно.

Другие советы

Если вы добавляете TImageList в форму с двумя изображениями (одно для файлов и одно для каталогов), а затем присваиваете TImageList свойству TListviews LargeImages, вы можете использовать приведенный ниже код.

procedure TForm2.Button1Click(Sender: TObject);
    var li:TListItem;
    SR: TSearchRec;
begin
    FileList.Items.BeginUpdate;
    try
        FileList.Items.Clear;

        FindFirst(ExtractFilePath(Application.ExeName) +'*.*', faAnyFile, SR);
        try
            repeat
                li :=  FileList.Items.Add;
                li.Caption := SR.Name;

                if ((SR.Attr and faDirectory) <> 0)  then li.ImageIndex := 1
                else li.ImageIndex := 0;

            until (FindNext(SR) <> 0);
        finally
            FindClose(SR);
        end;
    finally
        FileList.Items.EndUpdate;
    end;
end;

Затем вы можете использовать это, добавив разные изображения в TImageList для разных типов файлов и используя ExtractFileExt(SR.Name), чтобы получить расширение файлов

if ((SR.Attr and faDirectory) <> 0)  then li.ImageIndex := 1
else if lowercase(ExtractFileExt(SR.Name)) = '.png' then li.ImageIndex := 2
else if lowercase(ExtractFileExt(SR.Name)) = '.pdf' then li.ImageIndex := 3
else li.ImageIndex := 0;

Вам нужно будет показывать изображения при рисовании строк.

Это должно навести вас на мысль:http://www.delphidabbler.com/articles?article=16 http://delphi.about.com/od/delphitips2008/qt/lv_checkbox_bmp.htm

Единственное отличие заключается в том, что вы будете рисовать иконку / изображение.Здесь вы узнаете, как это сделать в сетке: http://delphi.about.com/library/weekly/aa032205a.htm Таким образом, из обоих вы можете почерпнуть идею.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top