Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Как вывести диалог "Обзор папок"

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Как вывести диалог "Обзор папок"

Для вывода диалога "Обзор папок" существует функция SHBrowseForFolder. Для выбора того, какие папки будут выведены в диалоге, используется функция SHGetSpecialFolderLocation. В этой программе выводится рабочий стол со всеми подпапками (папки рабочего стола, Мой компьютер, Корзина). Для выбора папки в меню пуск используется CSIDL_STARTMENU вместо CSIDL_DESKTOP.

Code:

uses ShlObj;
 
procedure CallBack(wnd: hWnd; uMsg: UINT; lParam, lpData: LParam) stdcall;
begin
SendMessage(wnd, BFFM_ENABLEOK, 0, 1);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
bi: TBrowseInfo;
s: PChar;
PIDL, ResPIDL: PItemIDList;
begin
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, PIDL);
s := StrAlloc(128);
bi.hwndOwner := Form1.Handle;
bi.pszDisplayName := s;
 
bi.lpszTitle := 'Выбор прапки';
bi.pidlRoot := PIDL;
bi.lpfn := addr(CallBack);
ResPidl := SHBrowseForFolder(BI);
SHGetPathFromIDList(ResPidl, s);
Form1.Caption := s;
end;

Автор советов: Даниил Карапетян

e-mail: delphi4all@narod.ru

Автор справки: Алексей Денисов

e-mail: aleksey@sch103.krasnoyarsk.su


Code:

Uses ... ShlObj, ...

 
private

   sx:String;
...
 
function TfmOptions.Selectdir(const str: string): string;
 
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData:LPARAM): integer; stdcall;
begin
Result := 0;
if uMsg = BFFM_INITIALIZED then begin
SendMessage(hwnd, BFFM_SETSELECTION, 1, LongInt(PChar(fmOptions.sx)))
end;
end;
 
var
TitleName : string;
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
  Result:='';
  sx:=str;
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  BrowseInfo.hwndOwner := Application.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  TitleName := 'Выберите папку...';
  BrowseInfo.lpszTitle := PChar(TitleName);
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS or $0040 or BIF_EDITBOX or BIF_STATUSTEXT;
  BrowseInfo.lpfn := @BrowseCallbackProc;
  lpItemID := SHBrowseForFolder(BrowseInfo);
 
 if lpItemId <> nil then begin
    SHGetPathFromIDList(lpItemID, TempPath);
    Result:=StrPas(TempPath);
    GlobalFreePtr(lpItemID);
 end;
{
//////////////////////////////////////////////////////////////////////
---  bi.ulFlags флаги, которые задают режим отображения диалога:-----
/////////////////////////////////////////////////////////////////////
 
BIF_BROWSEFORCOMPUTER - Возвратить только компьютеры.
   Если пользователь выбрал что-то отличное от компьютеров, то кнопка OK останется серой.
 
BIF_BROWSEFORPRINTER - Возвратить только принтеры. Если пользователь выбрал что-
    то отличное от принтеров, то кнопка OK останется серой.
 
BIF_RETURNONLYFSDIRS - Возвратить только папки файловой системы.
    Если пользователь выберет папки, которые не являются частью файловой системы,
    то кнопка OK останется серой. Это необходимо для того если ваша программа не
    работает с виртуальными папками вроде "Панель управления".
 
BIF_BROWSEINCLUDEFILES - Диалог просмотра будет отображать файлы вместе с директориями.
 
BIF_DONTGOBELOWDOMAIN - Не включать сетевые папки Доменного уровня ниже,
    чем в TreeView контроле.
BIF_RETURNFSANCESTORS - В качестве выбора допустимы только объекты,
    представленные в файловой системе.
BIF_STATUSTEXT - Включает область статуса в блок диалога. Функция может
    установить текст посылая сообщения блоку диалога.
BIF_EDITBOX - В диалоговом окне будет присутствовать строка редактирования,
   таким образом пользователь может набрать имя элемента.
BIF_VALIDATE - Если пользователь введёт неверное имя в строке редактирования,
   то диалоговое окно вызовет функцию обратного вызова приложения по сообщению BFFM_VALIDATEFAILED.
 
ResPidl := SHBrowseForFolder(BI);
}
end;
 
 
//использование
dbeArcSended.Text := IncludeTrailingPathDelimiter(Selectdir(ParamStr(0)));

Автор: Akella

Взято с Vingrad.ru http://forum.vingrad.ru

Статья Как вывести диалог "Обзор папок" раздела Программа и Интерфейс Диалоги и Фреймы может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Диалоги и Фреймы ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
28.03.2024 22:16:47/0.004443883895874/2