![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про выбор папки
Acronis © (2008-07-06 23:27:00)Привет!
Возможно вопрос вам покажется глупым:)
Мне перед запуском моего приложения нужно выбрать директорию, для ее выбора я использую следующий код:
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);
GlobalFreePtr(lpItemID);
end;
end;
Рядом с кнопкой вызова этого диалога стоит TEdit, как сделать чтобы после выбора папки в элите отовражался путь к папке которую я выбрал?
Тын-Дын (2008-07-07 01:45:00) [21]
> Уж сколько я тут на форуме советовал эту функцию
Сколько?
Тын-Дын (2008-07-07 01:44:00) [22]
> А теперь ты мне и ЮЗ пытаешься объяснить прописные истины.
> Которые известны нам уже очень давно.
Да неужели? -)))
PS.
В качестве упражнения скомпилируй код из [3]...
Германн (2008-07-07 01:42:00) [23]
> Тын-Дын © (07.07.08 01:29) [6]
>
>
Угу. Ты хоть и тындын, но в справку залезть не ленишься. Но вот многие прочие лезть в справку, тем более читать её, не хотят ни за что.
Уж сколько я тут на форуме советовал эту функцию тем, кто спрашивал про диалог выбора папки/каталога/директории! И сразу получал упрёки в некрасивости и устарелости. Делал намёки про то, что функций две - ноль внимания.
А теперь ты мне и ЮЗ пытаешься объяснить прописные истины. Которые известны нам уже очень давно.
Тын-Дын (2008-07-07 01:29:00) [24]
> Германн © (07.07.08 01:03) [4]
>
>
> > И все. Одна простейшая строчка вместо всего этого страшного
> > монстра.
> >
>
> В коде действительно одна. А на форуме сотни строк про "некрасивость"
> и "устаревший вид" окошка выданного этой функцией.
> :)
Смотря какую функцию вызывать.
Второй вид - устаревший немного, первый ничем не отличается по внешнему виду от того, который выдаётся в топике, так как использует тот жеSHBrowseForFolder.
Тын-Дын (2008-07-07 01:14:00) [25]
> Юрий Зотов © (07.07.08 00:09) [3]
>
> Edit1.Text := SelectDirectory(...);
>
> И все. Одна простейшая строчка вместо всего этого страшного
> монстра.
Неужели?
function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean; overload;
function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload;
Германн (2008-07-07 01:03:00) [26]
> И все. Одна простейшая строчка вместо всего этого страшного
> монстра.
>
В коде действительно одна. А на форуме сотни строк про "некрасивость" и "устаревший вид" окошка выданного этой функцией.
:)
Юрий Зотов (2008-07-07 00:09:00) [27]Edit1.Text := SelectDirectory(...);
И все. Одна простейшая строчка вместо всего этого страшного монстра.
Acronis (2008-07-06 23:44:00) [28]Действительно, все так просто было, спасибо за помощь
Тын-Дын (2008-07-06 23:34:00) [29]Вах... А что, попробовать нельзя было?
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);
Edit1.Text := TempPath;
GlobalFreePtr(lpItemID);
end;
end;