Главная страница
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.47 MB
Время: 0.014 c
1-88485
Faustus
2002-05-15 14:41
2002.05.27
Класс


4-88691
pasha_golub
2002-03-26 16:14
2002.05.27
Передача текста в чужое окно


1-88497
Riko
2002-05-15 16:52
2002.05.27
Снова INI...


1-88408
Stexen
2002-05-16 23:45
2002.05.27
ZLIB ZLIB ZLIB ZLIB


3-88320
Hamster
2002-04-30 08:37
2002.05.27
Списание.