Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Вызов стандартных диалогов в программе

Страницы: 1
Вызов стандартных диалогов в программе
Что бы не выдумывать каждый раз велосипед заново, выписываем здесь как вызывать стандартные формы диалогов

Вызов диалога выбора директории

Код
unit UnitFolderDialog;

interface

uses SysUtils, Windows ,ShlObj;

function GetFolderDialog(Handle: Integer; Caption: string; var strFolder:
  string): Boolean;

implementation

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: PWideChar;
begin
  Result := False;
  Path := StrAlloc(MAX_PATH);
  SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, JtemIDList);
  with BrowseInfo do
  begin
    hwndOwner := GetActiveWindow;
    pidlRoot := nil; //JtemIDList;
    SHGetSpecialFolderLocation(hwndOwner, CSIDL_DRIVES, 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 := 0;//ulFlags or BIF_NEWDIALOGSTYLE or BIF_RETURNONLYFSDIRS;
    ulFlags := ulFlags or BIF_NEWDIALOGSTYLE 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;


end.


вызов в программе

Код
  
if GetFolderDialog(handle,'Выберите директрию для сохранения',SavePath) = false
  then exit;
Изменено: max katonin - 06.06.2010 11:56:57
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)