Составить программу вывода на экран горизонтального меню, включающего пункты 1,2,3 и выход. Сформируйте курсор. Предусмотрите активизацию пункта меню перемещением в него курсором и нажатием клавиши Enter. — Pascal(Паскаль)

При активизации пункта 1 формируется окно, в котором находится информация о названии вуза; пункта 2 — окно с информацией о номере группы студента; пункт 3 — окно с Ф.И.О. студента. При активизации — ВЫХОД: программа завершает работу.Но меню организуется в виде прямоугольников, расположенных последовательно по диагонали

uses crt,graph;
type Point=record{для центра курсора}
           x,y,x1,y1:integer;
           end;
procedure Clear;
{очистка экрана, за исключением вертикальной полосы, где меню}
begin
Setcolor(0);
rectangle(95,1,640,480);
setfillstyle(1,0);
Bar(95,1,640,480);
end;
procedure Krug;
{рисование окружности, это просто так, замените на свое}
begin
Setcolor(5);
Circle(200,200,100);
end;
procedure Kvadrat;{тоже квадрат}
begin
Setcolor(9);
rectangle(105,15,620,460);
end;
procedure MyBar;{тоже параллелепипед}
begin
Setcolor(10);
rectangle(195,200,340,380);
setfillstyle(1,10);
Bar3D(195,200,340,380,50,topon);
end;
procedure Grafik;{Ваша процедура}
var xe,ye,xen,xek,yen, yek: integer;
    xs,ys,kdx,kdy,kt, i: integer;
    x2,y2,xn,yn,xk,yk,mx,my,hx,hdx, hdy: real;
    x,y:integer;
    xst, yst: string;
begin
xn:=170;
    xk:=x+30;
    yn:=-1.5;
    yk:=1.5;
    xen:=150;
    xek:=630;
    yen:=400;
    yek:=50;
    hdx:=pi;
    hdy:=0.5;
    kdx := round ((xk-xn)/hdx+1);
    kdy := round ((yk-yn)/hdy+1);
    setcolor (14);
    rectangle (xen,yek,xek,yen);
    mx:=(xk-xn)/(xek-xen);
    my:=(yk-yn)/(yen-yek);
    xs := round (xen+(0-xn)/mx);
    ys := round (yen-(0-yn)/my);
 
    line (xen,ys,xek,ys);
    line (xs,yen,xs,yek);
    x2:=xn;
    for i:=1 to kdx do
      begin
        xe := round (xen+(x-xn)/mx);
        str (x2:5:2,xst);
        line (xe,yen,xe,yen+5);
        outtextxy (xe-20,yen+10,xst);
        x2:=x2+hdx;
      end;
    y2:=yn;
    for i:=1 to kdy do
       begin
         ye := round (yen-(y-yn)/my);
         str (y2:5:2,yst);
         line (xen,ye,xen-5,ye);
         outtextxy (xen-50,ye-4,yst);
         y2:=y+hdy;
       end;
    x2:=xn;
    hx:=mx;
    kt:=xek-xen+1;
    Moveto (round(xn),round(yn));
    for i:=1 to kt do
       begin
         y2 := sin(x2);
         xe := round (xen+(x-xn)/mx);
         ye := round (yen-(y-yn)/my);
         Lineto (xe,ye);
         x2:=x2+hx;
       end;
end;
procedure menyu;
{создание кнопок, курсора, его перемещение и условия выполнения процедур}
var x,y,x1,y1:integer;
    i,c:byte;
    a:Point; {центр курсора}
    move:boolean;
    k:char;
begin
{sozdanie knopok}
x:=1;y:=10;{верхний левый угол первой кнопки}
for i:=1 to 6 do
  begin
   y:=10+20*(i-1);
   Setcolor(i+1);
   Rectangle(x,y,x+90,y+20);
   Setfillstyle(1,i+1);
   Bar(x,y,x+90,y+20);
 end;
{nadpisi na knopkah}
Setcolor(0);
outtextxy(5,18,'Krug');
outtextxy(5,38,'Kvadrat');
outtextxy(5,58,'Bar3D');
outtextxy(5,78,'Grafik');
outtextxy(5,98,'Clear');
outtextxy(5,118,'Exit');
{sozdanie i dvizenie kursora}
a.x:=80;a.y:=138;{nachalo}
move:=true;
repeat
if keypressed then
   begin
     k:=readkey;
     if k=#80 then
       begin
        a.y1:=a.y;
        a.x1:=a.x;
        a.y:=a.y+20;
        move:=true;
       end;
     if k=#72 then
       begin
        a.y1:=a.y;
        a.x1:=a.x;
        a.y:=a.y-20;
        move:=true;
       end;
      if (k=#13)and (a.y=18) then Krug; {knoka 1 + Enter}
      if (k=#13)and (a.y=38) then Kvadrat;
      if (k=#13)and (a.y=58) then MyBar;
      if (k=#13)and (a.y=78) then Grafik;
      if (k=#13)and (a.y=98) then Clear;
      if (k=#13)and (a.y=118) then k:=#27;
    end;
if move then
    begin
      if a.y1=18 then c:=2
      else if a.y1=38 then c:=3
      else if a.y1=58 then c:=4
      else if a.y1=78 then c:=5
      else if a.y1=98 then c:=6
      else if a.y1=118 then c:=7
      else c:=0;
      Setcolor(c);
      Circle(a.x1,a.y1,5);
      Setfillstyle(1,c);
      Fillellipse(a.x1,a.y1,5,5);
      Setcolor(12);
      Circle(a.x,a.y,5);
      Setfillstyle(1,12);
      Fillellipse(a.x,a.y,5,5);
      move:=false;
    end;
until k=#27;
end;
 
var gd,gm:integer;
begin
gd:=detect;
initgraph(gd,gm,'');
menyu;
closegraph;
end.

Leave a Comment

16 + = 22