Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.12.06;
Скачать: [xml.tar.bz2];

Вниз

SHBrowseForFolder модально   Найти похожие ветки 

 
Циркуль   (2008-10-17 14:22) [0]

Как сделать модальным диалог, показываемый при вызове SHBrowseForFolder ?

Использую так:

function BrowseCallbackProc(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;
var
 Buffer: array[0..MAX_PATH - 1] of char;
 R: TRect;
begin
 case uMsg of
   BFFM_INITIALIZED:
     begin
       if lpData <> 0 then
         SendMessage(Wnd, BFFM_SETSELECTION, 1, lpData);
       if GetWindowRect(Wnd, R) then
         MoveWindow(Wnd, (Screen.Width - (R.Right - R.Left)) div 2, (Screen.Height - (R.Bottom - R.Top)) div 2,
                    R.Right - R.Left, R.Bottom - R.Top, True);
     end;
   BFFM_SELCHANGED:
     begin
       SHGetPathFromIDList(PItemIDList(lParam), Buffer);
       SendMessage(Wnd, BFFM_SETSTATUSTEXT, 0, Integer(@Buffer));
     end;
 end;
 Result := 0;
end;

// copied from the last "Latium Software - Pascal Newsletter #33"
function BrowseForFolder(Title: string; RootCSIDL: integer = 0;
 InitialFolder: string = ""): string;
var
 BrowseInfo: TBrowseInfo;
 Buffer: array[0..MAX_PATH - 1] of char;
 ResultPItemIDList: PItemIDList;
begin
 with BrowseInfo do
 begin
   hwndOwner := Application.Handle;
   if RootCSIDL = 0 then
     pidlRoot := nil
   else
     SHGetSpecialFolderLocation(hwndOwner, RootCSIDL,
       pidlRoot);
   pszDisplayName := @Buffer;
   lpszTitle := PChar(Title);
   ulFlags := BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT;
   lpfn := BrowseCallbackProc;
   lParam := Integer(Pointer(InitialFolder));
   iImage := 0;
 end;
 Result := "";
 ResultPItemIDList := SHBrowseForFolder(BrowseInfo);
 if ResultPItemIDList <> nil then
 begin
   SHGetPathFromIDList(ResultPItemIDList, Buffer);
   Result := Buffer;
   GlobalFreePtr(ResultPItemIDList);
 end;
 with BrowseInfo do
   if pidlRoot <> nil then
     GlobalFreePtr(pidlRoot);
end;


 
clickmaker ©   (2008-10-17 14:26) [1]

эээ... а как он может быть немодальным, если возвращает ResultPItemIDList?


 
Циркуль   (2008-10-17 14:29) [2]

Ну.... Я Вам на это не отвечу :)

Вобщем, диалог показывается после нажатия кнопки на модальной форме. Так вот, можно переключаться мышкой с окна диалога на окно формы, нажать там туже самую кнопку, получив второе открытое окно выбора папки, ну и т.п.

Не очень красиво, вобщем...


 
clickmaker ©   (2008-10-17 14:31) [3]

замени hwndOwner := Application.Handle на Handle формы


 
Циркуль   (2008-10-17 14:40) [4]

Сделал так

   if Assigned(Screen.ActiveForm) then
     hwndOwner := Screen.ActiveForm.Handle
   else
     hwndOwner := Application.Handle;


Работает.

Спасибо! :)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.12.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
15-1254746040
XXL
2009-10-05 16:34
2009.12.06
Что случилось с оборудованием от AMD ?


15-1255010538
@!!ex
2009-10-08 18:02
2009.12.06
Чем можно докачать файл?


3-1230550570
Oleg_teacher
2008-12-29 14:36
2009.12.06
Експорт в ртф формат.


15-1255020008
Piter
2009-10-08 20:40
2009.12.06
PHP: error_reporting() возвращает непредвиденно ноль


15-1254495687
Cyrax
2009-10-02 19:01
2009.12.06
Кто-нибудь знает, что такае "партномер" ?





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