Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Выбрать папку. Нормально.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.051 c
15-1161855795
RebroFF
2006-10-26 13:43
2006.11.12
Есть ли шансы у самоучек стать настоящими профи?


3-1158223294
RomanH
2006-09-14 12:41
2006.11.12
Открыть все НД в datamodule


15-1161940134
Hg
2006-10-27 13:08
2006.11.12
Примеры к книге Indy In Depth


15-1161699427
Krants
2006-10-24 18:17
2006.11.12
Nero и коммандная строка


6-1151325615
Cker
2006-06-26 16:40
2006.11.12
Get-запрос