- •1.1. Что такое программа и как она выглядит?
- •1.2. Комментарии
- •1.3. Зарезервированные слова и типы данных
- •1.4. Объявление переменных
- •1.5. Операции и выражения
- •1.6. Ввод и вывод
- •1.7. Переменные и константы
- •1.8 Логические операторы
- •1.9. Управляющие операторы
- •1.10. Операторы циклов
- •1.11. Операторы перехода
- •2. Функции
- •2.1. Передача параметров
- •2.2. Библиотечные функции
- •2.3. Локальные и глобальные переменные
- •Объявления функций
- •Время жизни и область видимости программных объектов
- •Int local_var; /* по умолчанию auto */
- •2.4. Перегрузка
- •3. Массивы
- •4. Структуры
- •Int numberPeriod; //число переодов начисления процентов
- •Int page; //Количество страниц
- •Void print(); /*Внимание, записывается только прототип функции */
- •Int yearBorn; //год рождения
- •Int yearBorn; //год рождения
- •4.1. Демонстрационные программы
- •Int done;/*переменная, которая информирует о конце списка файлов */
- •6. Объединения
- •Info;//Обявление переменной типа объединение
- •Info;//Обявление переменной типа объединение
- •7. Объектно-ориентированное программирование
- •7.1. Классы и объекты
- •Демонстрационные программы
- •Результат работы программы
- •7.2. Конструкторы и деструкторы
- •Конструктор копирования
- •7.5. Наследование
- •7.3. Создание объектов и обращение к членам объекта
- •8. Абстрактные типы данных
- •9. Пространство имен
- •Void greeting();/*это пространство имен содержит функцию с тем же именем*/
- •Void big_greeting(); /*эта функция не попадает ни в одно из созданных подпространств,т.Е. Принадлежит пространству имен std */
- •//Определение функций
- •Void big_greeting() /* определение данной функции не принадлежит ни одному из созданных пространств имен, следовательно дальнейший код помещается в глобальное пространство имен */
- •10. Строки
- •4.3 Демонстрационные программы
- •4.10. Класс string
- •Класс AnsiString
- •Класс AnsiString
- •Класс Set
- •4.9. Перегрузка операторов
- •Использование "умных" указателей
- •4.8. Полиморфизм
- •Главное меню — компонент MainMenu
- •Диалоги
- •Файлы и потоки
- •Ввод-вывод в файл
- •Ifstream inStream; //Объявление входного потока
- •InStream.Open("character.Dat"); /*присоединение файла к входному потоку */
- •InStream.Close(); //закрытие входного потока
- •If(!out){ //при неудачной попытке
- •If(in.Fail()){ //поток не создан, то сообщение и выход
- •Управление потоком ввода-вывода
- •5.2. Ввод имен файлов
- •5.3. Манипуляторы
- •5. Указатели
- •5.1.Типы указателей и операции с указателями
- •Адресная арифметика
- •Сравнение указателей
- •Преобразование типа указателя
- •Указатель void
- •5.2. Динамические массивы
- •Int array[10]; //объявляется массив с именем array
- •Int a[10]; //объявляется массив с именем a
- •Int *array1; //указатель типа int с именем array1
- •Int *array[5];/*массив с именем array, его элементы указатели*/
- •Int (*point)[4][5]; /*объявление указателя на двумерный массив без имени */
- •Использование указателей в функциях и указатели на функции
- •Указатель классов
- •Шаблоны
- •Шаблоны функций
- •Void Swap (t& X, t& y) /* к моменту обращения тип т будет известен и заменен, например, на int */
- •Void sort(t array[], int maxIndex){ /*передали массив и его размер */
- •6.2. Шаблоны классов
- •6.3 Демонстрационные программы
- •7.1 Обработка исключений
- •Исключения и их стандартная обработка
- •Базовый класс исключений vcl Exception
- •Упражнения
- •Обработка исключительных ситуаций, возбуждаемых оператором new
- •Исходные файлы и объявление переменных
- •Связаные списки
- •Void newHead( //прототип функции создающей узел
- •Void newHead(//прототип функции создания узла
- •Поиск в связанных списках
- •Void newHead(PtrNode& head, //адрес головного узла
- •Директивы препроцессора.
- •Структура файла проекта
- •Структура make-файла
- •Структура модуля
- •Структура h-файла
- •Файл формы
- •Особенности программирования под Windows.
- •Функция WinMain
- •Создание проекта Win32Application.
- •Библиотека mfc.
- •Создаем код
- •Шпаргалка
- •Структура файла проекта
- •Структура make-файла
- •Структура модуля
- •Структура h-файла
- •Файл формы
- •Файл проекта
- •Введение
- •Свойства компонентов
- •События
- •Менеджер проектов
- •Пример: создание простейшего приложения
- •Графика Внедрение картинок
- •Редактор изображений
- •Классы для хранения графических объектов.
- •If (SelectDirectory( //Компонент библиотеки
- •Методы создания собственной графики. Рисование по пикселам
- •Int px, py; //координаты пикселей
- •Рисование с помощью пера
- •Int px, py; //координаты пикселей
- •Рисование кистью
- •Мультимедиа и анимация Общие сведения о звуковых и видеофайлах
- •Способы воспроизведения звуков
- •Создание мультфильма
- •Воспроизведение немых видео клипов — компонент Animate
- •Проигрыватель MediaPlayer
- •Процессы, потоки, распределенные приложения
- •If include "uOverlayl.H" // включение головного файла приложения
- •Функция CreateProcess
- •490 _ Глава 7
- •7.8.4 Элементы ActiveX
- •492 Глава 7
- •494 Глава 7
- •7.9 Компоненты-серверы сом
- •496 Глава 7
- •7.9.2 Свойства и методы сервера Word
- •500 Глава 7
- •Заключение
- •Что такое ansi?
- •Почему вместо русских букв в консольном приложении выводится мусор? Автор: Алексей Кирюшкин Версия текста: 1.0
- •Раздел I.2Выход 1
- •Раздел I.3Выход 2
- •Раздел I.4Выход 3
- •Раздел I.5Выход 4
- •(A)Потоки
- •(C)Ввод-вывод файлов
- •Выбор компонентов для групповых операций
- •Установка разделяемых свойств компонентов
- •Изменение размера компонентов
- •Выравнивание компонентов
- •Пример: Создание текстового редактора Проектирование формы приложения
- •Создание обработчиков событий
- •Создание меню
Диалоги
В приложениях часто приходится выполнять действия связанные с выбором и подтверждением или отрицаемем некоторых действий. Например, нужно выбрать файл из предлагаемрго списка. Для этого используются компоненты, размещенные на вкладке Dialogs. Но не всегда нас могут устроить стандартные диалоги. Несмотря на то, что в них предусмотрены достаточно широкие возможности настройки, специфика наших приложений может требовать каких-то дополнительных функций, которые невозможно реализовать в стандартном диалоге. Поэтому в C++Builder имеются компоненты, которые можно рассматривать как фрагменты диалоговых окон. Из них можно создавать собственные диалоги.
Пиктограмма |
Компонент |
Описание |
|
OpenDialog |
Создает окно типа «Открыть файл» |
|
SaveDialog |
Создает окно типа «Сохранить файл» |
|
OpenPictureDialog |
Создает окно типа «Открыть рисунок» |
|
SavePictureDialog |
Создает окно типа «Сохранить рисунок» |
|
FontDialog |
Создает окно типа «Выбрать шрифт» |
|
ColorDialog |
Создает окно типа «Выбрать цвет» |
|
PrintDialog |
Создает окно типа «Печать» |
|
PrinterSetupDialog |
Создает окно типа «Установка принтера» |
|
FindDialog |
Создает окно типа «Найти» |
|
ReplaceDialog |
Создает окно типа «Заменить» |
На вкладке Additional есть еще два диалога
Пиктограмма |
Компонент |
Описание |
|
ColorBox |
Создает список для выбора цвета |
|
CustomizeDlg |
Создает настраиваемый диалог, связанный со стандартными действиями. |
Есть еще несколько диалогов исполненных в стилеWindows 3.1, однако в настоящее время они практически не используются.
Все свойства этих компонентов одинаковы. Основное свойство, в котором возвращается в виде строки выбранный пользователем файл, — FileName. Значение этогосвойства можно задать и перед обращением к диалогу. Тогда оно появится в диалоге как значение по умолчанию в окне Имя файла.
Все диалоги являются невизуальными компонентами, так что место их размещения на форме не имеет значения. При обращении к этим компонентам вызываются стандартные диалоги, вид которых зависит от версии Windows и настройки системы. Так что при запуске одного и того же приложения на компьютерах с разными системами диалоги будут выглядеть по-разному. Например, при русифицированной версии Windows все их надписи будут русскими, а при англоязычной версии надписи будут на английском языке.
В качестве иллюстрации некоторых возможностей диалоговых компонентов создадим форму, в которой меню позволяет вызвать некоторые диалоги. Для этого поместим на форму компоненты Edit, MainMenu, OpenDialog и SaveDialog.
Создадим простое меню
Чтобы избежать путаницы в числовых именах разделовтменю их следует переименовать. В дальнейшем это будут File, Open, Save, Exit.
В модуле формы создадим глобальную переменную
AnsiString MyFileName="";
Обработчик OnClick раздела Открыть запишем так:
void __fastcall TForm1::OpenClick(TObject *Sender)
{
if(OpenDialog1->Execute()){
MyFileName=OpenDialog1->FileName;
Edit1->Text=MyFileName;
}
}
Поясним этот код.
Основной метод, которым производится обращение к любому диалогу, -Execute. Эта функция открывает диалоговое окно и, если пользователь произвел в нем какой-то выбор, то функция возвращает true. При этом в свойствах компонента — диалога запоминается выбор пользователя, который можно прочитать и использовать в дальнейших операциях. Если пользователь в диалоге нажал кнопку Отмена или клавишу Esc, то функция Execute возвращает false. Поэтому стандартное обращение к диалогу имеет вид:
if (<имя компонента - диалога> -> Execute())
<оператор, использующий выбор пользователя>;
Часто требуется выводит в диалог не все файлы, а только те, которые имеют заданное расширение, например, exe, doc, txt. Для этого существует окно «Тип файлов».
Типы искомых файлов, появляющиеся в диалоге в выпадающем списке. Тип файла задаются свойством Filter. Для этого щелчком по установленному на форме компоненту, в данном случае это OpenDialog, выделить нужный компонет. В Инспекторе Объектов щелкнуть по окошку Filtr, и нажать появившуюся кнопку с многоточием.
После этого открывается окно редактора с таблицей из двух колонок. В левую половину записывается описание файлов, т.е. текст который увидит пользователь в выпадающем списке, а в правую, через точку с запятой, их расширения.
В данном случае задано три фильтра:
фильтр текстовых файлов с расширениями .doc, .txt,.rtf,
фильтр исполняемых файлов с расширениями .exe, .com,
любых файлов с шаблоном "*.*".
После выхода из окна редактирования фильтров заданные шаблоны появятся в свойстве Filter в виде строки вида:
Текст (doc, txt, rtf)|*.doc; *.txt; *.rtf|Исполняемые|*exe; *.com|Все файлы|*.*
В этой строке тексты и шаблоны разделяются вертикальными линиями. В аналогичном виде, если требуется, можно задавать свойство Filter программно во время выполнения приложения.
Свойство |
Описание |
Filterlndex |
определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога. Например, значение FilterIndex=1 задает по умолчанию первый фильтр. |
InitialDir |
определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения. |
DefaultExt |
определяет значение расширения файла по умолчанию. Если значение этого свойства не задано, пользователь должен указать в диалоге полное имя файла с расширением. Если же задать значение DefaultExt, то пользователь может писать в диалоге имя без расширения. В этом случае будет принято заданное расширение. |
Title |
позволяет задать заголовок диалогового окна. Если это свойство не задано, окно открывается с заголовком, определенным в системе (например, ≪Сохранить как≫). Но можно задать и свой заголовок, подсказывающий пользователю ожидаемые действия. Например, ≪Укажите имя и тип сохраняемого файла |
Options |
определяет условия выбора файла.
|
Множество опций, которые можно установить программно или во время проектирования, включает:
ofAllowMuItiSelect |
Позволяет пользователю выбирать несколько файлов. |
ofCreatePrompt |
В случае, если пользователь написал имя несуществующего файла, появляется замечание и запрос, надо ли создать файл с заданным именем. |
ofEnablelncludeNotify |
Разрешает посылать в диалог сообщения. |
ofEnableSizing |
Разрешает изменять размер окна |
ofExtensionDifferent |
Этот флаг, который можно прочитать после выполнения диалога, показывает, что расширение файла, выбранного пользователем, отличается от DefaultExt. |
ofFileMustExist |
В случае, если пользователь написал имя несуществующего файла, появляется сообщение об ошибке. |
ofРideReadOnly |
Удаляет из диалога индикатор Открыть только для чтения. |
ofNoChangeDir |
После щелчка пользователя на кнопке ОК восстанавливает текущий каталог, независимо от того, какой каталог был открыть при поиске файла.
|
ofNoDereferenceLinks |
Запрещает переназначать клавиши быстрого доступа в диалоговом окне. |
ofNoLongNames |
Отображаются только не более 8 символов имени и трех символов расширения. |
ofNoNetworkButton |
Убирает из диалогового окна кнопку поиска в сети. Действует только если флаг ofOldStyleDialog включен. |
ofNoReadOnlyReturn |
Если пользователь выбрал файл только для чтения, то генерируется сообщение об ошибке. |
ofNoTestFileCreate |
Запрещает выбор в сети защищенных файлов и недоступных дисков при сохранении файла. |
ofNoValidate |
Не позволяет писать в именах файловнеразрешенные символы, но не мешает выбирать файлы с неразрешенными символами. |
ofOldStyleDialog |
Создает диалог выбора файла в старом стиле |
ofOverwritePrompt |
В случае, если при сохранении файла пользователь написал имя существующего файла, появляется замечание, что файл с таким именем существует, и запрашивается желание пользователя переписать существующий файл. |
ofPathMustExist |
Генерирует сообщение об ошибке, если пользователь указал в имени файла несуществующий каталог. |
ofReadOnly |
По умолчанию включает индикатор Открыть только для чтения при открытии диалога. |
ofShareAware |
Игнорирует ошибки нарушения условий коллективного доступа и разрешает, несмотря на них, производить выбор файла. |
ofShowHelp |
Отображает в диалоговом окне кнопку Справка. |
В компонентах диалогов открытия и сохранения файлов предусмотрена возможность обработки ряда событий. Такая обработка может потребоваться, если рассмотренных опций, несмотря на их количество, не хватает, чтобы установить все диктуемые конкретным приложением ограничения на выбор файлов. Событие OnCanClose возникает при нормальном закрытии пользователем диалогового окна после выбора файла. При отказе пользователя от диалога — нажатии кнопки Отмена, клавиши Esc и т.д. событие OnCanClose не наступает. В обработке события OnCanClose можно произвести дополнительные проверки выбранного пользователем файла и, если по условиям вашей задачи этот выбор недопустим, можно известить об этом пользователя и задать значение false передаваемому в обработчик параметру CanClose. Это не позволит пользователю закрыть диалоговое окно.
Можно также написать обработчики событий OnFolderChange — изменение каталога, OnSelectionChange — изменение имени файла, OnTypeChange — изменение типа файла. В этих обработчиках вы можете предусмотреть какие-то сообщения пользователю.