- •Министерство образования и науки
- •Введение 13
- •Глава 1. Язык программирования Delphi 22
- •Глава 2. Среда разработки Delphi 88
- •Глава 3. Работа с базами данных 143
- •Глава 4. Взаимодействие приложений 207
- •Глава 5. Дополнительные возможности 229
- •Except application.Messagebox('приложение будет закрыто', 'ошибка!', 0); 233
- •Глава 8. Лабораторный практикум 289
- •Приложения 333
- •Лабораторные работы
- •Методы структурного программирования
- •Объектно-ориентированное программирование
- •Сравнительный анализ объектно-ориентированных языков программирования
- •Глава 1. Язык программированияDelphi
- •1.1. Типы данных
- •1.1.1. Константы
- •1.1.2. Переменные
- •1.1.3. Простые типы данных
- •1.1.3.1. Целые типы
- •1.1.3.2. Вещественные типы
- •1.1.3.3. Логические типы
- •1.1.3.4. Символьныетипы
- •1.1.3.5. Тип дата ‑ время (tDateTime)
- •1.1.3.6. Перечисляемые типы
- •1.1.3.7. Интервальные типы
- •1.1.3.8. Порядковые типы
- •1.1.4.Структурированные типы данных
- •1.1.4.1. Статические массивы
- •1.1.4.2. Динамические массивы
- •1.1.4.3. Записи
- •1.1.4.4. Множества
- •1.1.5. Типы строк
- •1.1.6. Универсальные типы -Variant
- •1.1.7. Массивы типаVariant
- •1.1.8. Указатели
- •1.1.9. Процедурные типы
- •1.1.10. Процедурные указатели
- •Вопросы для самопроверки и контроля
- •1.2. Операции
- •1.2.1. Арифметические операции
- •1.2.2. Операции присвоения и сравнения
- •1.2.3. Логические операции
- •1.2.4. Логические поразрядные операции
- •1.2.5. Операции со строками
- •1.2.6. Операции над множествами
- •1.2.7. Операции с указателями
- •1.2.8. Порядок вычисления выражений
- •1.2.9. Преобразование типов
- •Вопросы для самопроверки и контроля
- •1.3. Структура и этапы разработки проекта
- •1.3.1. Структура проекта
- •1.3.1.1. Основные типы файлов
- •1.3.1.2. Файлы ресурсов
- •1.3.2. Программа
- •1.3.2.1. Структура программы
- •1.3.2.2. Структура головной программы проекта
- •1.3.3. Подпрограммы
- •1.3.3.1. Типы подпрограмм
- •1.3.3.2. Процедуры и функции, определенные пользователем
- •1.3.4. Модули
- •Interfac e //интерфейсная часть с объявлением типов и процедур
- •Implementation //исполнимая часть с текстами процедур
- •1.3.5. Компилятор
- •1.3.5.1. Общее описание компилятора
- •1.3.5.2. Основные директивы компилятора
- •1.3.5.3. Директивы условной компиляции
- •1.3.6. Этапы разработки проекта
- •1.3.6.5. Выполнение консольного приложения иDos‑программ
- •1.3.7. Отладка
- •1.3.7.1. Максимальный контроль ошибок
- •1.3.7.2. Оптимизация кода программы
- •1.3.7.3. Пошаговое выполнение программы
- •1.3.7.4. Протокол событий
- •1.3.7.5. Просмотр и изменение значений
- •1.3.7.6. Просмотр программного кода
- •1.3.7.7. Отладка внешних процессов
- •1.3.7.8. Отладка в машинных кодах
- •1.3.7.9. Инспектор отладки
- •1.3.8. Редактор кода
- •Вопросы для самопроверки и контроля
- •1.4. Операторы
- •1.4.1.Общие сведения
- •1.4.2.Оператор присваивания
- •Примеранализа односимвольного ответа пользователя:
- •1.4.8.Операторы цикла
- •1.4.8.1. Счетный цикл For
- •1.4.8.2. Цикл Repeat‑ Until
- •1.4.8.3. ЦиклWhile
- •1.4.9. Оператор присоединения имени ‑With
- •1.4.10. Вставка команд ассемблера
- •Вопросы для самопроверки и контроля
- •1.5. Объектно‑ориентированное программирование
- •1.5.1. Определение
- •1.5.2. Объявление класса и объекта
- •1.5.3. Динамическое создание и удаление объекта
- •1.5.4. Динамическое конструирование объектов
- •1.5.5. Свойства
- •1.5.6. Методы
- •1.5.7. Конструкторы и деструкторы
- •1.5.8. События
- •Вопросы для самопроверки и контроля
- •1.6. Обработка исключительных ситуаций
- •1.6.1. Исключения
- •1.6.2. Иерархия классов исключений
- •1.6.3. Свойства и конструкторы исключений
- •1.6.4. Блок зачисткиTry‑Finally‑End
- •1.6.5. Зачистка в разделе модуляFinalization
- •1.6.6. Блок обработки исключенийTry‑Except‑End
- •1.6.7. Искусственная генерация исключений
- •1.6.8. ИсключенияEAbortи функцияAbort
- •1.6.9. Создание нового типа исключения
- •Вопросы для самопроверки и контроля
- •1.7.2.2. Функция форматированияFormat
- •1.7.3. Преобразование дат и времени
- •1.7.4. Обработка строк с нулевым символом в конце
- •1.7.5. Обработка строк без нулевого символа в конце
- •1.7.6.Диалоговые окна ввода и вывода сообщений
- •1.7.7.Воспроизведение звуков
- •1.7.8. Запуск из приложения внешних программ
- •1.7.9.Специальные процедуры и функции
- •1.7.10.СообщенияWindows
- •Вопросы для самопроверки и контроля
- •1.8. Файлы
- •1.8.1. Типы файлов
- •1.8.2. Файлы Паскаля
- •1.8.2.1. Любые файлы
- •1.8.2.2. Типизированные файлы
- •1.8.2.3. Текстовые файлы
- •1.8.2.4. Печать текста
- •1.8.2.5. Нетипизированные файлы
- •1.8.3. Объектный подход к файлам
- •1.8.4. ФайлыWindows
- •1.8.5. Обслуживание внешних файлов и каталогов
- •Вопросы для самопроверки и контроля
- •1.9. Динамические структуры данных
- •1.9.1.Общие сведения
- •1.9.2. Процедуры и функции динамического распределения памяти
- •1.9.3. Формирование стека
- •1.9.4. Формирование очереди
- •Вопросы для самопроверки и контроля
- •Глава 2. Среда разработкиDelphi
- •2.1. Общие сведения
- •2.1.1. Окна
- •2.1.2. Панели компонентов и их настройка
- •2.1.3. Архив объектов (репозиторий)
- •2.1.4. Справочная система
- •2.1.5. Характеристика компонентов
- •2.1.6. Размещение и настройка компонентов на форме
- •2.1.7. Свойства
- •2.1.7.1. Имя объекта
- •2.1.7.2. Внешний вид объекта
- •2.1.7.3. Размеры объекта
- •2.1.7.4. Местоположение объекта
- •2.1.7.5. Перемещение объекта
- •2.1.7.6. Доступ к объекту
- •2.1.7.7. Значение объекта
- •2.1.7.8. Меню
- •2.1.7.9. Вид указателя мыши
- •2.1.7.10. Справочная система
- •2.1.7.11. Наследование родительских свойств
- •2.1.8. События
- •2.1.8.1. Процедуры обработки событий
- •2.1.8.2. Мышь
- •2.1.8.3. Клавиатура
- •2.1.8.4. Перемещение объектов
- •2.1.8.5. Другие события
- •2.1.9. Методы
- •2.2. Глобальные объекты
- •2.2.1. Формы (Form)
- •2.2.1.1. Свойства
- •2.2.1.2. Методы
- •2.2.1.3. События
- •2.2.1.4. Некоторые приемы работы с формами
- •2.2.2. Приложение (Application)
- •2.2.2.1. Свойства
- •2.2.2.2. Методы
- •2.2.2.3. События
- •2.2.3. Экран (Screen)
- •2.2.3.1. Свойства
- •2.2.3.2. Методы
- •2.2.3.3. События
- •2.2.4. Принтер (Printer)
- •2.2.4.1. Свойства
- •2.2.4.2. Методы
- •2.2.5. Буфер обменаWindows(Clipboard)
- •2.2.5.1. Свойства
- •2.2.5.2. Методы
- •2.2.6. Списки (tList)
- •2.2.6.1. Свойства
- •2.2.6.2. Методы
- •2.2.6.3. Схема создания списка
- •2.2.7.Список строк и объектов (tStringList)
- •2.2.7.1. Свойства
- •2.2.7.2. События
- •2.2.7.3. Методы
- •2.2.8. Графика
- •2.2.8.1. Шрифт (tFont)
- •2.2.8.2. Перо (tPen)
- •2.2.8.3. Кисть (tBrush)
- •2.2.8.4. Канва, ее свойства и графические методы (tCanvas)
- •2.2.8.5. Изображение (tGraphic,tPicture)
- •2.2.8.6. Анимация
- •2.3. Основные компоненты
- •2.3.1. Вывод текста
- •2.3.1.1. Текстовая надпись (Label)
- •2.3.1.2. Статическая текстовая надпись (StaticText)
- •2.3.1.3. Строка состояния (StatusBar)
- •2.3.2. Ввод и редактирование данных
- •2.3.2.1. Одностроковый текст (Edit)
- •2.3.2.2. Одностроковый текст с маской (MaskEdit)
- •2.3.2.3. Многостроковый текст (Memo)
- •2.3.2.4. Таблица строк (StringGrid)
- •2.3.2.5. Рисуемая таблица (DrawGrid)
- •2.3.2.6. Многострочный редактор текста в форматеRtf(RichEdit)
- •2.3.2.7. Дата и время (DateTimePicker)
- •2.3.3. Списки
- •2.3.3.1. Простой список (ListBox)
- •2.3.3.2. Комбинированный список (ComboBox)
- •2.3.4. Командные кнопки
- •2.3.4.1. Стандартная кнопка (Button)
- •2.3.4.2. Кнопка с рисунком (BitBtn)
- •2.3.4.3. Кнопка быстрого доступа (SpeedButton)
- •2.3.4.4. Независимый переключатель (CheckBox)
- •2.3.4.5. Зависимый переключатель (RadioButton)
- •2.3.5.3. Группа независимых переключателей (CheckListBox)
- •2.3.5.4. Панель (Panel)
- •2.3.5.5. Область прокрутки (ScrollBox)
- •2.3.5.6. Фрейм (Frame)
- •2.3.5.7. Разделители контейнеров (Splitter)
- •2.3.5.8. Прокрутка страниц (PageScroller)
- •2.3.6. Счетчики
- •2.3.6.1. Полоса прокрутки ‑ счетчик (ScrollBar)
- •2.3.6.2. Ползунок (TrackBar)
- •2.3.6.3. Счетчик (UpDown)
- •2.3.6.4. Редактируемое поле со счетчиком (SpinEdit)
- •2.3.6.5. Индикаторы процесса выполнения программы (ProgressBar,Gauge)
- •2.3.7. Графика
- •2.3.7.1. Изображение (Image)
- •2.3.7.2. Список изображений (ImageList)
- •2.3.7.3. Геометрическая фигура (Shape)
- •2.3.7.4. Фаска (Bevel)
- •2.3.7.5. Окно рисования (PaintBox)
- •2.3.7.6. Простая диаграмма (Gauge)
- •2.3.7.7. Диаграмма (Chart)
- •2.3.8. Меню
- •2.3.8.1. Главное меню (MainMenu)
- •2.3.8.2. Контекстное меню (PopupMenu)
- •2.3.8.3. Программная настройка меню
- •2.3.8.4. Горячие клавиши (HotKey)
- •2.3.8.5. Синхронизация объектов (ActionList)
- •2.3.8.6. События приложения (ApplicationEvents)
- •2.3.9. Структурированные компоненты
- •2.3.9.1. Панели инструментов (ToolBar)
- •2.3.9.2. Панель управления (ControlBar)
- •2.3.9.3. Расширенная панель управления (CoolBar)
- •2.3.9.4. Набор страниц (PageControl)
- •2.3.9.5. Переключаемые страницы (TabControl)
- •2.3.9.6. Список элементов (ListView)
- •2.3.9.7. Дерево элементов (TreeView)
- •2.3.10. Системные компоненты
- •2.3.10.1. Таймер (Timer)
- •2.3.10.2. Мультимедийный проигрыватель (MediaPlayer)
- •2.3.10.3. АнимацияAvi(Animation)
- •2.3.11. Стандартные диалоги
- •2.3.11.1. Открытие и сохранение файла (OpenDialog,SaveDialog)
- •2.3.11.2. Открытие и сохранение графического файла (OpenPictureDialog,SavePictureDialog)
- •2.3.11.3. Выбор шрифта (FontDialog)
- •2.3.11.4. Выбор цвета (ColorDialog)
- •2.3.11.5. Настройка печати (PrintDialog)
- •2.3.11.6. Настройка принтера (PrinterSetupDialog)
- •2.3.11.7. Поиск (FindDialog)
- •2.3.11.8. Поиск и замена (ReplaceDialog)
- •2.3.11.9. Выбор диска (DriveComboBox)
- •2.3.11.10. Выбор каталога (DirectoryListBox)
- •Вопросы для самопроверки и контроля
- •Глава 3. Работа с базами данных
- •3.1. Основные понятия
- •3.2. Создание базы данных
- •3.3. Создание модуля данных
- •3.4. Компоненты доступа к данным (DataAccess)
- •3.4.1. Таблица (Table)
- •3.4.2. Источник данных (DataSource)
- •3.4.3. Описание и доступ к полям записи базы данных
- •3.4.4. Компоненты работы с базой (DataControl)
- •3.5. Установка связей между таблицами
- •3.6. Установка полей соответствия (Lookup)
- •3.7. Создание запросов
- •3.7.1. Визуальные средства
- •3.7.2. Командные средстваSql
- •3.8. Основные операции с записями
- •3.9. Мастер форм
- •3.10. Формирование отчетов средствамиQuickReports
- •3.10.1. Быстрый отчет (QuickRep)
- •3.10.2. Компоненты отчета
- •3.10.3. Простой отчет
- •3.10.4. Отчет из нескольких таблиц с группировкой данных и итогами
- •3.10.5. Отчет типа «мастер/детальный»
- •3.10.6. Составной отчет
- •3.11. Формирование отчетов средствамиRaveReports
- •3.11.1. Компоненты отчета
- •3.11.2. Конструктор отчетов
- •3.11.3. Компоненты панели инструментов
- •3.11.4. Отчет из нескольких таблиц с группировкой данных и итогами
- •3.12. Формирование отчетов средствамиFastReports
- •3.12.1. Компоненты отчета
- •3.12.2. Конструктор отчетов
- •3.12.3. Компоненты панели инструментов
- •3.12.4. Отчет из нескольких таблиц с группировкой данных и итогами
- •3.13. Анализ данныхcредствами многомерного кубаDecisionCube
- •3.14. Клиент‑серверные субд
- •3.15. Доступ к данным по технологииAdo
- •Вопросы для самопроверки и контроля
- •Глава 4. Взаимодействие приложений
- •4.1. Создание динамически подключаемых библиотек (dll)
- •4.2. Создание новых компонентов
- •4.3. Создание и установкаActiveX‑элементов
- •4.4. Создание и установка пакетов
- •4.5. Использование пакетов
- •4.6. Технология связывания и внедрения объектов (ole)
- •4.7. Многопоточные приложения
- •4.8. Технология применения объектовCom,dcom
- •4.9. Распределенные двухуровневые клиент‑серверные приложения
- •4.10.2. Создание сервера приложений доступа к базе данных
- •4.10.3. Связь с сервером приложений по протоколуDcom
- •4.10.4. Связь с сервером приложений по протоколу ИнтернетTcp/ip
- •4.10.5. Связь с сервером приложений по протоколуHttp
- •4.10.6. Основы разработки приложений Internet
- •Глава 5. Дополнительные возможности
- •5.1. Создание справочной системы
- •5.2. Обзор остальных возможностей
- •5.3. Формирование отчетов, диаграмм и анализа данных пакетомCrystalReports
- •5.4. Работа сExcel
- •5.5. Работа с Word
- •Except application.Messagebox('приложение будет закрыто', 'ошибка!', 0);
- •5.6. Основные отличия новых версий Delphi
- •6.1. Лексические структуры языка
- •6.1.1. Элементы
- •6.1.2. Константы
- •6.1.3. Типы данных
- •Простейшие скалярные стандартные типы
- •6.1.4. Массивы
- •6.1.5. Структуры (записи)
- •6.1.6. Объединенияunion
- •6.2.3. Директива #define
- •6.2.4. Функция вывод на терминал -Printf
- •6.2.5. Функция ввод с клавиатуры -Scanf
- •6.2.6. ФункцияMainв консольных приложениях
- •6.2.7. Функции
- •Int main(int argc,char **argv) // основная функция
- •Int main(int argc, char **argv) // основная функция
- •6.2.8. Классы памяти
- •6.2.8.1. Автоматические переменные
- •6.2.8.2. Регистровые переменные
- •6.2.8.3. Статические переменные и функции
- •6.2.8.4. Внешние переменные
- •6.2.9. Операции
- •6.2.9.1.Арифметические операции
- •6.2.9.2.Операции отношения
- •6.2.9.3. Логические операции
- •6.2.9.4.Операции присваивания
- •6.2.10. Операторы
- •6.2.10.6.Оператор безусловного перехода ‑goto
- •6.2.10.7. Цикл с предусловием ‑while
- •Int main(int argc, char **argv) // основная функция
- •6.2.10.9.Итерационный цикл ‑For
- •Int main(int argc, char **argv) { // основная функция
- •Int main(int argc, char **argv) { // основная функция
- •Int main(int argc, char **argv) { // основная функция
- •Void bubble_sort( float a [ ], int s ) { // функция сортировки массива
- •6.2.10.10. Пустой оператор
- •6.3. Указатели
- •6.4. Функции, методы и макросы
- •6.4.1. Математика
- •6.4.2. Обработка статистических данных
- •6.4.3. Взаимное преобразование чисел и строк типа char
- •Long double _strtold(const char *s, char**endptr) ‑ строки s в действительное число.
- •Char *gcvt(double value, int ndec, char *buf) ‑ value в строку buf с числом цифр ndec.
- •6.4.4. Взаимное преобразование чисел и строк типа AnsiString
- •6.4.5. Преобразования дат и времени
- •6.4.6. Методы обработки строк типа AnsiString
- •6.4.7. Функции обработки строк типа AnsiString
- •6.4.8. Макросы обработки символов
- •6.4.9. Обработка строк с нулевым символом в конце
- •6.4.10. Управление каталогами и файлами на дисках
- •6.4.11.Диалоговые окна ввода и вывода сообщений
- •6.4.12.Воспроизведение звуков
- •6.4.13. Управление текущим процессом
- •6.4.14. Запуск из приложения внешних программ
- •6.5. Работа с файлами
- •6.5.1. Файлы в с
- •Int main(int argc, char **argv) // основная функция
- •Void __fastcall tForm1::Button1Click(tObject *Sender) // процедура
- •6.6. Объектно‑ориентированное программирование
- •6.6.1. Создание классов и объектов
- •6.6.2. Виртуальные методы
- •6.6.3. Дружественные функции
- •6.6.4. Шаблоны
- •6.6.5. Пространство имен
- •6.6.6. Явные объявления конструкторов
- •6.6.7. Непостоянные объявления
- •6.6.8. Быстрый вызов функций -_fastcall
- •6.6.9. Блок обработки исключенийtry‑catch-_finally
- •Вопросы для самопроверки и контроля
- •7.1. Создание консольного приложения
- •7.2. Основные элементы управления
- •7.3. Списки
- •Void cPrimDlg::OnAdd() //обработка кнопки «Добавить»
- •Void cPrimDlg::OnDelete()//обработка кнопки «Удалить»
- •Void cPrimDlg::OnDblclkList1() //обработка двойного щелчка по списку
- •7.4. Линейные регуляторы и индикаторы
- •Void cPrimDlg::OnCheck2()//обработка переключателя «Сброс»
- •Var // раздел переменных модуля Unit1
- •8.1.2. Секундомер (Delphi)
- •Var // раздел переменных модуля Unit1
- •8.1.3. Бегущая строка (Delphi)
- •8.1.4. Рисование на экране (Delphi)
- •Var AllowChange: Boolean); // изменение счетчика UpDown1
- •8.1.5. Тестирование по арифметике (Delphi)
- •Var // раздел переменных модуля Unit1
- •8.1.6. Игра «Морской бой» (Delphi)
- •Var // раздел переменных модуля Unit1
- •8.1.7. Вывод диаграммы (Delphi)
- •Var // раздел переменных модуля Unit1
- •8.1.8. Работа компонентов панелейStandard,AdditionalиWin32 (Delphi)
- •Void __fastcall tForm1::Button1Click(tObject *Sender) / /кнопка «Выход»
- •Void __fastcall tForm1::Button3Click(tObject *Sender) // кнопка «Загадать»
- •Void __fastcall tForm1::Button4Click(tObject *Sender) //кн.»Назвать слово»
- •Void __fastcall tForm1::Button5Click(tObject *Sender) // Вращать барабан
- •Void __fastcall tForm1::Button6Click(tObject *Sender) //кн. «Подтвердите»
- •Void __fastcall tForm2::Button1Click(tObject *Sender) //кн. «Подтвердите»
- •Void __fastcall tForm3::Button1Click(tObject *Sender) // кн. «Сохранить»
- •Void cPerevozkaPredmetovDlg::OnButton2() //кнопка «Очистить»
- •Void cPerevozkaPredmetovDlg::OnButton3() //кнопка «Перевезти»
- •8.2. Задачи для программирования
- •8.2.1. Числовые типы, оператор присваивания
- •8.2.2. Алгоритмы линейной структуры
- •8.2.3. Алгоритмы разветвляющей структуры
- •8.2.3. Алгоритмы циклической структуры
- •8.2.5. Алгоритмы работы с рядами
- •8.2.6. Алгоритмы работы с массивами
- •8.2.7. Обработка символьных данных
- •8.2.8. Организация подпрограмм
- •8.2.9. Работа с файлами
- •8.2.10. Работа с формами и диаграммами
- •8.2.11. Контрольные работы
- •1. Учет семейного бюджета.
- •28. Учет успеваемости студентов.
- •3. Работа с базами данных
- •П р и л о ж е н и е 2. Вопросы для экзаменационных билетов
- •Тематический указатель
- •Библиографический список
- •Учебное издание
8.1.8. Работа компонентов панелейStandard,AdditionalиWin32 (Delphi)
Создадим приложение в Delphi, в котором используются большинство компонентов панелейStandard,AdditionalиWin32. Приложение будет состоять из трех форм. На каждой форме будут в основном размещены компоненты одной из панелей.
Компоненты панелиStandardразместим на формеForm1 (Caption=’ПанельStandard’,Position=poScreenCenter) (рис.8.1.8.1).
Рис. 8.1.8.1. Вид формы с компонентами панели Standard
Разместим панель Panel1(демонстрация панели компонентовStandard) в верхней части формы. Разместим меткуLabel1(имя), полеEdit1(Text=’’) и компонентыMainMenu1,PopupMenu1 (AutoPopup=True). Под полемEdit1 разместим многостроковое полеMemo1(WordWrap=True,WantReturns=True) (п. 2.3.2.3). Щелкнем по кнопке с троеточием свойстваLinesи введем четыре пустые строки. Разместим компонентыRadioGroup1(Цвета фона),Scrollbar1(Min=0,Max=3,LargeChange=1,SmallChange=1),ComboBox1(Text=’ТекстComboBox’, введем наименования выбираемых цветов в значение свойстваItems(рис.8.1.8.1)) иListBox1(введем три строки в значение свойстваItems(рис.8.1.8.1)). Дважды щелкнем по компонентуRadioGroup1и введем текст процедуры обработки событияOnClick:
procedure TForm1.RadioGroup1Click(Sender: TObject); // выбор цвета
begin if RadioGroup1.ItemIndex=0 Then Form1.Color:=clSilver; // серый
if RadioGroup1.ItemIndex=1 Then Form1.Color:=clBlue; // голубой
if RadioGroup1.ItemIndex=2 Then Form1.Color:=clYellow; // желтый
if RadioGroup1.ItemIndex=3 Then Form1.Color:=clRed; // красный
end;
Cоставим процедуру обработки событияOnChangeизменения значения компонентаScrollBar1:
procedure TForm1.ScrollBar1Change(Sender:TObject); //изменение цвета begin RadioGroup1.ItemIndex:= ScrollBar1.Position; end;
Разместим компонентGroupBox1(Caption=’Параметры’). На эту панель разместимRadioButton1(Белый фонMemo),RadioButton2(Голубой фонMemo),CheckBox1(Курсив),CheckBox2(Зеленый). Добавим кнопки:Button1(Шрифт),Button2(Старт), Button3(Additional),Button4(Выход) и соответсвующие процедуры:
procedure TForm1.Button1Click(Sender: TObject); // кнопка «Шрифт»
begin if CheckBox1.State=cbChecked then Form1.Font.Style:=[fsItalic]
else Form1.Font.Style:=[];
if CheckBox2.State=cbChecked then Form1.Font.Color:=clGreen // зеленый
else Form1.Font.Color:=clBlack; // черный цвет шрифта
end;
procedure TForm1.Button2Click(Sender: TObject); // кнопка «Старт»
beginMemo1.Clear; // очистить содержимоеMemo1
Memo1.Lines.Add(Edit1.Text); // значение Edit1.Text добавляется в Memo1
Memo1.Lines.Add(ComboBox1.Text); // ComboBox1.Text добав. в Memo1
// Скопировать в Memoномер выбранного текста из окнаListBox
Memo1.Lines.Add('Строка ListBox #' + IntToStr(ListBox1.ItemIndex+1));
if RadioButton1.Checked then Memo1.Color:=clWhite; // белый цвет фона
if RadioButton2.Checked then Memo1.Color:=clAqua; // голубой цвет фона
end;
procedure TForm1.Button4Click(Sender: TObject); // кнопка «Выход»
beginClose;end;
Щелкнем дважды на компоненте MainMenu1и введем тексты опции меню: «Файл» (из строки «Выход»и для событияOnClickвыберем процедуруButton4Click), «Справка» из двух строк: «Справка» и «О программе»).
Составим процедуры обработки пунктов меню «Справка»:
procedure TForm1.N4Click(Sender: TObject); // пункт «Справка»
beginShowMessage('Демонстрация возможностейMainMenu');end;
procedure TForm1.N6Click(Sender: TObject); // пункт «О программе»
beginShowMessage(‘Демонстрация возможностей компонентов');end;
Щелкнем дважды на компоненте PopupMenu1и введем тексты опции меню «Шрифт», «Старт». Для свойстваOnClickопределим значенияButton1Click,Button2Clickсоответственно (вызов этих процедур). Для формыForm1 установим свойствоPopupMenu=PopupMenu1.
Теперь можно проверить работу программы на первой форме.
Компоненты панелиAdditionalразместим на формеForm2 (Caption=’ПанельAdditional’,Position=poScreenCenter) (рис.8.1.8.2).
Рис. 8.1.8.2. Вид формы с компонентами панели Additional
Составим процедуру обработки кнопки «Additional» на первой форме:
procedure TForm1.Button3Click(Sender: TObject); // кнопка «Additional»
begin Form1.Hide; Form2.Show; end;// закрытие Form1 и вызов Form2
В правом нижнем углу разместим рамкуBevel1для визуального выделения кнопок. Разместим кнопкуButton1(заполнить таблицу) и графические кнопки:BitBtn1(Caption=’Standard’, Kind=bkCustom,Glyph=’C:\BorlandShared\Images\Buttons\arrow1l’),BitBtn2(Caption=’Win32’, Kind= bkCustom,Glyph=’C:\BorlandShared\Images\Buttons\arrow1r’),BitBtn3(Caption=’Выход’, Kind= bkClose).
Составим процедуры обработки нажатия кнопок
procedure TForm2.BitBtn1Click(Sender: TObject); // кнопка «Standard»
begin Form1.Show; Form2.Hide; end;
procedure TForm2.BitBtn3Click(Sender: TObject); // кнопка «Выход»
beginform2.Close;end;
Для корректной работы кнопки «Выход» составив процедуру:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin application.Terminate; end; // завершение работы приложения
Разместим компонент Panel1 и на нем разместим две быстрые кнопки SpeedButton1 (GroupIndex=1, NumGlyphs=4), SpeedButton2 (GroupIndex=1, NumGlyphs=2 Visible=False, Glyph=’D:\Borland Shared\ Images\Buttons\arrow1u’, Hint=’Быстрая кнопка с часиками’, ShowHint=True). Для кнопкиSpeedButton1можно нарисовать изображение высотой 16 и шириной 64 пикселей из четырех квадратных картинок размером 1616 редактором изображений, который вызывается командойTools/Image Editor и сохранить изображение в файле. Это имя нужно указать в свойствеGlyphэтой кнопки. Мы воспользуемся готовым изображением двух картинок из файлаC:\BorlandShared\Images\Buttons\Clock’ и размножим это изображение для получения четырех картинок и сохраним под именемClockв папке с данным приложением. Добавим на панель компонентShape1(Shape=stEllipse,Pen/Color=clGreen).
Справа от панели разместим компонент Image1 (Picture=’D:\Borland Shared\Images\Icons\technlgy).
Укажем процедуры обработки быстрых кнопок:
procedure TForm2.SpeedButton1Click(Sender: TObject); // SpeedButton1
begin If SpeedButton1.Down then begin Image1.Visible:=False;
Shape1.Brush.Color:=clRed; SpeedButton2.Visible:=True; end;
end;
procedure TForm2.SpeedButton2Click(Sender: TObject); // SpeedButton2
begin If SpeedButton2.Down then begin Image1.Visible:=True;
Shape1.Brush.Color:=clLime; end;
end;
Разместим компонент StaticText1 (Номер телефона) со свойством BorderStyle=sbsSingle, а под ним расположим компонент MaskEdit1 (EditMask=Phone). Разместим компонент StringGrid1 (RowCount=3, ColCount=3, FixedCols=0, FixedRows=0).
Укажем процедуру обработки кнопки заполнения таблицы.
procedure TForm2.Button1Click(Sender: TObject); // заполнить таблицу
var x,y:Integer;
begin with StringGrid1 do For x:=0 to ColCount -1 do
For y:=0 to RowCount -1 do Cells[x,y]:=IntToStr(x)+','+IntToStr(y);
end;
Разместим панель с прокруткой ScrollBox1. На этой панели разместим кнопкуBitBtn4(Name=«Справка»,Kind=bkHelp) и панельPanel2(Панель вScrollBox). Укажем процедуру обработки кнопкиBitBtn4 (Справка):
procedure TForm2.BitBtn4Click(Sender: TObject); // кнопка «Справка»
beginShowMessage('Проверка кнопки «Справка» вScrollBox');end;
Присоединим новый модуль Unit2 к первому модулю командойFile/ User Unit. Теперь можно проверить работу программы и на второй форме.
Компоненты панели Win32разместим на формеForm3 (Caption=’ПанельWin32’,Position=poScreenCenter) (рис.8.1.8.3).
Составим процедуру обработки кнопки «Win32» на второй форме:
procedure TForm2.BitBtn2Click(Sender: TObject); // кнопка «Win32»
begin Form2.Hide; Form3.show; end;
Рис. 8.1.8.2. Вид формы с компонентами панелиWin32
Разместим компоненты: Timer1(Interval=1000),OpenDialog1,ProgressBar1 (Min=0,Max=1,Step=1),TrackBar1(Min=0,Max=10,TickMarks=tmBottomRight,Frequency=1),TabControl1(TabOrder=3,TabPosition=tpTop, имена страниц задайте в строках свойстваTabs),Panel1(размещается на компонентеTabControl1 со свойствами:Caption=«Стр. 1»,Alignment=taCenter),Panel2,Label1(Просмотр дерева),Label2(Выбор имени файла),Edit1, кнопкиButton1(...),Button2(Standard),Button3(Выход),TreeView1(строки узлов дерева зададим редактором значения свойстваItems). Составим соответствующие процедуры обработки событий.
procedure TForm3.TrackBar1Change(Sender:TObject); // измен. TrackBar1
begin ProgressBar1.Position:=TrackBar1.Position; end;
procedure TForm3.Timer1Timer(Sender: TObject); // таймер
begin Panel2.Caption:=TimeToStr(Time); { вывод текущего времени}end;
procedure TForm3.TabControl1Change(Sender:TObject);// изм. TabControl1
begin if TabControl1.TabIndex=0 then Panel1.Caption:='Стр.=1';
if TabControl1.TabIndex=1 then Panel1.Caption:='Стр.=2 ';
if TabControl1.TabIndex=2 then Panel1.Caption:='Стр.=3'; end;
procedure TForm3.Button1Click(Sender: TObject); // кнопка «...»
begin OpenDialog1.FileName:='*.*'; // вывод всех файлов
if OpenDialog1.Execute then Edit1.Text:=OpenDialog1.FileName {выбор}end;
procedure TForm3.Button2Click(Sender: TObject); // кнопка «Standard»
begin form2.show; end;
procedure TForm3.Button3Click(Sender: TObject); // кнопка «Выход»
begin form1.Close; end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin Application.Terminate; end; // корректное завершение работы
Присоединим новый модуль Unit3 к первому модулю командойFile/ Use Unit. Теперь можно проверить работу программы на всех формах.
8.1.9. Игра «Поле чудес» (Delphi,C++Builder)
В игре принимают участие три человека: двое игроков и ведущий (авторы программы: А. Влахнова и E. Петриченко).
Сначала игрок вращает барабан; после остановки барабана, если не выпал сектор Переход хода, в соответствующее поле вводит букву и нажимает кнопкуПодтвердите (рис. 8.1.9.1). Если данной буквы в слове нет, ход передается другому игроку. Так продолжается до тех пор, пока один из игроков не решит назвать слово или пока не угадает его по буквам.
При нажатии на кнопку Назвать словопоявляется поле ввода слова. После ввода слова надо подтвердить ввод.
В начале игры ведущий загадывает слово (рис. 8.1.9.2), предварительно введя пароль (текущую дату) (рис. 8.1.9.3).
Рис. 8.1.9.1. Вид формы игры «Поле чудес»
Рис. 8.1.9.2. Форма «Загадать слово» Рис. 8.1.9.3. Форма «Пароль»
На форме Поле Чудес(Form1) разместим следующие компоненты:Label1(caption=’’,AutoSize=false, WordWrap=true);Label2 (caption=’Буква’,visible=false);Label3(caption=’ ’);Label4 (caption=’Игрок1, Ваш ход’;visible=false);Label5 (caption=’Игрок1, Ваш выигрыш - ’;visible=false);Label6(caption=’Игрок2, Ваш выигрыш - ’;visible=false); кнопки:Button1 (caption=’Выход’),Button2 (caption=’Подтвердите’,visible=false),Button3 (caption=’Загадать’),Button4 (caption= ’Назвать слово',visible=false),Button5 (caption=’Вращать барабан’, visible=false),Button6 (caption=’Подтвердите’,visible=false); полеEdit1 для ввода буквы (maxlengh=1;visible=false); полеEdit2для ввода слова (visible=false);Image1 (стрелка); 10 компонентовStaticText (visible=false), в которых будут появляться угаданные буквы;Chart1(на закладкеSeries1:Rotation=0; на закладкеLegend: TextStyle=Plain;LegendStyle=SeriesValues; остальные параметры настройте по своему усмотрению).
На форме Пароль(Form2) разместим следующие компоненты:Label1(caption=’Введите пароль’),Edit1(PasswordChar=’*’),Button1(caption=’Подтвердите’).
На форме Загадать слово(Form3) разместим компоненты:Memo1(Lines=’’),Edit1(caption=’’),Button1(caption=’Сохранить’),Label1(caption=’Вопрос’),Label2(caption=‘Слово*’),Label3 (caption=’* не более 10 букв’).
Тексты процедур программы для Delphi
Процедуры формы Form1 (модуль Unit1)
var Form1: TForm1; f,b,p,s,e: string; z,c,i,k,y,x,t,a,g,w,u: integer; //объявления
procedure TForm1.Button1Click(Sender: TObject); // кнопка «Выход»
begin close; end;
procedure TForm1.Button3Click(Sender: TObject); // кнопка «Загадать»
begin Form2.Show; //показ формы для ввода пароля
Form1.Visible:=false; //скрытие формы Поле Чудес
Button3.Visible:=false; //скрытие кнопки «Загадать»
Button4.Visible:=true; //визуализация кнопки «Назвать слово «
Button5.Visible:=true; // визуализация кнопки «Вращать барабан»
Button6.Visible:=true; // визуализация кнопки «Подтвердите»
Label2.Visible:=true; //становятся видимыми надписи
Label4.Visible:=true;
Label5.Visible:=true; Label5.Caption:=Label5.Caption+'0';
Label6.Visible:=true; Label6.Caption:=Label6.Caption+'0';
Edit1.Visible:=true; //визуализация поля для ввода буквы
Edit1.Enabled:=false; //и его блокировка
end;
procedure TForm1.Button4Click(Sender: TObject);//кнопка»Назвать слово» begin Edit2.Visible:=true; //делает видимым поле для ввода слова
Edit2.SetFocus; //и передает ему фокус
Button2.Visible:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button5.Enabled:=false; //блокировка кнопки Вращать барабан
Randomize;z:=Random(100) ; //выбирается произвольное число из 100
i:=i+1; //в переменной считается количество поворотов
If i<z then
begin Series1.RotationAngle:=Series1.RotationAngle+5 ; //поворот диаграммы
t:=t+5;
end //запоминание угла поворота
else begin
case g of // переменная g показывает, кто сделал ход
1: begin // проверяет, какой сектор выпал и производит
case t of // соответствующие действия
316..359: begin Label4.Caption:='Игрок 2, Ваш ход' ;
Button5.Enabled:=true; Edit1.Enabled:=false; i:=-1; end;
// переменная i – это флаг, указывающий на то, что выпал
// сектор «Переход хода» и не надо суммировать очки
271..315: x:=x*2; 226..270: x:=x*4; 181..225: x:=x+500;
136..180: x:=x+750; 91..135: x:=x+100; 46..90: x:=x+250;
0..45: x:=x+1000;
end; if i<>-1 then
begin e:=inttostr(x); Label5.Caption:='Игрок1, Ваш выигрыш - '+e;
//перевод количества набранных очков в строку для вывода ее на форму
end;
end;
2: begin
case t of
316..359: begin Edit1.Enabled:=false;
Label4.Caption:='Игрок 1, Ваш ход'; Button5.Enabled:=true; i:=-1; end;
271..315: y:=y*2; 226..270: y:=y*4; 181..225: y:=y+500;
136..180: y:=y+750; 91..135: y:=y+100; 46..90: y:=y+250;
0..45: y:=y+1000;
end;
if i<>-1 then
begin e:=inttostr(y);Label6.Caption:='Игрок2, Ваш выигрыш - '+e; end;
end;
end; Timer1.Enabled:=false; // блокировка таймера
end;
Series1.Clear; // удаление диаграммы
With Series1 do
begin add(10,'100 очков',clWhite); // перерисовывает
add(10,'750 очков',clRed); // диаграмму, повернув ее на 5 град.
add(10,'1000 очков',clGreen); add(10,'250 очков',clYellow);
add(10,'*2',clBlue); add(10,'ПЕРЕХОД ХОДА',clSilver);
add(10,'500 очков',clFuchsia); add(10,'*4',clLime);
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin Button5.Enabled:=false; Button6.enabled:=true;
// блокировка кнопок "Вращать барабан" и «Подтвердите выбор»
end;
procedure TForm1.Button5Click(Sender:TObject);//кноп. «Вращать барабан»
begin if Label4.Caption='Игрок 1, Ваш ход'
then g:=1 else g:=2; // запоминает, кто из игроков делает ход
Button4.Enabled:=true; Edit1.Enabled:=true;
Edit1.SetFocus; // устанавливает курсор в поле для ввода буквы
Timer1.Enabled:=true; // делает активным таймер
Edit1.Text:=''; // очищает поле ввода буквы
end;
procedure TForm1.Button2Click(Sender: TObject); //кнопка «Подтвердите»
begin Edit2.Visible:=false; // делает невидимым поле для ввода слова
Edit1.Enabled:=true; // разблокировка объектов
s:=Edit2.Text; // запоминается введенное слово
i:= AnsiCompareText(f,s); // сравнение загаданного и введенного слов
if i=0 then // действия при вводе игроком верного ответа
begin Label3.Caption:='ВЫ УГАДАЛИ !!!'; Edit1.enabled:=false;
Label4.Caption:=''; Button5.Enabled:=false; Button2.Enabled:=false;
end
else if a=0 then begin // a=0, если еще никто не пытался назвать слово
Button4.Enabled:=true;
if g=1 then //действия при вводе игроком1 неверного ответа
begin Label3.Caption:='Игрок 1, Вы ошиблись' ;
Label4.Caption:='Игрок 2, Вы должны назвать слово';
Edit2.Visible:=true;
Edit2.Text:=''; Button5.Enabled:=false;
Edit2.SetFocus; a:=a+1;
end
else if g=2 then
// действия при вводе игроком2 неверного ответа
begin Label3.Caption:='Игрок 2, Вы ошиблись' ;
Label4.Caption:='Игрок 1, Вы должны назвать слово';
Edit2.Visible:=true; Edit2.Text:=''; Button5.Enabled:=false;
Edit2.SetFocus; a:=a+1;
end;
end
else // если один из игроков ввел неверное слово, то выводится
// сообщение об ошибке и другому предлагается назвать слово
begin Label4.Visible:=false; Edit2.Enabled:=false;
Button5.Enabled:=false;
if Label4.Caption='Игрок 1, Вы должны назвать слово' then
Label3.Caption:='Игрок 1, Вы ошиблись, игра окончена'
else if Label4.Caption='Игрок 2, Вы должны назвать слово' then
Label3.Caption:='Игрок 2, Вы ошиблись, игра окончена' ;
end;
end;
procedure TForm1.Button6Click(Sender: TObject); //кнопка «Подтвердите»
begin f:=Form3.Edit1.Text; c:=Length(f); w:=0;
b:=Edit1.Text; // запоминается введенная буква
b:=AnsiLowerCase(b); // возвращается буква в нижнем регистре
for i:=1 to c do // в цикле введенная буква сравнивается с i-й буквой слова
begin p:=Copy(f,i,1); // возвращает i-ю букву загаданного слова
p:=AnsiLowerCase(p); // возвращается буква в нижнем регистре
if p=b then
begin u:=u+1; // в переменной считается количество угаданных букв
w:=w+1; // в переменной считается, сколько раз
// введенная буква встречается в слове
case i of // вывод угаданной буквы
1: Statictext1.Caption:=b; 2: Statictext2.Caption:=b;
3: Statictext3.Caption:=b; 4: Statictext4.Caption:=b;
5: Statictext5.Caption:=b; 6: Statictext6.Caption:=b;
7: Statictext7.Caption:=b; 8: Statictext8.Caption:=b;
9: Statictext9.Caption:=b; 10: Statictext10.Caption:=b;
end;
end
end;
Edit1.Enabled:=false; Button5.Enabled:=true;
If w<>0 then
begin if g=1 then // умножение набранных очков, если буква // в слове встречается более одного раза
begin x:=x*w; e:=inttostr(x) ;
Label5.caption:='Игрок1, Ваш выигрыш - '+e;
end
else if g=2 then
begin y:=y*w; e:=inttostr(y) ;
Label6.caption:='Игрок2, Ваш выигрыш - '+e ;
end
end // если буква названа неверно, то ход передается другому игроку
else if Label4.Caption='Игрок 1, Ваш ход'
then Label4.Caption:='Игрок 2, Ваш ход'
else Label4.Caption:='Игрок 1, Ваш ход';
if u=c then
begin Label3.Caption:='ВЫ УГАДАЛИ !!!' ; Label4.Visible:=false;
Button4.Enabled:=false; Button5.Enabled:=false;
end;
Button6.Enabled:=false;
// если количество угаданных букв совпадает с длиной слова, то
// выводится «ВЫ УГАДАЛИ !!!» и блокируются все объекты, кроме «Выход»
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin Button4.Enabled:=false; // при вводе слова блокируются
Edit1.Enabled:=false; // кнопка «Назвать слово» и поле для ввода буквы
end;
procedure TForm1.FormCreate(Sender: TObject);
begin x:=0; y:=0; w:=0; a:=0;
With Series1 do
begin // прорисовка барабана
add(10,'100 очков',clWhite); add(10,'750 очков',clRed);
add(10,'1000 очков',clGreen); add(10,'250 очков',clYellow);
add(10,'*2',clBlue); add(10,'ПЕРЕХОД ХОДА',clSilver);
add(10,'500 очков',clFuchsia); add(10,'*4',clLime);
end;
end;
Процедуры формы Form2 (модуль Unit2)
var Form2: Tform2; s,t:string; f:integer;
procedure Tform2.Button1Click(Sender: TObject); //кнопка «Подтвердите»
begin s:=DateToStr(Date); // преобразование текущей даты в строку
t:=Edit1.Text; f:=AnsiCompareText(s,t); //сравнение даты с введенным паролем
If f=0 then // пароль введен верно и форма Загадать становится видимой
begin Form3.Show; Form2.Close;end
else //ошибка в пароле, вывод сообщения
begin Application.MessageBox('Введен неправильный пароль', 'Внимание', mb_Ok+mb_IconError);
Edit1.SetFocus;//передача фокуса полю для ввода пароля
end;
end;
Процедуры формы Form3 (модуль Unit3)
var Form3: Tform3; f:string; i,c:integer;
procedure Tform3.Button1Click(Sender: TObject); //кнопка «Сохранить»
begin
Form1.Label1.Caption:=Memo1.Text; //выводит на форму Поле Чудес вопрос
f:=Edit1.Text; c:=Length(f);
for i:=1 to c do begin
case i of //в зависимости от длины слова выводится нужное количество
1: Form1.Statictext1.Visible:=true; //компонентов StaticText
2: Form1.Statictext2.Visible:=true; 3: Form1.Statictext3.Visible:=true;
4: Form1.Statictext4.Visible:=true; 5: Form1.Statictext5.Visible:=true;
6: Form1.Statictext6.Visible:=true; 7: Form1.Statictext7.Visible:=true;
8: Form1.Statictext8.Visible:=true; 9: Form1.Statictext9.Visible:=true;
10: Form1.Statictext10.Visible:=true;
end;
end;
Form1.Show; Form3.Close;
end;
procedure Tform3.FormActivate(Sender: TObject);
begin Memo1.SetFocus; //передача фокуса полю Memo1
end;
Текст программы для C++ Builder
Процедуры формы Form1 (модуля Unit1)
int z,c,i,k,y,x,t,a,g,w,u,l,x1,y1; String f,p,b,s,e; // объявление переменных
void __fastcall TForm1::FormCreate(TObject *Sender) // создание формы
{Series1->Add(10,"ПЕРЕХОД ХОДА",clSilver); // прорисовка барабана
Series1->Add(10,"*2",clBlue); // (диаграммы)
Series1->Add(10,"*4",clLime); Series1->Add(10,"500 очков",clFuchsia);
Series1->Add(10,"750 очков",clRed); Series1->Add(10,"100 очков",clWhite);
Series1->Add(10,"250 очков",clYellow); Series1->Add(10,"1000 очков",clGreen);
}