Delphi 7, Определение принадлежности точки замкнутой области.(Урок 4)

Delphi 7, Определение принадлежности точки замкнутой  области.(Урок 4)

Задачи: Создать приложение, проверяющее, принадлежит ли точка с заданными декартовыми координатами некоторой области, ограниченной отрезками прямых и дугами окружностей. Использовать компоненты Image для отрисовки заданной области. Предусмотреть программную проверку и исправление возможной ошибки пользователя - использование точки вместо

запятой в качестве разделителя целой и дробной части числа при вводе координат. Использовать компоненты Checkbox для скрытия/отображения рисунка области. Использовать компоненты RadioButton для изменения цвета формы. Создать главное и контекстное меню с помощью компонентов MainMenu и PopupMenu. Повторяющиеся команды связать с обработчиками событий двумя способами: через инспектор объектов, и через компонент ActionList.

 

Итак, для реализации нашей задачи нам потребуется примерно такая форма:

 

 

Вы, конечно же, можете расположить компоненты в других, более удобных для вас местах. Вот, как я сделал эту форму:

Создал форму произвольных размеров, желательно сделать крупную. Затем на панели инструментов находим компонент Image

 

 

Ставим его на форму, размерами примерно в четверть вашей формы. Теперь выберемся за пределы среды Delphi. Запустим Paint или другой графический редактор (кстати, можно использовать встроенный в Delphi 7 графический редактор (Tools/Image Editor)), и нарисуем там график с областью принадлежности точки. У меня, как видите, получилось не очень красиво J

 

Нарисовав картинку, надо сделать, что бы она показывалась в нашем объекте Image. Для этого просто выделим её и в инспекторе объектов, найдем строчку Picture. Нажимаем на три точки, в открывшемся окне жмем на Load, и там уже ищете на своем компьютере картинку, которую вы нарисовали ранее.

 

 

Остальные объекты, наверно, уже и сам сможете установить. Покажу откуда их брать.

 

 

 

В RadioGroup ставим несколько RadioButton для возможности изменения цвета формы.

К объектам ActionList, MainMenu и PopupMenu перейдем позже.

 

Сделаем изменение цвета формы. Нажимаем дважды на RadioButton и в появившемся окне редактора вписываем такой код:

 

if RadioButton1.checked then

begin

Form1.Color:=clwhite;

Form2.Color:=clwhite;

Form3.Color:=clwhite;

end;

 

Цвета, для каждого RadioButton устанавливаем разные, на ваше усмотрение. (clblue, clred, clgreen, clgrey и так далее…)

 

Возможно, у вас возник вопрос, почему код написан для трех форм, объясняю – я сделал еще дополнительно две формы, что бы главное меню (MainMenu) не выглядело слишком пустым.

 

Далее займемся функцией скрытия и открытия графика. Напишем код для CheckBox:

 

if checkbox1.checked

then image1.visible:=true

else image1.visible:=false;

 

Теперь основной код программы, он пишется для кнопки «Выполнить проверку» (Button1, в моем случае):

 

procedure TForm1.Button1Click(Sender: TObject);

var x, y:real;

p1,p2,p3,p4,p:boolean;

s1,s2:string;

i:byte;

label q;

begin

s1:=labelededit1.text ;

for i:=1 to length(s1) do

if s1[i]='.' then s1[i]:=',';

labelededit1.text:=s1;

s2:=labelededit2.text ;

for i:=1 to length(s2) do

if s2[i]='.' then s2[i]:=',';

labelededit2.text:=s2;

if (labelededit1.text='') or (labelededit2.text='') then

begin

messagedlg('Введены не все данные!',mterror,[mbOK],0) ;

goto q;

end;

X:=strtofloat(s1);

Y:=strtofloat(s2);

p1:= (x>=0) and (y>=0) and (x<=-(0.5*x-1));

p2:= (x=0) and (y=0);

p3:= (x<=0) and (y<=0) and (y>=-(x+1));

p4:= (x>=0) and (y<=0) and ((x*x+y*y)<=1);

p:= p1 or p2 or p3 or p4;

if p = true then

edit1.text:='Точка в области' else

edit1.text:='Точка НЕ в области';

q:end;

 

Обратите внимание на то, что ввод данных организован посредством labelededit1 и labelededit2, а результат отображается в объекте edit1.

 

Нам осталось организовать ActionList, MainMenu и PopupMenu.

Начнем с ActionList.

Если вы до сих пор его не установили на форму, то самое время это сделать.

 

  1. Жмем 2 раза на ActionList (который у вас на форме)
  2. В открывшемся окошке кликаем на конверт со звездочкой (New Action)
  3. В графе Actions появился Action1, кликаем по нему 2 раза.
  4. Открылся редактор кода, пишем туда нужный код, в моем случае это установка белого фона для формы.

 

form1.Color:=clwhite;

form2.Color:=clwhite;

form3.Color:=clwhite;

 

 

Работаем с MainMenu.

Кликаем два раза по элементу MainMenu. Открывается окошко создания меню. Кликаем по пунктирной рамке, пишем название меню (например – Главное), жмем Enter на вашей клавиатуре, появляется еще одна пунктирная рамка справа, и одна рамка под тем что мы только что написали, это для пунктов подменю. Таким образом, создаем такое вот меню:

 

 

Далее каждую кнопку надо заполнить соответствующим кодом.

 

Очистить поля ввода - labelededit1.text:=' '; labelededit2.text:=' '; edit1.text:=' ';

Выход из программы – close

Поменять цвет на исходный – тут мы используем созданный нами Action1. Жмем 1 раз на «Поменять цвет на исх.» (что бы просто выделить) и в инспекторе объектов в графе Action выбираем наш Action1.

 

 

В меню «Помощь» использованы еще 2 разные формы. Создаем новые формы.

 

Заполняем их текстом и кнопкой выход. Кнопку выход можно использовать стандартную

 

 

И осталось сделать только PopupMenu.

Кликаем два раза по этому объекту на вашей форме, делаем что то похожее на MainMenu. Вот так примерно должно получиться:

 

Кстати, что бы не писать заново одинаковый код, для кнопок можно воспользоваться следующим способом:

Выделяем кнопку, в инспекторе объектов открываем вкладку Events и на событие OnClick выбираем нужную процедуру, в списке будут показаны все процедуры, которые вы уже делали, а процедуру очистки полей ввода вы уже делали для главного меню.

 

Что бы активировать контекстное меню (PopupMenu), надо выделить форму, в инспекторе объектов в соответствующей строчке подключить наше меню.

 

 

В общем, это все.:)

 

Скачать Лабораторную работу!

Скачать Delphi 7 Rus + Key

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Комментарий будет опубликован после проверки

(обязательно)