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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2012, 09:01   #1
Tonya914
 
Регистрация: 18.04.2012
Сообщений: 3
Вопрос Нужно доделать немного программку "Резиновый прямоугольник"

Ребятки, помогите пожайлуста:"Резиновый прямоугольник". Изменение размера прямоугольника при фиксированной координате верхнего левого угла (растягивание или сжатие за правую боковую или нижнюю стороны). Вращение прямоугольника за его произвольную вершину при фиксированной координате центра прямоугольника. Выбор точки(стороны,вершины) осуществляется графическим курсором и нажатием клавиши "Enter". Буду премного благодарна!

Код:
Procedure Kursor(x,y,n:word);
Begin 
        setcolor(n);
        line(x-5,y,x+5,y);
        line(x,y+5,x,y-5);
end;
{----------------}
Procedure dvizhenie;
Var gd,gm,x1,y1,x2,y2:integer;
Begin
     gd:=Detect;
      ent:=0;
      initgraph(gd,gm,'');
      cleardevice;
      x:=20;
      y:=300;
      repeat
          kursor(x,y,10);
          if keypressed then
          begin
              kursor(x,y,0);
               a:=readkey;
               if a=chr(0) then
                begin
                 a:=readkey;
                 case ord(a) of 
                72:begin y:=y-10;
                 end;
                 80:begin y:=y+10;
                  end;
                  75:begin x:=x-10;
                   end;
                   77: begin x:=x+10;
                    end;
        else
             write('Нажата не стрелка');
          end;
        end
      else 
          case ord(a) of 
           13:begin 
                if ent=0 then
                begin 
                     x1:=getx;
                     y1:=gety;
                     ent:=1;
                  end
             else
                 begin 
                     x2:=getx;
                      y2:=gety;
                     end;
                begin
                     rectangle(x1,y1,x2,y2);
                 end;
              end;
         27:d:=3;
    else 
         begin gotoxy(20,24);
                 writeln('Нажата не стрелка');
                 repeat
                 until keypressed;
               end;
             end;
           end;
   until (x>=630) or (y>=470) or (x<=10) or (y<=10) or (d=3);
  closegraph;
End.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 18.04.2012 в 09:07.
Tonya914 вне форума Ответить с цитированием
Старый 18.04.2012, 09:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

немножко подкорректировал ваш исходник, чтобы он хотя бы компилировался и запускался. но, разумеется, никаких "резиновых" растягиваний, никаких вращений не делал!

Код:
uses Crt, Graph;

procedure Kursor(x, y, n: word);
begin
  setcolor(n);
  line(x - 5, y, x + 5, y);
  line(x, y + 5, x, y - 5);
end;

{----------------}

procedure dvizhenie;
var gd, gm, x, y, x1, y1, x2, y2, ent: integer;
  d: integer;
  a: char;
begin
  gd := Detect;
  ent := 0;
  initgraph(gd, gm, '');
  cleardevice;
  x := GetMaxX div 2;
  y := GetMaxY div 2;
  repeat
    kursor(x, y, 10);
    if keypressed then
    begin
      kursor(x, y, 0);
      a := readkey;
      if a = chr(0) then
      begin
        a := readkey;
        case ord(a) of
          72: begin y := y - 10;
            end;
          80: begin y := y + 10;
            end;
          75: begin x := x - 10;
            end;
          77: begin x := x + 10;
            end;
        else
          write('Нажата не стрелка');
        end;
      end
      else
        case ord(a) of
          13: begin
              if ent = 0 then
              begin
                SetColor(0);
                rectangle(x1, y1, x2, y2);
                x1 := x;
                y1 := y;
                ent := 1;
              end
              else begin
                x2 := x;
                y2 := y;
                SetColor(5);
                rectangle(x1, y1, x2, y2);
                x := GetMaxX div 2;
                y := GetMaxY div 2;
                ent := 0;
              end;
            end;
          27: d := 3;
        else
          begin gotoxy(20, 24);
            writeln('Нажата не стрелка');
            repeat
            until keypressed;
          end;
        end;
    end;
  until (x >= 630) or (y >= 470) or (x <= 10) or (y <= 10) or (d = 3);
  closegraph;
end;

begin
  dvizhenie
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.04.2012, 14:47   #3
Tonya914
 
Регистрация: 18.04.2012
Сообщений: 3
По умолчанию

большое спасибо
Tonya914 вне форума Ответить с цитированием
Старый 14.05.2012, 17:26   #4
JIeIIIa
Пользователь
 
Регистрация: 21.12.2011
Сообщений: 54
По умолчанию

Погу помочь. Пишите на stealth(собака)bigmir.net - обсудим...
JIeIIIa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"With Form1.Canvas do" не отрисовывает прямоугольник *starfish* Помощь студентам 3 12.03.2011 22:09
Нужно доделать задачу на тему: " Простейшие Справочники" Orbys Фриланс 4 04.10.2010 02:53
Нужно поле "Загрузить файл" в "новости сайта" planetary Помощь студентам 1 24.06.2010 12:26
помогите пожалуйста доделать программку "Типизированные файлы" от B_A_N_D_E_R_A B_A_N_D_E_R_A Помощь студентам 0 04.06.2009 17:39
Помогите немного доделать программку на Дельфях HAMMAN Помощь студентам 7 16.05.2007 23:05