C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Отображение содержимого...
Crash-512
Отправлено: 15.12.2006, 11:32


Ученик-кочегар

Группа: Участник
Сообщений: 7



Не подскажите, как сделать, чтобы в окошке отображалось содержимое папки?.. В папке должны быть только ярлыки. Не нужны ни опции переименования, ни опции сортировки/вида... Просто отображение ярлыков, которые находятся в папки на диске...

Предполагаю, что это должно делаться при помощи ListView... Но не представляю, как...

Заранее всем спасибо=)
olegenty
Отправлено: 15.12.2006, 12:49


Ветеран

Группа: Модератор
Сообщений: 2412



нарой на форуме пример Doga для VirtualTreeView, там всё приподробно продемонстрировано
Crash-512
Отправлено: 15.12.2006, 15:17


Ученик-кочегар

Группа: Участник
Сообщений: 7



Я тут написал... В примере не отображаются значки, хотя писал по книжке.

З.Ы. Папки и расширения файлов не отображаются преднамеренно=)

Прикрепил исходник...

Вот код:

CODE

//---------------------------------------------------------------------------
#include <vcl.h>
#include "FileCtrl.hpp"
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString Dir;         // Отображаемая папка
TListItem *Selected;    // Выделенный элемент
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
// Начальное значение отображаемой папки
Dir = "E:\\Games";
if (Dir[Dir.Length()] != '\\')
  Dir = Dir + "\\";
Find();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Открытие папки
SelectDirectory("Выберите папку", "", Dir);
if (Dir[Dir.Length()] != '\\')
  Dir = Dir + "\\";
Find();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ListView1->ViewStyle = vsIcon;  // крупные значки
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1MouseDown(TObject *Sender,
     TMouseButton Button, TShiftState Shift, int X, int Y)
{
// запоминание выделенного элемента
Selected = ListView1->GetItemAt(X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1DblClick(TObject *Sender)
{
// двойной щелчок на элементе
 if (Selected)
 {
   ShellExecute(Handle, "open", Selected->Caption.c_str(), NULL, NULL, SW_SHOW);
 }
}
//===========================================================================
//=====FIND==================================================================
//===========================================================================
void __fastcall TForm1::Find(void)
{
ListView1->Items->BeginUpdate();        //начало блокировки списка
ListView1->Items->Clear();              //очистка списка
StaticText1->Caption = Dir;
ViewDir();                              // уход на поиск
ListView1->Items->EndUpdate();
}
//===========================================================================
//====VIEW DIR===============================================================
//===========================================================================
void __fastcall TForm1::ViewDir(void)
{
// основная процедура поиска
TSearchRec SR;
int ires, TBegin;
TListItem *NewItem;
TSHFileInfo FileInfo;

TIcon *Icon = new TIcon;

Form1->ImageListIcon->Clear();
Form1->ImageListIcon->AddIcon(Icon);

ChDir(Dir);  // смена каталога

// начало поиска
ires = FindFirst("*.*", faHidden+faSysFile, SR);
while (ires == 0)
{
 if ((SR.Name != ".") && (SR.Name != ".."))
 {
   AnsiString FName;
   // занесение элемента в список
   NewItem = Form1->ListView1->Items->Add();
   FName = SR.Name;
   NewItem->Caption = FName.SubString(0,FName.Length()-4);
   // задание пиктограмм
   SHGetFileInfo((Dir + SR.Name).c_str(), 0, &FileInfo, sizeof(FileInfo), SHGFI_ICON | SHGFI_LARGEICON);
   Icon->Handle = FileInfo.hIcon;
   Form1->ImageListIcon->AddIcon(Icon);
   NewItem->ImageIndex = Form1->ImageListIcon->Count-1;
   // отметка элемента как файла
   NewItem->OverlayIndex = 1;
 }
 // продолжение поиска
 ires = FindNext(SR);
}
// завершение поиска файлов
FindClose(SR);
}
//---------------------------------------------------------------------------


Не скажите, где ошибся?..

User Attached Image Скачать файл
FolderView.zip



Вернуться в Вопросы программирования в C++Builder