Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование delphi.doc
Скачиваний:
806
Добавлен:
09.02.2015
Размер:
2.97 Mб
Скачать

2.2. Создание программы «Попадание точки в фигуру»

Задача. Дана сложная фигура, вписанная в квадрат с координатами: левый нижний угол (5, 5), верхний правый угол (20, 20). Требуется написать программу для определения попадания точки с введенными координатами в указанную фигуру. Примерный вид окна программы показан на рис. 2.6.

Процесс создания программы происходит по следующему алгоритму:

  1. Запустить программу Delphi.

  2. Сохранить проект как «Work2», модуль назвать «Main».

  3. Создать образ окна: изменить заголовок на «Попадание точки в фигуру».

  4. Создать изображение фигуры:

  • поместить в форму элемент Shape, вкладка Additional, значок ;

  • изменить свойства объекта:

    • изменить размер объекта для обеспечения попадания в окно трёх элементов по вертикали и трёх по горизонтали, элемент должен быть квадратом;

    • изменить цвет квадратика (свойство Brush/Color и Pen/Color);

  • скопировать образ квадратика в буфер обмена (при классической раскладке клавиатуры в Delphi это комбинация <Ctrl><Ins>);

  • поместить на форму 7 копий квадратика из буфера обмена (<Shift><Ins>);

  • разместить квадратики в фигуру «квадратный бублик» (рис. 2.6). Необходимо обеспечить пустое пространство внизу и слева от фигуры для размещения начала координат – в левом нижнем углу фигуры должен «поместиться» как бы еще один квадратик.

  1. Создать 2 элемента для ввода координат точки:

  • поместить на форму 2 элемента SpinEdit, вкладка Samples, значок ;

  • назвать один элемент SECoordX (для координаты X) и SECoordY (для координаты Y)  свойство Name (в дальнейшем изменяемое свойство будет обозначаться после стрелки);

  • настроить минимальное возможное значение вводимого числа 0, максимальное – 25, значение по умолчанию 0 и шаг изменения величины 1  соответственно MinValue, MaxValue, Value и Increment.

  1. Добавить надписи к полям ввода:

  • поместить 2 элемента Label, вкладка Standard, значок ;

  • настроить надписи на «Координата X» и «Координата Y»  Caption.

  1. Добавить метку для вывода результата попадания точки:

  • поместить элемент Label, вкладка Standard, значок ;

  • назвать элемент LResult Name;

  • изменить заголовок на «Мимо»  Caption.

  1. Добавить кнопки для запуска вычислений и выхода из программы:

  • добавить 2 элемента Button, вкладка Standard, значок ;

  • назвать кнопку для выхода BQuit, а кнопку для вычисления BOk Name;

  • изменить заголовки кнопок на «Выход» и «Ok»  Caption;

  1. Образ окна создан!

  2. Запрограммировать выход – щелкнуть по кнопке BQuit и ввести команду Close;.

  3. Проанализировать форму фигуры для создания алгоритма – в нашем случае проверить попадание в большой квадрат и проверить, не попадает ли точка во внутренний квадрат.

  4. Вернуться на форму (клавиша <F12>) и запрограммировать кнопку BOk:

  • щелкнуть дважды по кнопке BOk;

  • записать оператор проверки координат (координаты можно получить у элементов SECoordX и SECoordY через свойства Valueобращение к свойству объекта осуществляется через «точку» – например: SECoordX.Value дает значение свойства Value элемента SECoordX. SECoordX.Value дает значение введенной координаты X, SECoordY.Value – координаты Y):

If (((SECoordX.Value >= 5) and (SECoordX.Value <= 20) and

{Попадание Х в большой квадрат}

(SECoordY.Value >=5) and (SECoordY.Value <= 20))and

{Попадание Y в большой квадрат}

Not ((SECoordX.Value >10) and (SECoordX.Value < 15) and

{Непопадание Х в малый квадрат}

(SECoordY.Value > 10) and (SECoordY.Value < 15)))

{Непопадание Y в малый квадрат}

then LResult.Caption := ‘Попал’ {Вывод сообщения «Попал» }

else LResult.Caption := ‘Мимо’; {Вывод сообщения «Мимо» }

  1. Запустить программу  <F9>

  2. Для улучшения программы необходимо:

    1. перерисовывать результат сразу при вводе координат;

    2. добавить «точку» для визуализации положения точки.

  1. Для реализации п. 14а необходимо:

  • выбрать элементы SECoordX и SECoordY (удерживая клавишу <Shift> щелкнуть сначала на одном элементе, затем на другом – оба элемента будут отмечены рамочкой – это позволит настраивать общие события для выделенных элементов одновременно);

  • настроить событие (вкладка Events в Инспекторе объектов) onChange так, чтобы оно указывало на событие BOkClick (выбрать это событие из списка). Таким образом, для этих элементов событие onChange будет равносильно событию onClick для кнопки BOk – при смене координат сразу будет выполняться нажатие кнопки «Ok»;

  • так как кнопка «Ok» обрабатывается автоматически, её можно сделать «невидимой» – изменить свойство Visible в значение false для объекта BOk. При запуске программы кнопка «Ok» видна не будет.

  1. Для реализации п. 14б необходимо:

  • добавить точку на экран – элемент Shape, вкладка Additional, значок ;

  • изменить свойства этого элемента:

    • Name изменить на значение SPoint;

    • Shape изменить на stCircle;

    • Width изменить на 3 – ширина точки составляет 3 пикселя;

    • Height изменить на 3 – высота точки;

  • пересчитать начало координат «виртуальной» системы координат программы в координаты экрана (координаты экрана отсчитываются от верхнего левого угла экрана вниз и вправо):

    • необходимо выяснить свойство Name для левого нижнего квадратика – пусть его имя ShapeN;

    • элемент ShapeN имеет свои координаты левого верхнего угла – свойства Top и Left; также этот элемент имеет свойства ширины и высоты – Width и Height, таким образом, координаты начала координат равны: ShapeN.LeftShapeN.Width и ShapeN.Top + 2*ShapeN.Height;

    • рассчитать цену деления координатной сетки: для этого необходимо поделить длину и ширину квадратика на 5. ShapeN.Width div 5 даст шаг по координате X, а ShapeN.Height div 5 – по координатеY;

  • изменить текст события BOkOnClick:

    • щелкнуть по кнопке BOk;

    • в начале процедуры дописать текст присвоения «точке» (объект SPoint) новых координат – к началу координат добавить значение X или Y, умноженное на шаг по координате X или Y:

    • SPoint.Left := ShapeN.Left – ShapeN.Width + SECoordX.Value * (ShapeN.Width div 5);

    • SPoint.Top := ShapeN.Top + 2*ShapeN.Height - SECoordY.Value * (ShapeN.Height div 5).

  1. Запустить программу (клавиша <F9>)