С++ Вывести дерево каталогов с компьютера в TreeView

295
26 ноября 2016, 18:56

Добрый вечер, помогите найти ошибку. Разобранный на Delphi пример http://decoding.dax.ru/practic/treeview/treeview.html кое-как переведен в код с++, но не работает, как следует. Либо удаляет всех детей из-за node->DeleteChildren(); , либо выводит одни и те же каталоги корневого диска при нажатии на раскрытие других папок.

AnsiString Dir = "D:";
TTreeNode *node;
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    node = TreeView1 -> Items -> AddChild(NULL,Dir);
    node -> HasChildren = true;
}
void __fastcall TForm1::NextLevel(TTreeNode *ParentNode)
{
    TSearchRec sr;
    TSearchRec srChild;
    TTreeNode *node;
    AnsiString path;
    node = ParentNode;
    path = "";
    do
    {
        path = node -> Text + "\\" + path;
        node = node -> Parent;
    }
    while (node != NULL);
    // Находим первую директорию
    if (FindFirst(path + "*.*", faAnyFile, sr) == 0  )
    {
        do{
            if ((sr.Name != "." ) && (sr.Name != ".." ))
                if (( sr.Attr && faAnyFile ) != 0)
                {
                    // Добавляем найденную папку в TreeView
                    node = TreeView1 -> Items -> AddChild(ParentNode, sr.Name);
                    node -> SelectedIndex = 1;
                    // Утверждаем, что нет подкаталогов
                    node -> HasChildren = false;
                    // Проверяем, так ли это
                    if (FindFirst(path + sr.Name + "\*.*", faDirectory, srChild) == 0)
                    {
                        do
                        {
                            if ((srChild.Name != "." ) && ( srChild.Name != ".." ))
                                if (( srChild.Attr && faAnyFile ) != 0)
                                    node -> HasChildren = true;
                        }
                        while ((FindNext(srChild) == 0 ) || (node -> HasChildren == false));
                    }
                    FindClose(srChild);
                }
        }
        while (FindNext(sr) == 0);
    }
    else
        ParentNode -> HasChildren = false;
    FindClose(sr);
}
void __fastcall TForm1::TreeView1Expanding(TObject *Sender, TTreeNode *Node,      bool &AllowExpansion)
{
    TreeView1 ->Items->BeginUpdate();
    node->DeleteChildren();
    NextLevel(node);
    TreeView1 ->Items->EndUpdate();
}
READ ALSO
QImage конвертация картинки

QImage конвертация картинки

Есть картинка в bmp формате открываю её с помощью диалога выбора файла, нужно её конвертировать в jpg формат средствами qt, как это сделать? далее...

389
Ошибка в деструкторе сокета boost

Ошибка в деструкторе сокета boost

Используется следующая модель абстракции:

305
Перегрузка оператор С++

Перегрузка оператор С++

Такой вопросЯ перегружаю операторы для работы с вектором, который состоит из трек точек

247