Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2009, 03:29   #1
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию рисованные кнопо4ки, паскаль

трабл с графикой((

как можно нарисовать ромбик?? объемный!!

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

и каким образом можно увеличить объемность панели??

все ли свойства учтены для объекного программирования??
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 20.03.2009, 03:29   #2
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

вот мое творение:
Код:
Код:
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.
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 20.03.2009, 05:42   #3
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

А в моей программе робмики разве были необъёмными?
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 20.03.2009, 08:15   #4
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

те принципы, которые были в программке, мы не учили: модули дос, виртуальные методы и указатели...

у нас препод принципиальный, ему необходимо только таким спосодом как он сказал(((

а в моей программке ромбик просто не появляется на экране...
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 20.03.2009, 08:46   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Насколько я понимаю - иммитация обьема представляет собой следующее:

Сама кнопка рисуется как обычно и заливается тоже так же. Ее контур верх и левая сторона рисуется светлым тоном напрмер LightGray. А низ и правая сторона DarkGray при этом толшину линий можно выбрать любую

А утопленная кнопка будет рисоваться обратно Верх и лево - темным Низ и право - светлым.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.03.2009, 17:21   #6
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Ну, это не мешает взять рисование ромбика из TStrangeButton.Paint:

Код:
procedure TStrangeButton.Paint;
var
  Coords : array[1 .. 4] of record X, Y : Integer; end;
begin
  if Active then
  begin
    SetFillStyle(SolidFill, LightGray);
    SetColor(LightGray);
  end else
  begin
    SetFillStyle(SolidFill, Green);
    SetColor(Green);
  end;
  Coords[1].X := Left;
  Coords[1].Y := (Top + Bottom) div 2;
  Coords[2].X := (Left + Right) div 2;
  Coords[2].Y := Top;
  Coords[3].X := Right;
  Coords[3].Y := (Top + Bottom) div 2;
  Coords[4].X := (Left + Right) div 2;
  Coords[4].Y := Bottom;
  FillPoly(4, Coords);

  SetColor(White);
  if Pushed then
    Line(Coords[3].X, Coords[3].Y, Coords[4].X, Coords[4].Y)
  else
    Line(Coords[1].X, Coords[1].Y, Coords[2].X, Coords[2].Y);
  SetColor(DarkGray);
  if Pushed then
    Line(Coords[3].X, Coords[3].Y, Coords[2].X, Coords[2].Y)
  else
    Line(Coords[1].X, Coords[1].Y, Coords[4].X, Coords[4].Y);
  SetColor(Black);
  if Pushed then
    Line(Coords[2].X, Coords[2].Y, Coords[1].X, Coords[1].Y)
  else
    Line(Coords[4].X, Coords[4].Y, Coords[3].X, Coords[3].Y);

  SetTextJustify(CenterText, CenterText);
  SetTextStyle(FontNum, HorizDir, FontSize);
  SetColor(Black);
  OutTextXY((Left + Right) div 2,
            (Top + Bottom) div 2, Caption);

  inherited Paint;
end;
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль, Борланд Паскаль-в чем разница??? Vremya-Dengy Паскаль, Turbo Pascal, PascalABC.NET 13 31.05.2011 18:23
Паскаль! malabar Помощь студентам 2 02.02.2009 00:10
паскаль pupil Паскаль, Turbo Pascal, PascalABC.NET 1 06.03.2008 00:29
Паскаль Jondeer Помощь студентам 5 01.11.2007 16:56