Форум: "WinAPI";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизOpenDialog и SaveDialog Найти похожие ветки
← →
Delphi_is_cool © (2005-09-26 01:54) [0]Здраствуйте ! У меня вопрос простой ) Как средставми WinApi осуществить сабж ?
← →
Германн © (2005-09-26 02:21) [1]Сабж навеял мне теплые воспоминания о bpw. Там мне приходилось это делать, но увы уже "навскидку" не помню "в деталях" как! А уж в применении к Д7, тем более.
Но не проще ли в данном случае воспользоваться функциями ShellAPI?
← →
ShiFT (2005-09-26 08:34) [2]
«Open File»
//Во-первых, константа с файловым фильтром.
//В данном примере определяется константа с двумя фильтрами:
// Text files (*.txt)"#0"*.txt" и All files"#0"*.*".
//Разделяются фильтры символом с кодом нуль (#0),
//завершается строка двумя нулевыми символами.
//Каждый фильтр состоит из текста фильтра,
//затем нулевой символ,
//затем сам фильтр – файловая маска.
const
szFileFilter: string = "Text files (*.txt)"#0"*.txt"#0"All files"#0"*.*"#0#0;
//Определяем глобальные переменные, в основном буферы для хранения строк.
var
lpCustFilter: array[0..255] of char = "";
nFilterIndex: DWORD = 0;
szFile: array[0..2048] of char = "";
szFileTitle: array[0..255] of char;
szCurrentDir: array[0..1024] of char = "";
//Теперь пишем код для вызова функции GetOpenFileName.
//В данном случае код находится внутри оконной функции –
//это реакция на нажатие кнопки.
var
ofn: TOPENFILENAME;
s: string;
cf: PChar;
errcode: DWORD;
begin
ofn.lStructSize := sizeof(TOPENFILENAME);
ofn.hWndOwner := wnd;
ofn.hInstance := hInstance;
ofn.lpstrFilter := @szFileFilter[1]; //преобразуем тип string к типу PChar
ofn.lpstrCustomFilter := lpCustFilter;
ofn.nMaxCustFilter := sizeof(lpCustFilter);
ofn.nFilterIndex := nFilterIndex;
ofn.lpstrFile := szFile;
ofn.nMaxFile := sizeof(szFile);
ofn.nFilterIndex := 0;
ofn.lpstrFileTitle := szFileTitle;
ofn.nMaxFileTitle := sizeof(szFileTitle);
ofn.lpstrInitialDir := szCurrentDir; //Глобальная переменная,
//где хранится адрес текущего каталога.
//Текущий каталог для ЭТОЙ функции,
//не для программы!
ofn.lpstrTitle := "Заголовок диалога Open file";
ofn.Flags := OFN_EXPLORER or OFN_ALLOWMULTISELECT or OFN_ENABLESIZING or OFN_SHOWHELP or OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST;
ofn.lpstrDefExt := "txt";
ofn.lpfnHook := nil;
ofn.lpTemplateName := nil;
ofn.lCustData := 0;
if GetOpenFileName(ofn) then begin
//т.е. пользователь выбрал файл(ы) и нажал OK
nFilterIndex := ofn.nFilterIndex; // Запоминаем номер текущего фильтра
if length(ofn.lpstrFile) < ofn.nFileOffset then begin
// т.е. пользователь открыл несколько файлов
cf := szFile;
inc(cf, ofn.nFileOffset);
s := "Вы выбрали НЕСКОЛЬКО файлов в каталоге"#13#10;
s := s + szFile + ""#13#10;
repeat
s := s + cf + #13#10;
inc(cf, length(cf)+1);
until length(cf)=0;
end else begin
// Т.е. пользователь открыл всего один файл
s := "Вы выбрали всего ОДИН файл: " + szFile;
end;
end else begin
//либо пользователь нажал Cancel, либо произошла какая-то ошибка
errcode := CommDlgExtendedError;
case errcode of
0: s := "Вы нажали CANCEL";
else
s := "Ошибка с кодом " + IntToStr(errcode);
end;
end;
MessageBox( 0, PChar(s), "", 0);
//Используемая в примере функция CommDlgExtendedError возвращает код ошибки от выполнения самого последнего вызова функции из модуля commdlg.
//Диалоговое окно «Save As», вызывается абсолютно точно так же, как и окно «Open File»,
//только вместо GetOpenFileName вызывается GetSaveFileName.
//Ещё нужно добавить в список флагов флаг OFN_OVERWRITEPROMPT для того, чтобы появлялся запрос на перезапись существующего файла.
← →
Del_programmer © (2005-09-26 15:11) [3]
> Delphi_is_cool ©
почему именно через АПИ?
← →
Delphi_is_cool © (2005-09-26 15:13) [4]Спасибо большое !
← →
Delphi_is_cool © (2005-09-26 15:15) [5]Del_programmer, пишу простенький блокнот на Api, вот для этого :)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c