Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизВыбрать папку. Нормально. Найти похожие ветки
← →
Vovan#1 (2006-10-25 17:39) [0]Уже спрашивал на форуме - дали код:
unit unitChooseFolder;
interface
uses Windows, Classes, SysUtils, 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: PAnsiChar;
begin
Result := False;
Path := StrAlloc(MAX_PATH);
SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, JtemIDList);
with BrowseInfo do
begin
hwndOwner := GetActiveWindow;
pidlRoot := 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 }
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.
Но оказалось, что с утечками памяти. Собственно, я не знаю - либо там чего пофиксить надо, либо по-другому выбирать, но надо, чтоб без утечек было.
← →
MetalFan © (2006-10-25 17:47) [1]StrAlloc"и есть... а StrDispose не надо чтоли?
← →
Ketmar © (2006-10-25 17:57) [2]>[0] Vovan#1 25-Oct-2006, 17:39
>но надо, чтоб без утечек было.
для этого в голове есть чудный дивайс: мозг. очень часто помогает. особенно хорошо, если мозг протестует против технологии copy/paste/f9.
← →
Vovan#1 (2006-10-25 18:13) [3]>для этого в голове есть чудный дивайс: мозг. очень часто помогает. особенно хорошо, если мозг протестует против технологии copy/paste/f9.
Не интересует программирование виндовских штучек.
← →
Ketmar © (2006-10-25 18:14) [4]>[3] Vovan#1 25-Oct-2006, 18:13
>Не интересует программирование виндовских штучек.
тогда что ты здесь делаешь? линукс и прочее не здесь обсуждают.
← →
Vovan#1 (2006-10-25 18:16) [5]>тогда что ты здесь делаешь? линукс и прочее не здесь обсуждают.
Используй свой чудный дивайс, чтобы ответить на этот вопрос.
← →
Ketmar © (2006-10-25 18:19) [6]>[5] Vovan#1 25-Oct-2006, 18:16
>Используй свой чудный дивайс, чтобы ответить на этот
>вопрос.
не тот дивайс используешь. ты не понял: не только пальцы и глаза. прежде всего -- мозг. ответить на вопросы ты даже не пытался. так же, как и разобраться в коде, кстати.
← →
Zeqfreed © (2006-10-25 18:25) [7]Где ж ты видал бесплатный код без утечек?
← →
Dmitrij_K (2006-10-25 18:27) [8]SelectDirectory() + F1
← →
Vovan#1 (2006-10-25 18:31) [9]>Где ж ты видал бесплатный код без утечек?
Из разряда элементарно-классических - видал. Вот и сейчас - добавил по совету [1] и без утечек.
Кетмару. Нет, не пытался. Ни ответить, ни разобраться.
← →
Ketmar © (2006-10-25 18:45) [10]>[9] Vovan#1 25-Oct-2006, 18:31
>Кетмару. Нет, не пытался. Ни ответить, ни разобраться.
хорошо, что предупредил о твоём подходе. буду знать, что отвечать бессмысленно.
← →
Vovan#1 (2006-10-25 21:05) [11]Чего-то указанная мной штука не работает как надо в Win98 - диалог появляется, но кнопка выбора постоянно неактивна.
← →
MetalFan_pda (2006-10-25 23:42) [12]при вызове callback функции с опр.параметром,необходимо слать некоеисообщение,кот будет вкл/выкл кнопку выбора.смотри хелп и мсдн
← →
Ketmar © (2006-10-26 01:22) [13]>[12] MetalFan_pda 25-Oct-2006, 23:42
>смотри хелп и мсдн
он не будет. см. [3], [9].
← →
Vovan#1 (2006-10-26 19:25) [14]>он не будет. см. [3], [9].
Почему? Совет [12] был по существу. Отослал BFFM_SETOKTEXT, всё заработало.
← →
Ketmar © (2006-10-26 19:29) [15]>[14] Vovan#1 26-Oct-2006, 19:25
а как же [3]? предал свою религию, и таки стал "программировать виндовсвкие штучки"?
← →
DrPass © (2006-10-26 19:42) [16]
> Уже спрашивал на форуме - дали код:
Т.е. одно слово SelectDirectory, которое заменяет всю эту байду, уже не в моде?
← →
Vovan#1 (2006-10-26 19:49) [17]>а как же [3]? предал свою религию, и таки стал "программировать виндовсвкие штучки"?
Я же ни в чём не разбирался. Сказали, что можно отправить сообщение, чтобы кнопка активировалась. Одно сообщение в callback"е уже отправлялось - я его скопировал и заменил параметры уже на сам не помню какой флаг (ну, Мелкософт не Борланд, справку нормальную сделал). Не знаю, когда в следующий раз загляну внутрь этого модуля - работает и пускай. Программирования здесь нет, только штучки.
← →
Vovan#1 (2006-10-26 19:50) [18]>Т.е. одно слово SelectDirectory, которое заменяет всю эту байду, уже не в моде?
Да надо да, заюзать сабж.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c