Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
2-1131385242
Toxa_ua
2005-11-07 20:40
2005.11.27
Чтение файла. Помогите пожалуйста. -))


14-1130852087
Layner
2005-11-01 16:34
2005.11.27
Программа сравнивающая диск или дирректорию, ищу


4-1127313146
Still Swamp
2005-09-21 18:32
2005.11.27
Как сделать окошко которое не будет на себя переключать фокус


11-1112760998
uli
2005-04-06 08:16
2005.11.27
выделение текста в EDITBOX


3-1129176875
Рафик
2005-10-13 08:14
2005.11.27
MSSQL Dependencies