
- •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)Ввод-вывод файлов
- •Выбор компонентов для групповых операций
- •Установка разделяемых свойств компонентов
- •Изменение размера компонентов
- •Выравнивание компонентов
- •Пример: Создание текстового редактора Проектирование формы приложения
- •Создание обработчиков событий
- •Создание меню
7.8.4 Элементы ActiveX
Спецификация ActiveX является составной частью технологии СОМ. Элемен-
ты ActiveX оформляются в виде файлов .осх, регистрируются в реестре Windows и
затем могут использоваться в программах, написанных на различных языках с ис-
пользованием различных систем (Visual Basic, PowerBuilder, Delphi), а также
в приложениях, работающих с Интернет (см. гл. 12).
Надо сказать, что в любой поставке Windows имеется множество элементов
ActiveX, реализующих различные кнопки, списки, окна редактирования и т.п.
Так что создавать новый элемент ActiveX имеет смысл только в том случае, если
он реализует какие-то специфические функции, требуемые ряду пользователей ва-
шей организации. Причем создавать элемент именно как ActiveX следует только
в тех случаях, если он должен встраиваться в другие приложения, разработанные
не на C-H-Builder. В частности, элементы ActiveX, как будет показано далее, могут
встраиваться в такие офисные приложения Microsoft, как Word, Excel и др. Могут
они использоваться также в составе страниц Web.
Рассмотрим простой пример создания элемента ActiveX. Конечно, реально
надо предварительно разработать свой новый компонент, реализующий требуемые
функции, а затем оформлять его как ActiveX. Создание собственных компонентов
рассмотрено в разд. 8.3. А пока попробуем оформить в виде ActiveX стандартный
компонент C++Builder MonthCalendar (см. разд. 3.3.3). Это будет просто тестовый
пример, так как в составе Windows имеется свой календарь ActiveX. Но забудем об
этом, будем считать, что его нет, а он нужен нам для различных целей, в частно-
сти, для использования в Word.
Закройте текущие проекты, выполнив команду File CloseAII. Теперь выполните
команду File | New | Other и на странице ActiveX выберите пиктограмму ActiveX Control.
Отметим, что возможен и другой вариант начала создания элемента ActiveX: снача-
ла создается пиктограммой ActiveX Library библиотека типов, а затем выбирается пик-
тограмма ActiveX Control. В любом случае перед вами откроется окно, показанное на
рис. 7.16. В выпадающем списке VCL Class Name вы можете выбрать элемент VCL
(стандартный, или созданный вами), который хотите оформить как ActiveX. В на-
шем примере надо выбрать класс TMonthCalendar. В трех окнах, расположенных
ниже списка, автоматически появятся имена файлов, описывающих создаваемый
элемент. Можете при желании изменить их, но вряд ли в этом есть необходимость.
Рис. 7.16
Окно задания характеристик элемента ActiveX VCL Class Name: jTMonlhCalendai [CornCtrls
Hew ActiveX Name: JMonlhCalendorX
Implementation Unit: jMonthCalendatlmpH xpp
EroiectName: JMonthCalendatXControll .cpp
" ActiveX Conliol Options
Г" Make Control Licensed
Г" Include yeision Information
1 ~QK~
Г Include About В ox
492 Глава 7
Индикатор Make Control Licensed обеспечивает генерацию лицензионного файла
.lie. Если вы включите этот индикатор, то вашим элементом ActiveX потребители
смогут пользоваться, только если он включен в переданный им завершенный про-
ект. А использовать элемент в каких-то свих разработках они смогут, только если
приобретут у вас соответствующую лицензию и получат копию файла .lie. Индика-
тор Include Version Information обеспечивает включение в результирующий файл .осх
информации о версии (см. раздел 2.3.5). Индикатор Include About Box обеспечивает
включение в проект дополнительной формы с информацией об элементе и его авто-
рах. Эту форму сможет видеть разработчик, использующий ваш элемент в ка-
ких-то своих разработках.
Заполнив необходимую информацию, щелкните на кнопке ОК. C++Builder
создаст все необходимые файлы, включая библиотеку типов, которая неоднократ-
но рассматривалась в предыдущих разделах. Если требуется, можете что-то в ней
изменить. Если нет — то сохраните сгенерированные файлы и выполните команду
Run | Register ActiveX server, чтобы зарегистрировать ваш элемент в реестре Windows.
Если вы в дальнейшем надумаете снять элемент с регистрации, надо будет выпол-
нить команду Ron | Unregister ActiveX Server.
Все операции, необходимые для создания элемента ActiveX и его регистрации,
выполнены. Как видите, все свелось к нескольким щелчкам мыши. Теперь вы мо-
жете использовать элемент в любых разработках. В качестве примера, давайте по-
пробуем использовать его в программе Word. Это означает, фактически, проверку
вашего компонента в проекте на языке Visual Basic.
Пусть вы хотите создать в Word макрос, который вызывал бы форму, содержа-
щую ваш календарь и три кнопки. При щелчке на первой из них в текущую пози-
цию курсора в документе Word должна заноситься дата, которую вы выбрали в ка-
лендаре. При щелчке на второй кнопке в документ должно заноситься число дней
от текущей даты до даты, выбранной в календаре. А щелчок на третьей кнопке
должен закрывать форму с календарем.
Операции, необходимые для создания подобного макроса, несколько различа-
ются в различных версиях Word. Я буду описывать операции, выполняемые
в Word 2002, включенном в Windows XP. Описание будет кратким, так как рас-
смотрение работы с Word и с языком VBA, конечно, лежит за пределами тематики
данной книги.
Выполните в Word команду Сервис | Макрос | Макросы. В открывшемся окне
введите имя создаваемого макроса (например ≪Календарь≫) и щелкните на кнопке
Создать. Вы попадете в окно Редактора Microsoft Visual Basic (см. рис. 7.17).
Выделите в окне Project вершину шаблона Normal, щелкните правой кнопкой
мыши и выберите во всплывшем меню раздел Insert | UserForm. Появится форма и
панель ToolBox (справа вверху на рис. 7.17) с компонентами, которые можно разме-
щать на форме. Конечно, сначала в этой панели не будет компонента вашего ка-
лендаря.
Щелкните на ToolBox правой кнопкой мыши и выполните команду Additional
Controls. Появится список всех зарегистрированных элементов ActiveX. Включите
индикатор у MonthCalendarX. Соответствующая пиктограмма появится на панели
ToolBox. Разместить компонент на форме. В окне Property можно изменить какие-то
его свойства.
Назовите вашу форму FCalendar (свойство Name формы). Перенесите на фор-
му с панели ToolBox три кнопки, расположите их примерно так, как показано на
рис. 7.17, измените надписи на них (свойство Caption), полезно также задать их
свойства ControlTipText — надписи всплывающих ярлычков, позволяющие поль-
зователю ориентироваться в назначении кнопок формы.
Сделайте поочередно двойные щелчки на кнопках и в появившихся заготов-
ках обработчиков напишите соответствующие операторы языка Visual Basic. В ре-
зультате код процедур будет иметь вид:
Процессы, потоки, распределенные приложения 493
Private Sub CommandButtonl_Click()
Selection = MonthCalendarXl.Date
End Sub
Private Sub CommandButton2_Click()
Selection = MonthCalendarXl.Date - Date
End Sub
Private Sub CommandButton3_Click()
End
End Sub
Сделайте в окне Project двойной щелчок на вершине создаваемого макроса (на
рис. 7.17 я назвал эту вершину ≪MyCalendar≫) и в открывшемся окне заготовки
кода вашего макроса добавьте единственный оператор (см. на рис. 7.17):
FCalendar.Show (modeless)
делающий форму видимой и не модальной (это задается параметром modeless). По-
следнее желательно, чтобы пользователь мог свободно переключаться между ок-
ном документа и формой. Впрочем, если у вас Microsoft Office 97 или младше,
форму нельзя сделать не модальной.
Рис. 7.17
Окно Редактора Microsoft Visual Basic
Сохраните созданный макрос, протестируйте его (кнопка Run Sub/UserForm — де-
вятая справа на рис. 7.17) и закройте редактор Visual Basic. Теперь для облегчения
работы пользователя желательно задать вашему макросу какие-то горячие клави-
ши. Для этого надо выполнить в Word команду Сервис | Настройка, в открывшемся
окне щелкнуть на кнопке Клавиатура, в открывшемся окне в списке Категории вы-
брать раздел Макросы, затем в панели Макросы выбрать ваш макрос Календарь, пе-
рейти в окно Новое сочетание клавиш, нажать желательные клавиши (например,
Orl-Alt-C), щелкнуть на кнопке Назначить и затемна кнопке Закрыть. Все это я изло-
жил скороговоркой, так как думаю, что вы и сами все это прекрасно знаете.
Теперь можете испытать макрос, использующий ваш элемент ActiveX. От-
кройте в Word документ, напишите какой-то текст и нажмите клавиши Ctrl-Alt-C.
Вы увидите спроектированную вами форму (рис. 7.18). Выбирая в календаре дату
и нажимая соответствующую кнопку вы сможете заносить в текущую позицию
курсора выбранную дату или число дней между этой и текущей датой. В некото-