Главная страница
    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-88423
MisterBin
2002-05-16 18:17
2002.05.27
Как запретить нажатие стрелок


1-88471
tararasyk
2002-05-17 18:27
2002.05.27
Как написать оболочка под Windows


3-88358
Ura
2002-04-29 14:50
2002.05.27
Сообщение


7-88658
lipskiy
2002-03-02 19:00
2002.05.27
Что надо учесть, чтобы быть уверенным, что мое приложение будет работоспособно на всех пользовательских машинах?


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