Главная страница
    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.48 MB
Время: 0.048 c
15-1161633915
matt
2006-10-24 00:05
2006.11.12
Бегущий по лезвию


15-1161657276
Slider007
2006-10-24 06:34
2006.11.12
С днем рождения ! 24 октября


15-1161436618
Альберт
2006-10-21 17:16
2006.11.12
Adobe Flash...


15-1161328245
dmitry kholl
2006-10-20 11:10
2006.11.12
HTML в RTF


2-1161843616
Stanislav
2006-10-26 10:20
2006.11.12
Как сделать компонент с картинкой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский