aTeos Posted February 13, 2005 Report Share Posted February 13, 2005 В общем, мне нужен компонент для Borland C++ Builder, который сделал бы мне список директорий (как в Проводнике слева), очень желательно бесплатный или такой, который можно сделать бесплатным Очень нужно. Заранее благодарю Quote Link to comment Share on other sites More sharing options...
Andrew.Egorovsky Posted February 14, 2005 Report Share Posted February 14, 2005 aTeos Вообще-то, это стандартеный TreeView. Он точно есть в MFC, а сам контрол - ищи в ComCtl32.ocx/dll... Но программировать его - сущий ад, имхо. Вот есть еще некий контрол для выбора именно каталога (такой как в регете при выьборе каталогов. Говорят, что он стандартный, но я так и не нашел его... Quote Link to comment Share on other sites More sharing options...
aTeos Posted February 15, 2005 Author Report Share Posted February 15, 2005 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; Quote Link to comment Share on other sites More sharing options...
freeloader Posted April 17, 2005 Report Share Posted April 17, 2005 Народ, это же достаточно не сложно пишется, покрайней мере на .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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.