Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OpenDialog и SaveDialog [D7, WinXP]


Delphi_is_cool ©   (2005-09-26 01:54:00) 

Здраствуйте ! У меня вопрос простой ) Как средставми WinApi осуществить сабж ?


Delphi_is_cool   (2005-09-26 15:15:00) [1]

Del_programmer, пишу простенький блокнот на Api, вот для этого :)


Delphi_is_cool   (2005-09-26 15:13:00) [2]

Спасибо большое !


Del_programmer   (2005-09-26 15:11:00) [3]


> Delphi_is_cool ©

почему именно через АПИ?


ShiFT   (2005-09-26 08:34:00) [4]


«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 для того, чтобы появлялся запрос на перезапись существующего файла.


Германн   (2005-09-26 02:21:00) [5]

Сабж навеял мне теплые воспоминания о bpw. Там мне приходилось это делать, но увы уже "навскидку" не помню "в деталях" как! А уж в применении к Д7, тем более.

Но не проще ли в данном случае воспользоваться функциями ShellAPI?


Наверх

Титульная страница Поиск, карта сайта Написать письмо