- •Часть 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. Объектно-ориентированное программирование
7.4. Простейшие компоненты
7.4.1. Группы радиокнопок - компоненты RadioGroup, RadioButton, GroupBox
Радиокнопки образуют группы взаимосвязанных индикаторов, из которых обычно может быть выбран только один из нескольких взаимоисключающих альтернатив.
Компонент RadioGroup - панель группы радиокнопок. Надписи и количество кнопок определяются свойством Items, имеющим тип Тstrings. В редакторе списка строк количество написанных строк определит количество переключателей.
Определить, какой из переключателей выбрал пользователь, можно по свойству ItemsIndex. Индексы, как всегда, начинаются с 0. По умолчанию ItemsIndex = -1, что означает отсутствие выбранной кнопки. Данный пример позволяет менять цвет формы по нажатию на определенный переключатель:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
if Radiogroup1.ItemIndex<>-1
then case Radiogroup1.ItemIndex of
0: Form1.Color:=clred;
1: Form1.Color:=clyellow;
2: Form1.Color:=clgreen;
end;
end;
Компонент RadioButton позволяет располагать кнопки по своему усмотрению на панели GroupBox. Отдельная кнопка RadioButton смысла не имеет. Радиокнопки имеют смысл, когда они взаимодействуют друг с другом в группе. Эта группа объединяется единым контейнером, обычно панелью GroupBox, а также панелью любого типа и непосредственно формой. Они все ваботают как единая группа, т. е. только одной из них можно установить значение Checked в true.
7.4.2. Компоненты выбора из списков - ListBox, ComboBox
К
омпоненты
ListBox
и ComboBox
отображают списки строк. Они отличаются
друг от друга прежде всего тем, что
ListBox
только отображает данные и позволяет
пользователю выбрать из них то, что ему
надо, а ComboBox
позволяет также редактировать данные.
ListBox
отображает список в раскрытом виде и
автоматически добавляет в список полосы
прокрутки, если все строки не помещаются
в окне компонента. ComboBox
позволяет отображать список как в
развернутом виде, так и ввиде выпадающего
списка, что обычно удобнее, так как
экономит площадь окна приложения. В
компоненте ListBox
имеется свойство MultiSelect,
разрешающее пользователю множественный
выбор в списке, если его значение равно
True.
Индекс выбранной строки можно узнать
из свойства ItemIndex, доступного только во
время исполнения. Если ни одна строка
не выбрана, то ItemIndex
= -1, Если используется множественный
выбор, то ItemIndex
соответствует тому элементу списка,
который находится в фокусе (рис. 7.6).
Рис. 7.6. Внешний вид ComboBox
Разработка проекта Goroscop
Постановка задачи
Разработать программу, с помощью которой пользователь мог бы выполнить следующее. Он запускает программу, выбирает знак зодиака с помощью мышки или стрелок и нажимает клавишу Enter.
На экране появляется список благоприятных и неблагоприятных дней этого знака. Программа заканчивает свою работу по нажатию клавиши Close (рис.7.7).
Рис. 7.7. Внешний вид проекта Goroscop
Пояснения. Новым в этой программе является компонента ListBox (список).
Рекомендуемый план разработки программы
1. Открыть новый проект.
2
.
Разместить на форме компоненты в
соответствии с рис 7.8. Свойству Kind кнопки
BitBtn1 придать значение Close.
Рис. 7.8. . Исходный вид проекта Goroscop
3. Сохранить проект под именем gor.pas и goros.dpr.
4. Запустить программу, затем закрыть окно проекта кнопкой Close.
5. Выделить Label1, найти в Object Inspector свойство Caption и справа от него вместо слова Label1 написать «Гороскоп с 22 ноября по 23 декабря».
6. Выделить Label2, свойству Caption придать значение «Благоприятные Неблагоприятные», т. е. справа от свойства Caption вместо слова Label2 набрать указанные слова.
7. Выделить Label3 и справа от свойства Caption убрать слово Label3.
8. Выделить ListBox1, в Object Inspector найти свойство Items, справа от него нажать на кнопку с тремя точками. В появившемся окне встроенного редактора (см. рис. 7.7) ввести названия знаков зодиака, каждый на новой строке.
Нажать клавишу OK.
9. В Object Inspector найти событие OnKeyPress, справа от него в поле сделать двойной щелчок левой кнопкой мыши. В том месте Unit1, где будет мигать курсор, ввести следующий код:
if key=#13 then
case Listbox1.ItemIndex of
0: Label3.Caption:='20 24-13 ';
1: Label3.Caption:='26-4 14,15,22 ';
2: Label3.Caption:='12-19 ';
3: Label3.Caption:='24,30,2,6,12,16 26,5,18 ';
4: Label3.Caption:='14,15,16,19-22 27,2,3 ';
5: Label3.Caption:='31,6,7,10 24-26 ';
6: Label3.Caption:='29-31,6,12,20 26 ';
7: Label3.Caption:='24,29,31,2,6,12,20 26,28,5,18 ';
8: Label3.Caption:='24-30 5,12 ';
9: Label3.Caption:='23-22 ';
10: Label3.Caption:='23-22 ';
11: Label3.Caption:='20 1,2 ';
end;
10. Сохранить проект, запустить и протестировать его.
Упражнения. Совершенствование проекта
1. Изменить интерфейс программы: шрифты, цвет экрана и букв.
Подсказка. Возможно придется в коде подкорректировать количество пробелов.
2. Сделать так, чтобы, когда курсор мыши находится в поле ListBox1, появлялась бы подсказка о том, что надо сделать.
Подсказка. Воспользуйтесь свойствами Hint Showhint компонента ListBox1.
3. Сделать так, чтобы при нажатии клавиши Close появлялось бы окно сообщения «Вы уверены?»
Подсказка. Применить функцию MessageDlg.
