Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Ищу компонент - дерево каталогов (для C++ Builder)


Рекомендуемые сообщения

В общем, мне нужен компонент для Borland C++ Builder, который сделал бы мне список директорий (как в Проводнике слева), очень желательно бесплатный или такой, который можно сделать бесплатным :bye1:

Очень нужно. Заранее благодарю :bye1:

Ссылка на комментарий
Поделиться на другие сайты

aTeos

Вообще-то, это стандартеный TreeView.

Он точно есть в MFC, а сам контрол - ищи в ComCtl32.ocx/dll...

Но программировать его - сущий ад, имхо.

Вот есть еще некий контрол для выбора именно каталога (такой как в регете при выьборе каталогов. Говорят, что он стандартный, но я так и не нашел его...

Ссылка на комментарий
Поделиться на другие сайты

Andrew.Egorovsky

Вот есть еще некий контрол для выбора именно каталога (такой как в регете при выьборе каталогов. Говорят, что он стандартный, но я так и не нашел его...

Если мы об одном и том же, то это не стандартный контрол. В WinAPI Help по этому поводу есть примерчик:

function PfBrowseDialog (const Title: string; const Flag,csidl: integer): string;var lpItemID : PItemIDList; BrowseInfo : TBrowseInfo; DisplayName : array[0..MAX_PATH] of char; TempPath : array[0..MAX_PATH] of char;begin Result:=''; FillChar(BrowseInfo, sizeof(TBrowseInfo), #0); SHGetSpecialFolderLocation(Application.Handle,csidl,BrowseInfo.pidlRoot); with BrowseInfo do begin   hwndOwner := Application.Handle;   pszDisplayName := @DisplayName;   lpszTitle := PChar(Title);   ulFlags := Flag; end; lpItemID := SHBrowseForFolder(BrowseInfo); if lpItemId <> nil then begin   SHGetPathFromIDList(lpItemID, TempPath);   Result := TempPath;   GlobalFreePtr(lpItemID); end;end;// ********* Пример использования: ********** //procedure TForm1.Button1Click(Sender: TObject);begin PfBrowseDialog('Выберите каталог',            BIF_RETURNONLYFSDIRS+BIF_EDITBOX+BIF_STATUSTEXT,CSIDL_DESKTOP);end;
Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

Народ, это же достаточно не сложно пишется, покрайней мере на .NET это у меня выглядит вот так:

#Region " Functions"

'''-----------------------------------------------------------------------------

''' <summary>

''' Функция заполнения нода папками

''' </summary>

''' <param name="drivePath">Имя диска или полный путь к каталогу</param>

''' <param name="pNode">Номер нода</param>

''' <remarks></remarks>

''' <history>

''' [freeloader] 09.03.2005 Created

''' </history>

'''-----------------------------------------------------------------------------

Private Sub InitFolders(ByVal drivePath As String, ByVal pNode As DevExpress.XtraTreeList.Nodes.TreeListNode)

TLDir.BeginUnboundLoad()

Try

Dim arrDirs() As String = System.IO.Directory.GetDirectories(drivePath)

Dim node As DevExpress.XtraTreeList.Nodes.TreeListNode

Dim di As System.IO.DirectoryInfo

'Dim x As Integer = 0

If arrDirs.Length <> 0 Then

For Each strDir As String In arrDirs

Try

di = New System.IO.DirectoryInfo(strDir)

node = TLDir.AppendNode(New Object() {di.Name, "Папка", strDir}, pNode)

'x += 1

node.HasChildren = HasDir(strDir)

If node.HasChildren Then

node.Tag = True

End If

sbpStatus.Text = strDir

Catch ex As Exception

End Try

Next

End If

Catch ex As Exception

End Try

sbpStatus.Text = ""

TLDir.EndUnboundLoad()

End Sub

'''-----------------------------------------------------------------------------

''' <summary>

''' Получение размера директории

''' </summary>

''' <param name="ResearchDir">Исследуемая директория</param>

''' <returns>Размер директории в байтах</returns>

''' <remarks></remarks>

''' <history>

''' [freeloader] 11.03.2005 Created

''' </history>

'''-----------------------------------------------------------------------------

Private Function szDir(ByVal ResearchDir As String) As Long

Try

Dim arrFiles() As String = System.IO.Directory.GetFiles(ResearchDir)

Dim xSumm As Long

If Not arrFiles.Length = 0 Then

For Each strFile As String In arrFiles

Dim fInfo As New System.IO.FileInfo(strFile)

xSumm += fInfo.Length()

Next

End If

Dim arrDirs() As String = System.IO.Directory.GetDirectories(ResearchDir)

If Not arrDirs.Length = 0 Then

For Each strDir As String In arrDirs

xSumm += szDir(strDir)

sbpStatus.Text = strDir

Next

End If

Return xSumm

Catch ex As Exception

End Try

sbpStatus.Text = ""

End Function

'''-----------------------------------------------------------------------------

''' <summary>

''' Проверка на наличие директорий внутри директории

''' </summary>

''' <param name="path"Исследуемая директория></param>

''' <returns>Истина: папки есть; Ложь: папок нету</returns>

''' <remarks></remarks>

''' <history>

''' [freeloader] 12.03.2005 Created

''' </history>

'''-----------------------------------------------------------------------------

Private Function HasDir(ByVal path As String) As Boolean

Dim root() As String = System.IO.Directory.GetDirectories(path)

If root.Length > 0 Then Return True

Return False

End Function

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...