Форум: "WinAPI";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
ВнизДиалог с проверкой наличия файла Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c