Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.009 c
1-88400
Darlok
2002-05-16 20:23
2002.05.27
Работа с ресстром


7-88657
Andreym999
2002-03-01 18:21
2002.05.27
запрет записи на дисковод


14-88607
lipskiy
2002-04-18 13:52
2002.05.27
Народ! Возник вопрос о необходимости одного поля в UBPFD !


6-88576
ATLANTIDO
2002-03-14 21:42
2002.05.27
сервер тормозит


1-88483
Zamiran
2002-05-15 15:46
2002.05.27
Помогите люди добрые!!!




   Наверх