Главная страница
    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.49 MB
Время: 0.042 c
15-1161552124
RASkov
2006-10-23 01:22
2006.11.12
Посмотрите


2-1161693916
azot
2006-10-24 16:45
2006.11.12
progress bar


2-1161944511
RomanH
2006-10-27 14:21
2006.11.12
Опять эти MDI-окна


15-1161112759
DillerXX
2006-10-17 23:19
2006.11.12
Аквариум (группа)


3-1158224830
vodvorezlaya
2006-09-14 13:07
2006.11.12
Подскажите с компонентом TDBEdit и TDBComboBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский