IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> кнопки-объекты, помогите исправить ошибку
HoOope
сообщение 27.02.2009 3:09
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: ОльКа

Репутация: -  0  +


Люди-человеки, помогите будной студентки разобраться в проге. blink.gif blink.gif Дали лабу с объектами, а толком ничего не объяснили. unsure.gif

Вот задание:
1) разработать интерфейсное меню, состоящее из кнопок вида ромба и квадрата
2)кнопки должны размещаться на панели и иметь объемный вид
3) текущей является кнопка серого цвета, неактивная - зеленая
4) перемещение по кнопкам производиться с помощью клавиш навигации, выбор кнопки-энтер
5) по нажатию каждой кнопки создается эффект вогнутости и выполняется действия:
на дополнительную панель внизу экрана вывести задание на лабу;
развернуть панель и вернуть ее в исходное состояние;
увеличить объемность панели...

А вот то, что я намучала:
uses crt,graph;
type
knopka=object
x0,y0,v,h:integer;
ckn,ckon:integer;
t:string[13];
activ:boolean;
procedure kvt_up;
procedure kvt_down;
procedure rmb_up;
procedure rmb_down;
procedure init(x1,y1,v1,h1:integer;ckn1,ckon1:integer);
end;
panel=object
xp,yp,vp,hp:integer;
czp:integer;
procedure draw;
procedure init(x,y,vp1,hp1:integer;colp:integer);
end;
procedure knopka.init;
begin
x0:=x1;
y0:=y1;
h:=h1;
v:=v1;
ckn:=ckn1;
ckon:=ckon1;
end;
procedure knopka.kvt_down;
begin
setcolor(black);
bar(x0-1,y0-1,x0+h,y0+v);
setfillstyle(1,black);
floodfill(x0,y0,black);
setcolor(white);
bar(x0+1,y0+1,x0+h,y0+v);
setfillstyle(1,white);
floodfill(x0,y0,white);
setcolor(darkgray);
bar(x0,y0,x0+h,y0+v);
setfillstyle(5,darkgray);
floodfill(x0,y0,darkgray);
setcolor(red);
outtextxy(x0-5,y0+5+2,t);
end;
procedure knopka.kvt_up;
begin
setcolor(15);
bar(x0-1,y0-1,x0+h,y0+v);
setfillstyle(1,15);
floodfill(x0,y0,15);
setcolor(0);
bar(x0+2,y0+2,x0+h,y0+v);
setfillstyle(1,0);
floodfill(x0,y0,0);
setcolor(2);
bar(x0,y0,x0+h,y0+v);
setfillstyle(5,2);
floodfill(x0,y0,2);
setcolor(red);
outtextxy(x0-5,y0+5*2,t);
end;
procedure rmb_up;
var poly: array[1..4] of pointtype;
begin
setcolor(8);
poly[1].x:=x0+1;
poly[1].y:=y0;
poly[2].x:=x0+round(h/2)+1;
poly[2].y:=y0+round(v/2);
poly[3].x:=x0+1;
poly[3].y:=y0+v;
poly[4].x:=x0-round(h/2)+1;
poly[4].y:=y0+round(v/2);
fillpoly(4,poly);
setfillstyle(1,15);
floodfill(x0+3),y0+round(v/2),15);
setcolor(15);
poly[1].x:=x0-1;
poly[1].y:=y0;
poly[2].x:=x0+round(h/2)-1;
poly[2].y:=y0+round(v/2);
poly[3].x:=x0-1;
poly[3].y:=y0+v;
poly[4].x:=x0-round(h/2)-1;
poly[4].y:=y0+round(v/2);
fillpoly(4,polly);
setfillstyle(1,8);
floodfill(x0,y0+round(v/2),8);
setcolor(4);
outtextxy(x0,y0+v+2,t);
setcolor(2);
poly[1].x:=x0;
poly[1].y:=y0;
poly[2].x:=x0+round(h/2);;
poly[2].y:=y0+round(v/2);;
poly[3].x:=x0;
poly[3].y:=y0+v;
poly[4].x:=x0-round(h/2);
poly[4].y:=y0-round(v/2);
fillpoly(4,poly);
setfillstyle(1,2);
floodfill(x0),y0+round(v/2),ckon);
setcolor(4);
outtextxy(x0,y0+v+2,t);
end;
procedure rmb_down;
var poly: array[1..4] of pointtype;
begin
setcolor(15);
poly[1].x:=x0+1;
poly[1].y:=y0;
poly[2].x:=x0+round(h/2)+1;
poly[2].y:=y0+round(v/2);
poly[3].x:=x0+1;
poly[3].y:=y0+v;
poly[4].x:=x0-round(h/2)+1;
poly[4].y:=y0+round(v/2);
fillpoly(4,poly);
setfillstyle(1,15);
floodfill(x0+3),y0+round(v/2),15);
setcolor(8);
poly[1].x:=x0-1;
poly[1].y:=y0;
poly[2].x:=x0+round(h/2)-1;
poly[2].y:=y0+round(v/2);
poly[3].x:=x0-1;
poly[3].y:=y0+v;
poly[4].x:=x0-round(h/2)-1;
poly[4].y:=y0+round(v/2);
fillpoly(4,polly);
setfillstyle(1,8);
floodfill(x0,y0+round(v/2),8);
setcolor(4);
outtextxy(x0,y0+v+2,t);
setcolor(7);
poly[1].x:=x0;
poly[1].y:=y0;
poly[2].x:=x0+round(h/2);;
poly[2].y:=y0+round(v/2);;
poly[3].x:=x0;
poly[3].y:=y0+v;
poly[4].x:=x0-round(h/2);
poly[4].y:=y0-round(v/2);
fillpoly(4,poly);
setfillstyle(1,ckn);
floodfill(x0),y0+round(v/2),7);
setcolor(4);
outtextxy(x0,y0+v+2,t);
end;
procedure panel.init;
begin
xp:=x;
yp:=y;
vp:=vp1;
hp:=hp1;
czp:=colp;
end;
procedure panel.draw;
begin
setcolor(15);
rectangle(xp-1,yp-1,xp-1+wp,yp-1+hp);
setfillstyle(1,15);
floodfill(xp+5,yp+5,15);
setcolor(darkgray);
rectangle(xp+2,yp+2,xp+2+vp,yp+2+hp);
setfillstyle(1,darkgray);
floodfill(xp+5,yp+5,darkgray);
setcolor(czp);
rectangle(xp,yp,xp+wp,yp+hp);
setfillstyle(1,czp);
floodfill(xp+5,yp+5,czp);
end;
procedure pan_dop;
var
text1,text2,text3:string;
begin
setcolor(6);
rectangle(220,140,420,340);
setfillstyle(1,15);
floodfill(300,200,6);
text1:='develop program ';
text2:='using ';
text3:='object programming';
outtextxy(235,145,text1);
outtextxy(235,165,text2);
outtextxy(235,185,text3);
end;
var
p:panel;
k:array[1..4] of knopka;
a:char;
i,n,gd,gm:integer;
begin
gd:=detect;
initgraph(gd,gm,'d:\bp\bgi');
setbkcolor(9);
cleardevice;
p.init(100,10,440,50,5);
p.draw;
for i:=1 to 4 do
k[i].init(i*110+40,20,20,30,7,4);
k[1].t:='zadanie';
k[2].t:='razvernut'';
k[3].t:='svernut'';
k[4].t:='ob'emnost'';
k[1].activ:=true;n:=1;
repeat
for i:=1 to 4 do
begin
if n=i then k[i].activ:=true
else k[i].activ:=false;
if k[i].activ then k[i].ckon:=4
else k[i].ckon:=7;
if (i mod 2)=0 then
k[i].romb
else
k[i].kvt;
end;
a:=readkey;
case a of
#77:if n=4 then n:=1 else n:=n+1;
#75:if n=1 then n:=4 else n:=n-1;
#13:case n of
1:begin
k[n].tr_d;delay(60000);
cleardevice;
p.init(100,10,440,50,5);
p.draw;
pan_dop;
for i:=1 to 4 do
k[i].init(i*110+40,20,20,30,7,4);
end;
2:begin
k[n].romb_d;
delay(60000);
cleardevice;
p.init(50,10,540,200,5);
p.draw;
for i:=1 to 4 do
k[i].init(i*110+40,80,30,50,7,4);
end;
3:begin
k[n].draw_down;delay(5000);
cleardevice;
p.init(150,20,300,60,cyan);p.draw;
for i:=1 to 4 do k[i].init(i*80+100,50,20);
end;
4:begin
k[n].romb_d;
delay(60000);
cleardevice;
p.init(50,10,540,200,5);
p.draw;
for i:=1 to 4 do
k[i].init(i*110+40,80,30,50,7,4);
end;
end;
end;
until a=#27;
closegraph;
end.



