Что такое стандартный диалог windows

Использование стандартных диалогов Windows

При необходимости открывать, закрывать или печатать на принтер файлы в разрабатываемом приложении наиболее простой и эффективный путь – использование стандартных диалогов открытия, закрытия файлов.

Рассмотрим использования диалогов открытия и сохранения файлов в случае необходимости сохранения текста в окошке Memo в файле.

Для этого необходимо переместить на форму две компоненты из закладки Dialogs: OpenDialog для открытия файла и SaveDialog для сохранения файла.

Для этих диалогов необходимо настроить свойство Filter. Для этого надо выделить компоненту диалога мышью и в инспекторе объектов щёлкнуть на многоточии напротив свойства Filter. В появившемся диалоговом окне необходимо ввести название фильтра (например “текстовый файл”) и сам фильтр *.txt, поскольку это подходящий формат для сохранения текста.

Для вызова диалога сохранения необходимо перенести на форму компоненту Button со свойством Caption “сохранить в файл” и в обработчике события OnClick записать код:

SaveDialog1->Execute();

Memo1->Lines->SaveToFile(SaveDialog1->FileName);

Метод Execute вызывает диалог сохранения файла, после выполнения которого свойство FileName компоненты SaveDialog становится имени выбранного пользователем в результате выполнения диалога файла.

Рис. 7

Аналогично осуществляется открытие сохранённого файла. Отличие будет состоять в надписи на компоненте Button (“Сохранить файл”) и функции обработчика события OnClick:

OpenDialog1->Execute();

Memo1->Lines->LoadFromFile(OpenDialog1->FileName);

Стандартные диалоги Windows

Рассмотрим теперь те части примера 28-2, где вызываются стандартные диалоги Windows для откры­тия и сохранения файла. Как уже отмечалось в гл. 12, в Windows имеется группа стандартных диалогов, служащих для открытия и сохранения файлов, задания характеристик печати, поиска и замены слов и др. Все они поддерживаются соответствующими классами OWL, производными от базового для всех стан­дартных диалогов класса TCommonDialog, который, в свою очередь, выводится из класса TDialog (рис. 28.6).

Как видно из рис. 28.6, диалоги открытия и сохранения файлов реализуются с помощью классов TOpenSaveDialog, TFileOpenDialog и TFileSaveDialog. Рассмотрим их использование на примере функ­ции примера 28-2 CmOpen(), вызываемой при щелчке мышью по пункту меню «Открыть».

Диалоговые окна 263

Перед тем, как вызывать стандартный диалог Windows, необходимо создать и настроить структуру данных типа TData, которая будет определять свойства этого диалога (у нас эта структурная переменная получила имя fileData). В каждом стандартном диалоге объявлен свой встроенный класс TData, в кото­ром описаны характерные для конкретного диалога данные (в частности, для диалогов открытия или со­хранения файлов к характерным данным относится спецификация файла, а для диалога настройки прин­тера — число печатаемых копий). Вызывая конструктор класса TData для образования переменной fileData

OFN_HIDEREADONLY,»Базы данных (*.dbf)|*.dbf|); .

мы указываем среди его параметров те характерные значения, которые мы хотим поместить в fileData. В нашем случае задаются два параметра: комбинация флагов (проверка существования вводимых пользо­вателем каталогов и имен файлов, а также скрытие контрольной рамки «Только чтение») и тип искомых файлов.

Вызывая далее конструктор класса диалога (в одном предложении с вызовом для этого диалога функции-члена Execute(), приводящим к появлению диалогового окна на экране)

int result= new TFileOpenDialog(this,fileData)->Execute();

мы указываем среди его параметров имя нашей структурной переменной fileData. Среди защищенных данных-членов класса диалога имеется ссылочная переменная Data типа TData, в которую при выполне­нии конструктора записывается адрес созданной в программе структуры fileData, что делает ее доступ­ной программам OWL, реализующим работу диалога. После выбора пользователем в процессе работы с диалогом требуемого файла и закрытия диалога, полная спецификация выбранного файла поступает в элемент FileName переменной fileData, откуда ее можно извлечь и использовать для открытия файла и чтения из него данных.

Читайте также:  Linux find linked libs

Целочисленное значение, возвращаемое функцией Execute(), говорит о том, каким образом был за­крыт диалог. При нажатии на кнопку ОК возвращается значение IDOK, при выборе кнопки «Отмена» -значение IDCANCEL. Анализ возвращаемого значения дает возможность завершить функцию CmOpen(), если пользователь завершил диалог, не выбрав никакого файла. Если же файл выбран и диалог завершен с кодом возврата ОК, то выполняется проверка правильности расширения имени файла. Для этого сим­вольный указатель ptr устанавливается на завершающий нуль спецификации файла в переменной fileData, а затем последние три символа спецификации сравниваются с заданным расширением DBF (вы­бранным, разумеется, для наших файлов совершенно произвольно). Если расширение правильное, то файл открывается и все его содержимое читается в массивную переменную tsbArray, состоящую из запи­сей типа TSB.

