Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.022 c
1-1130837427
kyn66
2005-11-01 12:30
2005.11.27
Анимация виснет во время процесса.


14-1130476574
JohnKorsh
2005-10-28 09:16
2005.11.27
Как работать с RxTrayIcon?


4-1127551255
Antoha
2005-09-24 12:40
2005.11.27
Как сервисному приложению отловить вход пользователя в систему.


1-1130868953
Alexander Dakis
2005-11-01 21:15
2005.11.27
Как создать динамическое выделение текста, как в редакторе Delphi


2-1131520481
zor.g
2005-11-09 10:14
2005.11.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский