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

Ищу компонент - дерево каталогов (для 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

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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