После закрытия файла вызовом функции Invalidate() инициируется сообщение WM_PAINT для глав­ного окна приложения (поскольку функция CmOpen() принадлежит классу главного окна My Window), в результате чего на экран выводится содержимое выбранного файла с базой данных.

Функция CmSave(), вызываемая при выборе пункта меню «Сохранить» и активизирующая стандарт­ный диалог Windows «Сохранение», отличается от функции CmOpen() только режимом открытия файла (для записи, а не для чтения) и заменой функции fread() на fwrite().

Замещенная функция Paint() просматривает в цикле записи прочитанного файла, собирает данные каждой записи в символьную строку и функцией TextOut() выводит эти строки на экран друг под другом (рис. 28.7). При этом первое данное из каждой записи копируется в строку-приемник функцией strcpy(), очищая (в логическом плане) строку s от предыдущего содержимого, а последующие данные наращива­ют строку с помощью функции strcat(), выполняющей операцию конкатенации. Ради простоты в про­грамме не предусмотрено ни какого-либо форматирования выводимых строк, ни даже анализа числа ре­ально содержащихся в массиве записей.

Стандартные диалоги Windows

Рассмотрим теперь те части примера 28-2, где вызываются стандартные диалоги Windows для откры­тия и сохранения файла. Как уже отмечалось в гл. 12, в Windows имеется группа стандартных диалогов, служащих для открытия и сохранения файлов, задания характеристик печати, поиска и замены слов и др. Все они поддерживаются соответствующими классами OWL, производными от базового для всех стан­дартных диалогов класса TCommonDialog, который, в свою очередь, выводится из класса TDialog (рис. 28.6).

Как видно из рис. 28.6, диалоги открытия и сохранения файлов реализуются с помощью классов TOpenSaveDialog, TFileOpenDialog и TFileSaveDialog. Рассмотрим их использование на примере функ­ции примера 28-2 CmOpen(), вызываемой при щелчке мышью по пункту меню «Открыть».

Диалоговые окна 263

Перед тем, как вызывать стандартный диалог Windows, необходимо создать и настроить структуру данных типа TData, которая будет определять свойства этого диалога (у нас эта структурная переменная получила имя fileData). В каждом стандартном диалоге объявлен свой встроенный класс TData, в кото­ром описаны характерные для конкретного диалога данные (в частности, для диалогов открытия или со­хранения файлов к характерным данным относится спецификация файла, а для диалога настройки прин­тера — число печатаемых копий). Вызывая конструктор класса TData для образования переменной fileData

OFN_HIDEREADONLY,»Базы данных (*.dbf)|*.dbf|); .

мы указываем среди его параметров те характерные значения, которые мы хотим поместить в fileData. В нашем случае задаются два параметра: комбинация флагов (проверка существования вводимых пользо­вателем каталогов и имен файлов, а также скрытие контрольной рамки «Только чтение») и тип искомых файлов.

Читайте также:  Принудительное отключение обновления windows

Вызывая далее конструктор класса диалога (в одном предложении с вызовом для этого диалога функции-члена Execute(), приводящим к появлению диалогового окна на экране)

int result= new TFileOpenDialog(this,fileData)->Execute();

мы указываем среди его параметров имя нашей структурной переменной fileData. Среди защищенных данных-членов класса диалога имеется ссылочная переменная Data типа TData, в которую при выполне­нии конструктора записывается адрес созданной в программе структуры fileData, что делает ее доступ­ной программам OWL, реализующим работу диалога. После выбора пользователем в процессе работы с диалогом требуемого файла и закрытия диалога, полная спецификация выбранного файла поступает в элемент FileName переменной fileData, откуда ее можно извлечь и использовать для открытия файла и чтения из него данных.

Целочисленное значение, возвращаемое функцией Execute(), говорит о том, каким образом был за­крыт диалог. При нажатии на кнопку ОК возвращается значение IDOK, при выборе кнопки «Отмена» -значение IDCANCEL. Анализ возвращаемого значения дает возможность завершить функцию CmOpen(), если пользователь завершил диалог, не выбрав никакого файла. Если же файл выбран и диалог завершен с кодом возврата ОК, то выполняется проверка правильности расширения имени файла. Для этого сим­вольный указатель ptr устанавливается на завершающий нуль спецификации файла в переменной fileData, а затем последние три символа спецификации сравниваются с заданным расширением DBF (вы­бранным, разумеется, для наших файлов совершенно произвольно). Если расширение правильное, то файл открывается и все его содержимое читается в массивную переменную tsbArray, состоящую из запи­сей типа TSB.

После закрытия файла вызовом функции Invalidate() инициируется сообщение WM_PAINT для глав­ного окна приложения (поскольку функция CmOpen() принадлежит классу главного окна My Window), в результате чего на экран выводится содержимое выбранного файла с базой данных.

Функция CmSave(), вызываемая при выборе пункта меню «Сохранить» и активизирующая стандарт­ный диалог Windows «Сохранение», отличается от функции CmOpen() только режимом открытия файла (для записи, а не для чтения) и заменой функции fread() на fwrite().

