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

Вниз

Диалог с проверкой наличия файла   Найти похожие ветки 

 
Chris   (2002-03-27 14:18) [0]

Есть диалог "Выбор каталога", который запрещает/разрешает кнопку OK в зависимости от наличия в этом каталоге определенного файла (ов). Что это за функция?


 
MAxiMum   (2002-03-27 14:26) [1]

Это фукнция WinApi SHBrowseForFolder. Использует Callback для дополнительных параметров (задействованность кнопки Ok, выбор папки, изменение статуса).


 
Chris   (2002-03-27 16:58) [2]

Путем проб и ошибок получил следующего монстра:

var BInfo: BrowseInfo;

function BrowseCallbackProc( hWnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM ): Integer; stdcall;
var TempPath : array[0..MAX_PATH] of char;
sTempPath: string;
TSR: TSearchRec;
begin
Result:=0;
if uMsg=BFFM_SELCHANGED then
begin
//Получаем имя выбранной папки
SHGetPathFromIDList(PItemIDList(lParam), TempPath);
sTempPath:=TempPath;
//Очищаем строку статуса в окне диалога (без этого у меня последний символ заменяется на кубик
PostMessage( hWnd, BFFM_SETSTATUSTEXT, 0,
Integer(PChar("")));
//Если в выбранной папке есть файл myFile, то там есть и все необходимые файлы моей БД
if FindFirst(sTempPath+"\myFile",$3F,TSR)=0 then
PostMessage( hWnd, BFFM_SETSTATUSTEXT, 0,
Integer(PChar("Подключиться к БД")))
else
PostMessage( hWnd, BFFM_SETSTATUSTEXT, 0,
Integer(PChar("Создать новую БД")));
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var lpItemID : PItemIDList;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
FillChar(BInfo, sizeof(BrowseInfo), #0);
BInfo.hwndOwner:=Handle;
BInfo.pszDisplayName:= @DisplayName; //Эту строчку содрал. Зачем она - не знаю.
BInfo.lpszTitle:="Выберите путь к БД";
BInfo.ulFlags:= BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT;
BInfo.lpfn:=@BrowseCallbackProc;
lpItemID := SHBrowseForFolder(BInfo);
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
//Путь выбранной папки выводится в StaticText1
StaticText1.Caption:=TempPath;
StaticText1.Caption:=StaticText1.Caption+"\";
GlobalFreePtr(lpItemID);
end;
end;

Может кто сможет помочь оптимизировать (сократить громоздкость)?



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

Текущий архив: 2002.05.27;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.006 c
1-88540
Стас
2002-05-16 08:33
2002.05.27
TNMFTP под Win2000


1-88562
Martyn
2002-05-16 14:29
2002.05.27
QReport - сообщение


4-88686
Толик
2002-03-28 10:56
2002.05.27
Иконка файла


1-88500
kserg@ukr.net
2002-05-13 18:08
2002.05.27
Кто работал с компонентом TAdvStringGrid ?


1-88549
hex_for_delph
2002-05-15 20:05
2002.05.27
Перевод картинки в текст





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