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

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

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

 
 Ответить  Открыть новую тему 
> меню с кнопо4ками, вроде даже ООП, нужна помощь
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Женский
Реальное имя: Ol'ka

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


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

uses crt,graph;
type

knopka=object
cz,cl,w,h,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(knopka)
procedure initp(x00,y00,x44,y44,cl0,cz0:integer);
procedure drawp;
end;

procedure knopka.init;
begin
x1:=x0;y1:=y0;x2:=x4;y2:=y4;cl:=cli;cz:=cza;ac:=act;
end;
procedure knopka.init2;
begin
x1:=x0;y1:=y0;r1:=rx;r2:=ry;cz:=cza;cl:=cli;act:=ac;
end;
procedure knopka.draw1; {моя кнопо4ка-квадрат}
begin
setcolor(2);
if ac=true then begin
setfillstyle(1,8);
setcolor(15);line(x1-1,y1,x2+1,y1);line(x1,y1+2,x1,y2);
setcolor(0);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
else begin
setfillstyle(1,2);
setcolor(15);line(x1-1,y1,x2+1,y1);line(x1,y1+2,x1,y2);
setcolor(0);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 knopka.draw_dawn;
begin
setfillstyle(1,2);
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 knopka.draw2;{а вот тут должна быть кнопка-ромб}
begin
setcolor(2);
if ac=true
then begin
setfillstyle(1,8);
setcolor(15);line(x2--1,(y2-y1) div 2,(x2-x1) div 2-1,y1);line(x2,(y2-y1) div 2+2,(x2-x1) div 2,y2);
setcolor(0);line((x2-x1) div 2+1,y2,x2,(y2-y1) div 2);line(x2,y2+1,x2,(y2-y1) div 2);
setcolor(7);line((x2-x1) div 2+3,y2-3,x2-3,(y2-y1) div 2-3);line(x2-3,y2+3,x2-3,(y2-y1) div 2-3);
setcolor(12);
end else begin
setfillstyle(1,2);
setcolor(15);line(x2-1,(y2-y1) div 2,(x2-x1) div 2-1,y1);line(x2,(y2-y1) div 2+2,(x2-x1) div 2,y2);
setcolor(0);line((x2-x1)div 2+1,y2,x2,(y2-y1) div 2);line(x2,y2+1,x2,(y2-y1) div 2);
setcolor(7);line((x2-x1)div 2+3,y2-3,x2-3,(y2-y1) div 2-3);line(x2-3,y2+3,x2-3,(y2-y1) div 2-3);
end;end;
procedure knopka.draw_up;
begin
setfillstyle(1,2);
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..3] of knopka;v:array[1..3,1..3] 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(490,30,540,70,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(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(490,30,540,70,15,green,false);
a[1].ac:=true;m:=1;
end;
2: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;
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(490,30,540,70,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(490,30,540,70,15,green,false);
z:=z+1;
a[1].ac:=true;
end;end;
end;
end;end;
until chk=#27;end.


результат:
черный фон с красивой панелькой с 2-мя квадратными кнопками;
работает только третья кнопка, которая разворачивает и сворачивает панель; с объемом траблы ужасные; с файлом тоже не оч хорошо;
а ромбик, т.е. ромбовидную кнопку, не видно вообще...

необходима:
помощь программиста (задание интересное, но доделать у меня его не получается); очень хочется доделать ЭТО и желательно правильно =))

ЖДУ. НАДЕЮСЬ. ВЕРЮ.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
а ромбик, т.е. ромбовидную кнопку, не видно вообще...
Скажи спасибо, что хоть что-то видно, запусти программу с {$R+} первой строкой, она у тебя вообще вылетит:
Цитата
     for i:=1 to 4 do
begin
if m=i then a[i].ac:=true
else a[i].ac:=false;
В то время, как в массиве A заявлено всего 3 элемента. А обращаясь к четвертому, ты портишь другие данные...

P.S. Насколько я помню, эта тема уже поднималась тобой же? Вот тут: кнопки-объекты. Откуда возникает 2 вопроса:

1) Почему не продолжила программу в том стиле, в котором я тебе показывал, а опять пошла своим путем? (тогда зачем спрашиваешь, если потом не хочешь разбираться, и опять все на том же месте? Писать готовое на сдачу здесь мало кто будет, не нужно оно никому, мороки больно много, сиди, отлаживай, тестируй, а ты потом берешь, все перечеркиваешь, говоришь "Я не поняла, буду делать по-другому". Ну, так делай по-своему, зачем вот эта часть высказывания:
Цитата
очень хочется доделать ЭТО и желательно правильно =))
? Правильно было, в той теме, на которую я дал ссылку, и что потом было, в последнем посте, напомнить? ...)

2) Зачем создала второй профиль?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Женский
Реальное имя: Ol'ka

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


Да, поднималась когда-то, но до конца программка по требованиям не работала, вот я и решила вспомнить.)))

Подскажите, пожалуйста, как прописать правильно ромбик для моей задачки, чтоб его видно было и что исправить для того, чтобы первая кнопочка-квадратик все таки увеличивала объемность панельки...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ну, вторая попытка предложить тебе правильное решение:
Прикрепленный файл  knop.pas ( 6.95 килобайт ) Кол-во скачиваний: 646

(файл лежал у меня на компьютере с 28-го февраля, сейчас в течении двух минут добавил "увеличение объемности панельки". На разные {$ifdef}-ы не обращай внимания, я пишу на FPC, поэтому приходится добавлять. Должно компилироваться и с ними Турбо Паскалем.)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 3
Пол: Женский
Реальное имя: Ol'ka

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


volvo, спасибо большое, но решение должно быть без конструкторов и всяких там привайтов-мы их не учили...
что делать?

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
решение должно быть без конструкторов и всяких там привайтов-мы их не учили...
что делать?
Поменять преподавателей... ООП без конструкторов - это как автомобиль без двигателя. В принципе, бывает, но на фиг он нужен?
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 2.09.2025 4:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name