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

> Правила раздела!

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

> ООП и графический редактор
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

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


Уважаемые господа!
Проблема такая - мне было задано за семестр изучить объектно ориентированное программирование и с его помощью написать какой-нибудь графический редактор.
Что такое ООП я, в принципе, изучил (спасибо литературе на этом сайте и на borlpasc.narod.ru) и написал программу, демонстрирующую его особенности (текст прилагается). Но с редактором у меня возникли ряд вопросов, которыя я не могу решить самостоятельно.
1. Для рисования чего бы то ни было мне нужно получать координаты х,у с положения курсора. Теоретически я понимаю что это делается функцией GetX, GetY, но практически так и не въехал, как ее применять. Разъясните, пожалуйста, поподробнее. Если можно, то на примере приложенной программы.
2. Сохранение и откат. Опять таки, теоретически я предполагаю, что сохранение ведется в список (видимо односвязанный), но как?
3. Может быть кто-нибудь что то похожее делал? Если остались исходники каких-нибудь модулей (интерфейс, рисование фигур и вообще все что подходит по теме) скиньте, пожалуйста, мне на почтовый ящик. Только сложностей не надо - я еще не волшебник, я только учусь smile.gif
Вообще редактор, по моему разумению должен получиться простой, без мыши, на hot key's. Типа "ручки-ножки-огуречик".
Заранее благодарен.
Код
Program OPP1;
Uses Crt, Graph;
Var gd,gm:integer;
 Ch: Char;
 S: Boolean;
Const
 Instr = 'УПРАВЛЕНИЕ ДВИЖЕНИЕМ - СТРЕЛКИ, ПЕРЕХОД - END, ВЫХОД - ESC';

Type
 Tp=Object   {объект - точка}
   X,y,c : integer;
   Constructor Init(ax,ay:integer;ac:word);
   Procedure Show; Virtual;
   Procedure Hide; Virtual;
   Procedure Moveto(dx: integer);
 End;

Constructor Tp.Init;
Begin
 X:=ax; y:=ay; c:=ac;
End;

Procedure Tp.Show;
Begin
 Putpixel(x,y,c);
End;

Procedure Tp.Hide;
Begin
 Putpixel(x,y,Getbkcolor)
End;

Procedure Tp.Moveto;
Begin
 repeat
   s:=true;
   Ch := ReadKey;
   Case Ch of
     #27: begin CloseGraph; Halt end;  { выход по клавише ESC }
     #75: begin Hide; X := X-dx end; {изменение координат x, y нажатием стрелок}
     #77: begin Hide; X := X+dx end; {"влево", "вправо", "вверх", "вниз"       }
     #72: begin Hide; Y := Y-dx end;
     #80: begin Hide; Y := Y+dx end;
     #79: S := false; {переход кнопкой END}
   end;
   Show;
 until s = false;
 Hide;
End;

Type
 Tc=Object(Tp)    {объект - круг (наследник)}
   r : integer;
   Constructor Init(ax,ay,ar:integer;ac:word);
   Procedure Show; Virtual;
   Procedure Hide; Virtual;
 End;

Constructor Tc.Init;
Begin
 Inherited Init(ax,ay,ac);  {наследование инициализации}
 R:=ar
End;

Procedure Tc.Show;        {рисование круга}
 Begin
   Setcolor( c );
   Circle(x,y,r);
   SetFillStyle(solidfill, red);
   FloodFill(x,y, red);
 End;

Procedure Tc.Hide;
Begin
 Setcolor(GetBkColor);
 Circle(x,y,r);
 SetFillStyle(solidfill, GetBkColor);
 FloodFill(x,y, GetBkColor);
End;

Var
 T: Tp;
 C: Tc;

Begin
 gd:=detect;
 initgraph(gd,gm,'c:tpbgi');
 SetBkColor(White);
 SetColor(blue);
 Rectangle(50, 425, 600, 460);            {рисование рамки}
 OutTextXY(90, 440, Instr);
 T.Init(125,125,Magenta);      {инициализация 1 объекта}
 T.Show;                       {прорисовка объекта}
 T.MoveTo(15);                 {движение объекта}
 C.Init(125,125,15,red); {инициализация объекта 2}
 C.Show;                  {прорисовка объекта 2}
 While True do begin
   C.Moveto(15);           {движение объекта 2 }
 end;
end.


--------------------
Все у нас получится!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

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