Очень жду и надеюсь на Вашу помощь rolleyes.gif rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
HoOope
сообщение 19.03.2009 21:42
Сообщение #2





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: ОльКа

Репутация: -  0  +


вот код немного другой проги с кнопочками прямоугольниками и кругами
Uses crt,graph;
type knop=object
cz,cl,x1,y1,r1,r2,x2,y2:integer;ac:boolean;
procedure init(x0,y0,x4,y4,cli,cza:integer;act:boolean);
procedure init2(x0,y0,rx,ry,cli,cza:integer;act:boolean);
procedure draw1;
procedure draw2;
procedure draw_dawn;
procedure draw_up;
end;
panel=object(knop)
procedure initp(x00,y00,x44,y44,cl0,cz0:integer);
procedure drawp;
end;
procedure knop.init;
begin
x1:=x0;y1:=y0;x2:=x4;y2:=y4;cl:=cli;cz:=cza;ac:=act;
end;
procedure knop.init2;
begin
x1:=x0;y1:=y0;r1:=rx;r2:=ry;cz:=cza;cl:=cli;act:=ac;
end;
procedure knop.draw1;
begin
setcolor(2);setfillstyle(1,cz);
setlinestyle(0,1,3);
if ac=true
then begin

setlinestyle(0,2,3);
setcolor(15);line(x1-1,y1,x2+1,y1);line(x1,y1+2,x1,y2);
setcolor(8);line(x1+1,y2,x2,y2);line(x2,y1+1,x2,y2);
setcolor(7);line(x1+3,y2-3,x2-3,y2-3);line(x2-3,y1+3,x2-3,y2-3);
Bar(x1+2,y1+2,x2-3,y2-3); setlinestyle(1,1,3);setcolor(12);
rectangle(x1+4,y1+4,x2-4,y2-4);
end else begin setlinestyle(0,2,3);
setcolor(15);line(x1-1,y1,x2+1,y1);line(x1,y1+2,x1,y2);
setcolor(8);line(x1+1,y2,x2,y2);line(x2,y1+1,x2,y2);
setcolor(7);line(x1+3,y2-3,x2-3,y2-3);line(x2-3,y1+3,x2-3,y2-3);
Bar(x1+2,y1+2,x2-3,y2-3);end;end;

