Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1161237904
brother
2006-10-19 10:05
2006.11.12
исследование чужих окошек


15-1161779874
Shopot
2006-10-25 16:37
2006.11.12
Где скачать компонент?


6-1150873944
skiermax
2006-06-21 11:12
2006.11.12
список портов


15-1161670572
kroner
2006-10-24 10:16
2006.11.12
А Вы в это верите?


2-1162152048
md
2006-10-29 23:00
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский