
- •Часть 2
- •Оглавление
- •1. Структурный подход к программированию
- •1.1. Цели структурного программирования
- •1.2. Основные принципы структурного подхода
- •1.3. Спецификация программ
- •1.4. Метод пошаговой детализации
- •2. Предыстория объектно-ориентированного программирования
- •2.1. Введение в объектно-ориентированное программирование
- •2.2. Тип Объекты
- •2.3. Основные понятия ооп. Инкапсуляция. Наследование
- •X, y : integer; {координаты позиции}
- •XX,yy:array [1..1000] of integer;
- •2.4. Совместимость объектных типов по присваиванию
- •2.5. Описание типа-потомка
- •2.6. Полиморфизм
- •2.7. Виртуальные методы. Конструкторы и деструкторы
- •2.7.1. Правила работы с виртуальными методами
- •3. Типы данных и операторы языка object pascal в delphi
- •3.1. Предопределенные типы данных
- •3.1.1 Вещественные типы
- •3.1.2. Длинные строки
- •3.2. Структурированные типы
- •3.2.1. Множества
- •Var MySet: set of 'a'..'z';
- •3.2.2. Массивы
- •Var FlexArray: array of Real;
- •Var Ints: array of array of Integer;
- •3.2.3. Записи
- •Var Record1,Record2:tDateRec;
- •3.2.4. Указатели
- •I: Integer;
- •V1,v2,v3,v4,v5:Variant;
- •I:Integer;
- •3.3. Типы данных, специфичные для Windows
- •3.3.1. Приведение и преобразование типов
- •3.4. Операторы языка Паскаль
- •I:Integer;
- •I:Integer;
- •3.4.1. Элементы управления редактированием
- •3.5. Процедуры и функции библиотеки vcl
- •4. Реализация ооп на языке pascal
- •V: Real;
- •Наследование
- •Virtual;
- •Конструкторы и деструкторы
- •Перекрытие методов
- •5. Программирование в среде delphi
- •5.1. Основные элементы
- •5.2. Реализация объектно-ориентированного программирования
- •5.3. Разработка интерфейса приложения
- •5.3.1. Создание простейшего Windows-приложения
- •5.3.2. Создание Windows-приложения с метками и кнопками
- •Объект Свойство Значение
- •6.1.3. Меню Edit
- •6.1.4. Меню Search
- •6.1.5. Меню View
- •6.1.6. Меню Run
- •6.1.7. Меню Component
- •6.1.8. Меню Tools
- •6.1.9. Полоска кнопок быстрого доступа SpeedBar
- •6.1.10. Локальные меню. SpeedMenu
- •6.2. Работа с формами
- •6.2.1. Палитра компонентов
- •6.2.2. Object Inspector
- •6.2.3. Написание кода
- •6.2.4. Компиляция проекта
- •6.2.5. Интегрированный отладчик
- •6.2.6. Файлы, создаваемые системой
- •7. Структура delphi-программ
- •7.1. Разработка проекта Dialog
- •7.2. Процедуры вызова диалоговых окон
- •7.3. Преобразования типов
- •Var factW,optW,Rost,Delta:integer;
- •Var factW,optW,Rost,Delta:real;
- •7.4. Простейшие компоненты
- •7.4.1. Группы радиокнопок - компоненты RadioGroup, RadioButton, GroupBox
- •7.4.2. Компоненты выбора из списков - ListBox, ComboBox
- •7.4.3. Многострочные окна редактирования Memo и Richedi
- •7.4.4. Графические объекты
- •If OpenDialog1.Execute
- •Image1.Picture.LoadFromFile
- •7.4.5. Канва и пиксели
- •X, y :real; // координаты функции
- •7.4.6. Воспроизведение немых видео клипов – компонент Animate
- •7.4.7. Установка и настройка приложения: работа с файлами *.Ini
- •IniFile.Free;
- •Упражнения
- •8. Репозиторий объектов и эксперты
- •8.1. Страницы репозитория объектов
- •8.1.1. Страница New
- •8.1.2. Страница Forms
- •8.1.3. Страница Dialogs
- •8.1.4. Страница Data Modules
- •8.1.5. Страница Projects
- •8.2. Эксперты Delphi
- •8.2.1. Application Expert
- •8.2.2. Dialog Box Expert
- •9. Классы и модули
- •9.1. Классы и сокрытие информации
- •9.2. Классы и модули
- •9.3. Модули и область видимости
- •9.4. Модули и программы
- •9.5. Информация о типе на этапе выполнения
- •If MyAnimal is Dog then …
- •If MyAnimal is Dog
- •If MyAnimal is Dog then
- •10. Использование компонентов
- •10.1. Буксировка из одного компонента в другой
- •10.2. Обработка исключений
- •10.3. Восприятие ввода для пользователя
- •Val( Edit1.Text,Number,Code);
- •Val((Sender as tEdit).Text,Number,Code);
- •11.2. Различные роли элементов меню
- •11.3. Редактирование меню с помощью Menu Designer
- •If OpenDialog1.Execute
- •If SaveDialog1.Execute
- •Procedure tForm1.ViewEdit1Click(Sender:tObject); begin
- •If Panel1.Visible
- •If Buttons1.Enabled
- •12. Получение «ввода от мыши» и рисование в форме
- •12.1. События, связанные с мышью
- •12.2. Рисование в форме
- •If ssShift in Shift
- •If Circle then Canvas.Ellipse(Center.X-Radius.X,Center.Y-
- •Else Canvas.Rectangle(Center.X-Radius.X,Center.Y-
- •12.3. Черчение и рисование в системе Windows
- •13. Инструментальная линейка и строка состояния
- •13.1. Построение инструментальной линейки
- •Procedure tForm1.SpeedButton1Click(Sender:tObject); begin
- •If SpeedButton1.Down
- •13.2. Добавление всплывающих подсказок в линейку
- •13.3. Комбинированный список в инструментальной линейке
- •13.4. Построение строки состояния
- •14.1. Добавление второй формы в программу
- •14.2. Создание диалоговой панели
- •Задание № 1
- •Procedure tForn1.BitBtnClick(Sender:tObject); begin PageControl1.SelectNextPage(true);
- •Do ListBox1.Items.Add(PageControl1.Page[I].Caption);
- •14.3.1. Блокнот с набором ярлыков
- •If FontDialog1.Execute
- •15.2. Жизненный цикл программного средства
- •15.3. Понятие качества программного средства
- •15.4. Обеспечение надежности основной мотив разработки программных средств
- •15.4.1. Методы борьбы со сложностью
- •15.4.2. Обеспечение точности перевода
- •15.4.3. Преодоление барьера между пользователем и разработчиком
- •15.4.4. Контроль принимаемых решений
- •Литература
- •Часть 2. Объектно-ориентированное программирование
If Circle then Canvas.Ellipse(Center.X-Radius.X,Center.Y-
Radius.Y,Center.X+Radius.X,Center.Y+Radius.Y)
Else Canvas.Rectangle(Center.X-Radius.X,Center.Y-
Radius.Y,Center.X+Radius.X, Center.Y+ Radius.Y);
Запишите следующий код для события OnMouseMove :
Caption:= Format('Координаты: x=%d, y=%d ',[X,Y]);
Запустите приложение. Если все сделано правильно, то вы будете наблюдать изменение координат в заголовке формы при продвижении мыши; сможете рисовать окружности и эллипсы нужного размера (щелкая кнопкой и удерживая ее при перемещении мыши по горизонтали и вертикали); сможете рисовать прямоугольник нужного размера, используя ту же технологию.
12.3. Черчение и рисование в системе Windows
Выполняя черчение, вы обращаетесь к канве и вызываете некоторые ее методы. Поскольку изображение не сохраняется, форма может частично или целиком потерять свое содержимое (при закрытии окна формы другим окном или при уменьшении размера окна формы).
Рисование – это технология, которая позволит приложению перерисовывать всю ее поверхность при любых возможных условиях.
Для вызова перерисовки можно использовать методы Invalidate, UpDate, ReFresh и Repaint.
Задание № 2
Начиная с оператора if, код для события OnMouseUp перенести в код для события OnPaint.
В код для события OnMouseUp вставить в конце вызов метода Invalidate (который вызывает косвенно метод FormPaint, связанный с событием OnPaint).
Запустить приложение. При правильном выполнении всех инструкций в форме будет рисоваться только одна фигура.
Выполните первое задание для компонента PaintBox.
Изучите возможности компонента Shape.
13. Инструментальная линейка и строка состояния
Во многих приложениях Windows имеются инструментальная линейка в верхней части окна и строка состояния в его нижней части. Инструментальная линейка содержит обычно несколько маленьких кнопок, которые вы можете нажимать щелчком мыши, чтобы задавать команды или переключать опции вкл. и выкл. Иногда инструментальная линейка может содержать комбинированный список, строку редактирования или некоторые другие управляющие элементы.
Строка состояния обычно имеет одну или несколько областей с текстовым описанием текущего состояния программы. У вас может быть область для координат, для показа выбранного шрифта или отображения всплывающих подсказок о том, что делать дальше, сообщений об ошибках и т. д. Фактически приложение определяет, что должно войти в строку состояния.
13.1. Построение инструментальной линейки
Для создания инструментальной линейки или строки состояния в Delphi вы можете использовать компонент Panel, добавив в него несколько кнопок или других панелей, или же можете использовать специальный компонент StatusBar.
Чтобы построить типичную инструментальную линейку, вам нужно поместить панель в верхней части формы и разместить в ней несколько компонентов SpeedButton (быстрая кнопка). Быстрые кнопки могут иметь заголовок и значок, хотя обычно они имет только графический элемент. Быстрые кнопки могут вести себя подобно командным кнопкам, чекбоксам или кнопкам опций (радиокнопкам) и иметь другие растровые изображения для различных ситуаций. Быстрые кнопки являются графическим элементом, они не имеют дескриптора окна (т. е. не использует ресурсы окон), не могут получать фокус, не участвуют в переборе клавишей Tab, и быстрее создаются и закрашиваются.
Если вы просто выбираете компонент SpeedButton и помещаете его экземпляр в панель, то в результате получите графическую командную кнопку. Потом можно выбрать растровое изображение или ввести заголовок и записать код для события OnClick. Чтобы добавить группу быстрых кнопок, которые будут работать подобно радиокнопкам, поместите их в панель и присвойте их свойствам GroupIndex одинаковое значение. Все кнопки, имеющие одинаковое свойство GroupIndex, станут осуществлять взаимоисключающий выбор аналогично кнопкам опций. Одна из этих кнопок должна быть всегда выбранной, поэтому не забывайте присвоить свойству Down значение True для одной из них на этапе проектирования или как только программа начинает работать.
В качестве альтернативы у вас могут быть взаимоисключающие кнопки, которые все могут быть ненажатыми. Это означает, что вы можете щелкнуть на выбранной кнопке и отменить ее выбор. Вы можете выбрать этот режим, присвоив свойству AllowAllUp для всех кнопок группы значение True. Чтобы быстрая кнопка работала как чекбокс, необходимо выполнить следующее. Чекбокс – это группа только с одним эелементом, в котором все кнопки могут быть невыбранными. На практике вы добиваетесь этого, добавив новую быструю кнопку, присвоив ей конкретное значение для свойства GroupIndex (отличное от индексов других групп, и выбрав значение True для свойства AllowAllUp.
Задание № 1
Постройте инструментальную линейку, в которой будут располагаться следующие кнопки:
командная, при нажатии которой будет издаваться звук;
группа из трех кнопок, которые будут осуществлять выравнивание текста в компоненте Label по левому, правому краю и по центру и вести себя как кнопки опций;
группа из трех кнопок, которые будут изменять стиль текста компонента Label (полужирный, курсив, подчеркнутый) и могут быть все ненажатыми – в этом случае текст нормальный (вы должны не просто выбрать стиль, когда нажата кнопка, но и отменить ее выбор, восстанавливая нормальный стиль, когда кнопка освобождена). В методах, отвечающих за событие щелчка этих кнопок, вы должны написать: