Задачи: Создать приложение, проверяющее, принадлежит ли точка с заданными декартовыми координатами некоторой области, ограниченной отрезками прямых и дугами окружностей. Использовать компоненты 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.
Если вы до сих пор его не установили на форму, то самое время это сделать.
- Жмем 2 раза на ActionList (который у вас на форме)
- В открывшемся окошке кликаем на конверт со звездочкой (New Action)
- В графе Actions появился Action1, кликаем по нему 2 раза.
- Открылся редактор кода, пишем туда нужный код, в моем случае это установка белого фона для формы.
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), надо выделить форму, в инспекторе объектов в соответствующей строчке подключить наше меню.
В общем, это все.:)