Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.11.2012, 22:29
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
Восклицание Как открыть системный диалог "выбор папки"

Как вызвать этот диалог?
в 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  
Старый 09.11.2012, 09:31
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

IFileDialog interface
с FOS_PICKFOLDERS
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 09.11.2012, 10:42
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Спасибо, попробую разобраться =)
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #4  
Старый 09.11.2012, 10:58
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от SCrat.ORS
попробую разобраться
как найдешь Shobjidl.h скинь сюда, мне тоже интересно стало)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 09.11.2012, 12:06
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Не знаю точно то или не то... но что-то похожее - shobjidl.h
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #6  
Старый 13.11.2012, 10:27
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

у меня вот что получилось (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;
Вложения
Тип файла: rar Shobjidl.rar (2.4 Кбайт, 192 просмотров)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо NumLock за это полезное сообщение:
MrHide (27.12.2012), SCrat.ORS (16.11.2012), Shahob_Tursunov (10.01.2020), White_officer (25.09.2014)
  #7  
Старый 16.11.2012, 08:26
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

NumLock, я тебе завидую... =)
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #8  
Старый 16.11.2012, 10:20
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Ну раз создали такую тему..то вопрос: как например добавить пути файлов с выбранной директории в Listbox?
Ответить с цитированием
  #9  
Старый 16.11.2012, 10:29
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

LB_DIR message (Windows)
примеры публиковал на форуме, ищи, я в Metro 2033...)))
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 16.11.2012, 11:43
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Как то так чтоли

Код:
  SendMessage(ListBox1.Handle,LB_DIR,DDL_DIRECTORY,Integer(Directory+'\*'));
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 16.11.2012 в 11:56.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter