OpenDialog для каталогов, Delphi (7)

Форум для программистов

Сообщение Strateg » Ср июн 08, 2005 11:19 am

В дельфях есть компонент OpenDialog. Но он позволяет выбирать лишь файлы. Нельзя ли его переучить, чтобы выбирал каталоги? Я мучился, искал, но толком не нашел ничего. Может я проглядел какой-то компанент? Есть что-то наподобие в вин 3.1, но вид у него чудовищный.
Заранее спасибо.
хм...!
Strateg
Полковник
 
Сообщений: 1016
Зарегистрирован: Пт май 24, 2002 7:26 am
Откуда: Краснодар
Пункты репутации: 0

Сообщение Night Angel » Ср июн 08, 2005 12:30 pm

Нельзя. Надо вызывать API-функцию BrowseForFolder из shell32.dll
Auscultura et perpende - Выслушай и взвесь
Теперь я есть в <a href='http://www.livejournal.com/users/mrnight/' target='_blank'>LJ</a>
Night Angel
Полковник
 
Сообщений: 1160
Зарегистрирован: Ср сен 25, 2002 7:20 pm
Откуда: Belarus
Пункты репутации: 0

Сообщение Strateg » Чт июн 09, 2005 2:06 pm

2Night Angel
Спасибо, благодаря тебе я нашел то, что нужно.
Может кому понадобится пример:

uses ShellAPI, ShlObj;




procedure TForm1.Button1Click(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 := 'Please specify a directory';
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
ShowMessage(TempPath);
GlobalFreePtr(lpItemID);
end;
end;
Последний раз редактировалось Strateg Чт июн 09, 2005 2:08 pm, всего редактировалось 1 раз.
хм...!
Strateg
Полковник
 
Сообщений: 1016
Зарегистрирован: Пт май 24, 2002 7:26 am
Откуда: Краснодар
Пункты репутации: 0

Сообщение Arvur » Вс июн 26, 2005 9:55 pm

2Strateg
аккуратнее. я тут недавно нарвался как раз с подобным вызовом <!--emo&B)-->[img]style_emoticons/<#EMO_DIR#>/cool.gif[/img]<!--endemo-->
такая процедурка не держит unicode - соответственно может глюкать
там же есть функция SHBrowseForFolderW - она куда корректнее
Dixi [C_U_L8r! иЗвиНиТЕ зА НеРоВНый ПочЕРк!]
Arvur
Капитан
 
Сообщений: 267
Зарегистрирован: Сб мар 30, 2002 5:39 pm
Откуда: Москва
Пункты репутации: 0

Сообщение Elzor » Пн июн 27, 2005 4:41 am

К чему такие сложности. Вот дельфевая функция SelectDirectory самый простой способ.
<span style='color:purple'>Люди не знают, что лисы умеют лазить по деревьям, если очень сильно захотят. Вот белки - те знают.</span><span style='color:gray'> (с) П.Бигл</span>
--------------------
<a href='http://foobar2000.ru/forum/' target='_blank'>Новый Оффорум Foobar2000</a>
--------------------
<a href='http://wincmd.ru/download.php?id=neropanel' target='_blank'>Neropanel</a> - плагин для записи CD из TC, используя NeroAPI <a href='http://www.fforum.ru/index.php?showtopic=19193&hl=' target='_blank'>обсуждение плагина</a>
--------------------
<a href='http://www.spikelee.fatal.ru' target='_blank'>Изображение</a>
Elzor
Полковник
 
Сообщений: 1157
Зарегистрирован: Пт дек 24, 2004 2:59 pm
Откуда: Орск
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

cron