Замещенная функция Paint() просматривает в цикле записи прочитанного файла, собирает данные каждой записи в символьную строку и функцией TextOut() выводит эти строки на экран друг под другом (рис. 28.7). При этом первое данное из каждой записи копируется в строку-приемник функцией strcpy(), очищая (в логическом плане) строку s от предыдущего содержимого, а последующие данные наращива­ют строку с помощью функции strcat(), выполняющей операцию конкатенации. Ради простоты в про­грамме не предусмотрено ни какого-либо форматирования выводимых строк, ни даже анализа числа ре­ально содержащихся в массиве записей.

Стандартные диалоги Windows

Рассмотрим теперь те части примера 28-2, где вызываются стандартные диалоги Windows для откры­тия и сохранения файла. Как уже отмечалось в гл. 12, в Windows имеется группа стандартных диалогов, служащих для открытия и сохранения файлов, задания характеристик печати, поиска и замены слов и др. Все они поддерживаются соответствующими классами OWL, производными от базового для всех стан­дартных диалогов класса TCommonDialog, который, в свою очередь, выводится из класса TDialog (рис. 28.6).

Как видно из рис. 28.6, диалоги открытия и сохранения файлов реализуются с помощью классов TOpenSaveDialog, TFileOpenDialog и TFileSaveDialog. Рассмотрим их использование на примере функ­ции примера 28-2 CmOpen(), вызываемой при щелчке мышью по пункту меню «Открыть».

Читайте также:  Mac os настроить дополнительные кнопки мыши

Диалоговые окна 263

Перед тем, как вызывать стандартный диалог Windows, необходимо создать и настроить структуру данных типа TData, которая будет определять свойства этого диалога (у нас эта структурная переменная получила имя fileData). В каждом стандартном диалоге объявлен свой встроенный класс TData, в кото­ром описаны характерные для конкретного диалога данные (в частности, для диалогов открытия или со­хранения файлов к характерным данным относится спецификация файла, а для диалога настройки прин­тера — число печатаемых копий). Вызывая конструктор класса TData для образования переменной fileData

OFN_HIDEREADONLY,»Базы данных (*.dbf)|*.dbf|); .

мы указываем среди его параметров те характерные значения, которые мы хотим поместить в fileData. В нашем случае задаются два параметра: комбинация флагов (проверка существования вводимых пользо­вателем каталогов и имен файлов, а также скрытие контрольной рамки «Только чтение») и тип искомых файлов.

Вызывая далее конструктор класса диалога (в одном предложении с вызовом для этого диалога функции-члена Execute(), приводящим к появлению диалогового окна на экране)

int result= new TFileOpenDialog(this,fileData)->Execute();

мы указываем среди его параметров имя нашей структурной переменной fileData. Среди защищенных данных-членов класса диалога имеется ссылочная переменная Data типа TData, в которую при выполне­нии конструктора записывается адрес созданной в программе структуры fileData, что делает ее доступ­ной программам OWL, реализующим работу диалога. После выбора пользователем в процессе работы с диалогом требуемого файла и закрытия диалога, полная спецификация выбранного файла поступает в элемент FileName переменной fileData, откуда ее можно извлечь и использовать для открытия файла и чтения из него данных.

Целочисленное значение, возвращаемое функцией Execute(), говорит о том, каким образом был за­крыт диалог. При нажатии на кнопку ОК возвращается значение IDOK, при выборе кнопки «Отмена» -значение IDCANCEL. Анализ возвращаемого значения дает возможность завершить функцию CmOpen(), если пользователь завершил диалог, не выбрав никакого файла. Если же файл выбран и диалог завершен с кодом возврата ОК, то выполняется проверка правильности расширения имени файла. Для этого сим­вольный указатель ptr устанавливается на завершающий нуль спецификации файла в переменной fileData, а затем последние три символа спецификации сравниваются с заданным расширением DBF (вы­бранным, разумеется, для наших файлов совершенно произвольно). Если расширение правильное, то файл открывается и все его содержимое читается в массивную переменную tsbArray, состоящую из запи­сей типа TSB.

После закрытия файла вызовом функции Invalidate() инициируется сообщение WM_PAINT для глав­ного окна приложения (поскольку функция CmOpen() принадлежит классу главного окна My Window), в результате чего на экран выводится содержимое выбранного файла с базой данных.

Функция CmSave(), вызываемая при выборе пункта меню «Сохранить» и активизирующая стандарт­ный диалог Windows «Сохранение», отличается от функции CmOpen() только режимом открытия файла (для записи, а не для чтения) и заменой функции fread() на fwrite().

Замещенная функция Paint() просматривает в цикле записи прочитанного файла, собирает данные каждой записи в символьную строку и функцией TextOut() выводит эти строки на экран друг под другом (рис. 28.7). При этом первое данное из каждой записи копируется в строку-приемник функцией strcpy(), очищая (в логическом плане) строку s от предыдущего содержимого, а последующие данные наращива­ют строку с помощью функции strcat(), выполняющей операцию конкатенации. Ради простоты в про­грамме не предусмотрено ни какого-либо форматирования выводимых строк, ни даже анализа числа ре­ально содержащихся в массиве записей.

Оцените статью