Jump to content
СофтФорум - всё о компьютерах и не только

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


aTeos
 Share

Recommended Posts

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

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

Link to comment
Share on other sites

aTeos

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

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

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

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

Link to comment
Share on other sites

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;
Link to comment
Share on other sites

  • 2 months later...

Народ, это же достаточно не сложно пишется, покрайней мере на .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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...