|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как открыть системный диалог "выбор папки"
Как вызвать этот диалог?
в Win7 он выглядит так: Функции типа: Код:
procedure TForm1.Button4Click(Sender: TObject); var TitleName : string; lpItemID : PItemIDList; BrowseInfo : TBrowseInfo; DisplayName : array[0..MAX_PATH] of char; TempPath : array[0..MAX_PATH] of char; begin FillChar(BrowseInfo, sizeof(TBrowseInfo), #0); BrowseInfo.hwndOwner := Form1.Handle; BrowseInfo.pszDisplayName := @DisplayName; TitleName := 'Выбор директории...'; BrowseInfo.lpszTitle := PChar(TitleName); BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS; lpItemID := SHBrowseForFolder(BrowseInfo); if lpItemId <> nil then begin SHGetPathFromIDList(lpItemID, TempPath); showmessage(String(TempPath)); GlobalFreePtr(lpItemID); end; end; Код:
procedure TForm1.Button5Click(Sender: TObject); var chosenDirectory : string; begin if SelectDirectory('Выберите каталог', 'C:\', chosenDirectory) then ShowMessage('Выбранный каталог = '+chosenDirectory); end; Код:
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): Integer; stdcall; begin if (uMsg = BFFM_INITIALIZED) then SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData); BrowseCallbackProc := 0; end; function GetFolderDialog(Handle: Integer; Caption: string; var strFolder: string): Boolean; const BIF_STATUSTEXT = $0004; BIF_NEWDIALOGSTYLE = $0040; BIF_RETURNONLYFSDIRS = $0080; BIF_SHAREABLE = $0100; BIF_USENEWUI = BIF_EDITBOX or BIF_NEWDIALOGSTYLE; var BrowseInfo: TBrowseInfo; ItemIDList: PItemIDList; JtemIDList: PItemIDList; Path: PAnsiChar; begin Result := False; Path := StrAlloc(MAX_PATH); SHGetSpecialFolderLocation(Handle, CSIDL_DESKTOP, JtemIDList); with BrowseInfo do begin hwndOwner := GetActiveWindow; pidlRoot := JtemIDList; SHGetSpecialFolderLocation(hwndOwner, CSIDL_DESKTOP, JtemIDList); { return display name of item selected } pszDisplayName := StrAlloc(MAX_PATH); { set the title of dialog } lpszTitle := PChar(Caption); //'Select the folder'; { flags that control the return stuff } ulFlags := ulFlags or BIF_NEWDIALOGSTYLE or BIF_RETURNONLYFSDIRS; //ulFlags := ulFlags or BIF_RETURNONLYFSDIRS; lpfn := @BrowseCallbackProc; { extra info that's passed back in callbacks } lParam := LongInt(PChar(strFolder)); end; ItemIDList := SHBrowseForFolder(BrowseInfo); if (ItemIDList <> nil) then if SHGetPathFromIDList(ItemIDList, Path) then begin strFolder := Path; Result := True end; end; procedure TForm1.Button3Click(Sender: TObject); var s: string; begin if GetFolderDialog(handle, 'Select folder', s) then showmessage(s); end; Вызывают диалог типа: Как вызвать системный диалог сохранения и открытия файлов - понятно... а вот выбор папки - ну никак не соображу как. Кто знает, поделитесь. Мне просто интересно каким образом это делается. Програмистами не рождаются, ими становятся! |
#2
|
||||
|
||||
IFileDialog interface
с FOS_PICKFOLDERS Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Спасибо, попробую разобраться =)
Програмистами не рождаются, ими становятся! |
#4
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#5
|
||||
|
||||
Не знаю точно то или не то... но что-то похожее - shobjidl.h
Програмистами не рождаются, ими становятся! |
#6
|
||||
|
||||
у меня вот что получилось (Delphi 7):
Код:
uses Shobjidl, ... type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); ... procedure TForm1.Button1Click(Sender: TObject); var Directory: String; begin if SelectDirectory(Handle, 'MyCaption', 'C:\Program Files', Directory) then Edit1.Text:=Directory; end; Пишу программы за еду. __________________ |
Эти 4 пользователя(ей) сказали Спасибо NumLock за это полезное сообщение: | ||
MrHide (27.12.2012),
SCrat.ORS (16.11.2012),
Shahob_Tursunov (10.01.2020),
White_officer (25.09.2014)
|
#7
|
||||
|
||||
NumLock, я тебе завидую... =)
Програмистами не рождаются, ими становятся! |
#8
|
||||
|
||||
Ну раз создали такую тему..то вопрос: как например добавить пути файлов с выбранной директории в Listbox?
|
#9
|
||||
|
||||
LB_DIR message (Windows)
примеры публиковал на форуме, ищи, я в Metro 2033...))) Пишу программы за еду. __________________ |
#10
|
||||
|
||||
Как то так чтоли
Код:
SendMessage(ListBox1.Handle,LB_DIR,DDL_DIRECTORY,Integer(Directory+'\*')); Програмистами не рождаются, ими становятся! Последний раз редактировалось SCrat.ORS, 16.11.2012 в 11:56. |