Alex'у по порядку:
  1. Программа должна работать, по моему разумению, так:
    При загрузке появляется собственно лист для рисования и сбоку краткое описание - рисовать круг-клавиша, рисовать прямоугольник-клавиша, рисовать линию-клавиша, заливка-клавиша, сохранить-клавиша, выйти-ESC.

    При нажатии на одну из горячих клавиш появляется курсор в центре экрана (или где-нибудь еще) и внизу поясниловка. например, для круга - "выберите центр окружности, нажмите " ", определите диаметр "+" больше, "-" меньше, Enter - оставить так, Esc-убрать". (шаг увеличения/уменьшения равен шагу курсора, забит в переменных и не меняется), начало линии задается клавишей и дальше она рисуется за курсором (LineTo?) и т.д.

    Все фигуры (контуры) рисуются одним цветом, чтобы было проще с заливкой.
  2. Откат, в принципе, не нужен (было задано сделать, если смогу), но итоговое изображение должно сохраняться в файл (и, соответственно, загружаться из файла, при желании).

    Сохранение должно быть векторным. Кстати, а что это такое?
  3. Рисовать само-собой в цикле. Видимо на каждую фигуру свой объект. При этом кто кого будет наследовать, я еще не понял :'(
  4. Насчет отдельных методов - не понял. Я просто содрал программу из исходников, дополнил ее объектами из примеров к лекции по ООП, подкорректировал, как сумел и оно работает. Правда сделать так, чтобы кружочек появлялся там, где пропадает точка у меня не получилось sad.gif (см. выше)


--------------------
Все у нас получится!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Why Is Propecia So Expensive
 К началу страницы 
+ Ответить 

Сообщений в этой теме
demon9999   ООП и графический редактор   15.07.2003 3:54
___ALex___   Re: ООП и графический редактор   15.07.2003 12:23
demon9999   Re: ООП и графический редактор   15.07.2003 12:50
___ALex___   Re: ООП и графический редактор   15.07.2003 13:44
demon9999   Re: ООП и графический редактор   15.07.2003 15:05
buy prednisone online no perscri   Why Is Propecia So Expensive   1.10.2021 12:01
___ALex___   Re: ООП и графический редактор   15.07.2003 19:38
Noname   Re: ООП и графический редактор   15.07.2003 19:55
AlaRic   Re: ООП и графический редактор   15.07.2003 23:45
___ALex___   Re: ООП и графический редактор   15.07.2003 23:52
AlaRic   Re: ООП и графический редактор   16.07.2003 21:17
trminator   Re: ООП и графический редактор   18.07.2003 0:08
___ALex___   Re: ООП и графический редактор   18.07.2003 1:09
AlaRic   Re: ООП и графический редактор   18.07.2003 1:15
demon9999   Re: ООП и графический редактор   18.07.2003 3:03
demon9999   Re: ООП и графический редактор   18.07.2003 3:15
___ALex___   Re: ООП и графический редактор   18.07.2003 14:39
___ALex___   Re: ООП и графический редактор   18.07.2003 14:40
demon9999   Re: ООП и графический редактор   21.07.2003 6:38
___ALex___   Re: ООП и графический редактор   21.07.2003 14:59
sandman   Re: ООП и графический редактор   21.07.2003 21:55
___ALex___   Re: ООП и графический редактор   21.07.2003 22:18
trminator   Re: ООП и графический редактор   26.07.2003 17:06
trminator   Re: ООП и графический редактор   26.07.2003 17:52
trminator   Re: ООП и графический редактор   1.08.2003 15:27
demon9999   Re: ООП и графический редактор   12.08.2003 9:02
___ALex___   Re: ООП и графический редактор   12.08.2003 17:17
demon9999   Re: ООП и графический редактор   13.08.2003 6:35
Sir   Re: ООП и графический редактор   13.08.2003 13:02
___ALex___   Re: ООП и графический редактор   13.08.2003 22:09
demon9999   Re: ООП и графический редактор   14.08.2003 3:27
___ALex___   Re: ООП и графический редактор   14.08.2003 22:09
trminator   Re: ООП и графический редактор   17.08.2003 21:01
___ALex___   Re: ООП и графический редактор   18.08.2003 0:53
trminator   Re: ООП и графический редактор   18.08.2003 13:05
pascal65536   Re: ООП и графический редактор   13.02.2004 9:11


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

 





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