procedure knop.draw_dawn;
begin
setfillstyle(1,cz);
setlinestyle(0,2,3);
setcolor(8);
line(x1,y1,x2,y1);line(x1,y1+3,x1,y2);
setcolor(15);
line(x1+3,y2,x2,y2);line(x2,y1+3,x2,y2-3);
setcolor(7);
line(x1+3,y1+3,x2-3,y1+3);line(x1+3,y1+3,x1+3,y2-3);
Bar(x1+4,y1+4,x2-3,y2-3);delay(5000);
end;

procedure knop.draw2;
begin
setcolor(2);setfillstyle(1,cz);setlinestyle(0,1,3);
if ac=true
then begin
setlinestyle(0,2,3);setcolor(15);
ellipse(x1-1,y1-1,0,2,r1,r2);setfillstyle(1,15);fillellipse(x1-1,y1-1,r1,r2);
setcolor(8);
ellipse(x1+1,y1+1,0,2,r1,r2);setfillstyle(1,8);fillellipse(x1+1,y1+1,r1,r2);
setcolor(2);
ellipse(x1,y1,0,2,r1,r2);setfillstyle(1,cz);fillellipse(x1,y1,r1,r2);
setcolor(12); setlinestyle(1,1,1);
ellipse(x1,y1,0,360,r1,r2);end
else begin
setlinestyle(0,2,3);setcolor(15);
ellipse(x1-1,y1-1,0,2,r1,r2);setfillstyle(1,15);fillellipse(x1-1,y1-1,r1,r2);
setcolor(8);
ellipse(x1+1,y1+1,0,2,r1,r2);setfillstyle(1,8);fillellipse(x1+1,y1+1,r1,r2);
setcolor(2);
ellipse(x1,y1,0,2,r1,r2);setfillstyle(1,cz);fillellipse(x1,y1,r1,r2);
end;end;
procedure knop.draw_up;
begin
setfillstyle(1,cz);
setlinestyle(1,2,3);
ellipse(x1,y1,0,2,r1+3,r2+3);
setlinestyle(1,2,3);setcolor(8);
ellipse(x1-1,y1-1,0,2,r1,r2);setfillstyle(1,8);fillellipse(x1-1,y1-1,r1,r2);
setcolor(15);
ellipse(x1+1,y1+1,0,2,r1,r2);setfillstyle(1,15);fillellipse(x1+1,y1+1,r1,r2);
setcolor(2);
ellipse(x1,y1,0,2,r1,r2);setfillstyle(1,cz);fillellipse(x1,y1,r1,r2);delay(5000)
;
end;
procedure panel.initp;
begin
x1:=x00;y1:=y00;x2:=x44;y2:=y44;cz:=cz0;cl:=cl0;
end;
procedure panel.drawp;
begin
setfillstyle(1,cz);
setlinestyle(0,2,3);setcolor(2);rectangle(x1,y1,x2,y2);
floodfill(x1+5,y1+5,2);
end;
var a:array[1..4] of knop;v:array[1..4,1..4] of real;
p,c:panel;
chk:char;i,j,k,z:byte;
m:byte;gd,gm:integer;tt:string;f:text;
begin
gd:=detect;
initgraph(gd,gm,'d:\bp\bgi');
cleardevice;setbkcolor(1);
p.initp(120,10,560,80,4,blue);
p.drawp;
a[1].init(140,30,190,70,15,green,false);
a[2].init2(280,50,25,20,15,green,false);
a[3].init(380,30,430,70,15,green,false);
a[4].init2(520,50,25,20,15,green,false);
a[1].ac:=true;m:=1;z:=2;
repeat
setbkcolor(0);cleardevice;
p.drawp;
for i:=1 to 4 do begin
if m=i then a[i].ac:=true
else a[i].ac:=false;
if (i=1) or (i=3) then a[i].draw1 else a[i].draw2;
end;
chk:=readkey;
case chk of
#77:if (m=4) then m:=1 else m:=m+1;
#75:if (m=1) then m:=4 else m:=m-1;
#13:begin
if (m=1) or (m=3)
then a[m].draw_dawn
else a[m].draw_up;
case m of
1:begin
cleardevice;setbkcolor(1);
p.initp(230,10,450,45,4,blue);p.drawp;
a[1].init(240,17,273,38,15,green,false);
a[2].init2(317,27,12,10,15,green,false);
a[3].init(357,17,387,38,15,green,false);
a[4].init2(427,27,12,10,15,green,false);
a[1].ac:=true;m:=1;end;
2:begin
cleardevice;setbkcolor(1);
p.initp(120,410,560,478,4,blue);p.drawp;
a[1].init(140,430,190,470,15,green,false);
a[2].init2(280,447,25,20,15,green,false);
a[3].init(380,430,430,470,15,green,false);
a[4].init2(520,447,25,20,15,green,false);
a[1].ac:=true;m:=2;end;
3:begin if (z mod 2)=0 then begin
p.initp(1,1,640,480,4,blue);a[1].ac:=true; p.drawp;a[1].init(140,30,190,70,15,green,false);
a[2].init2(280,50,25,20,15,green,false);
a[3].init(380,30,430,70,15,green,false);
a[4].init2(520,50,25,20,15,green,false);z:=z+1; end
else begin
p.initp(120,10,560,80,4,blue);
p.drawp;a[1].init(140,30,190,70,15,green,false);
a[2].init2(280,50,25,20,15,green,false);
a[3].init(380,30,430,70,15,green,false);
a[4].init2(520,50,25,20,15,green,false);
z:=z+1;
a[1].ac:=true; end;end;
4:begin

c.initp(120,120,450,250,4,blue);c.drawp;
assign(f,'d:\cs.txt');
reset(f);j:=0;
while not eof(f) do
begin
readln(f,tt);outtextxy(125,125+j,tt);
j:=j+10;
end;
close(f);delay(65000);readkey;
end;

end;
end;end;
until chk=#27;end.



кропочку уменьшения панели можно переделать на увеличение объемности , а перенос - возвращение в прежний режим

и как можно написать общие процедурки для ромба и квадрата??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 8:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"