Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Свой объект для работы с графикой.


Автор: Cheburek 21.4.2006, 18:26
Нужен свой класс для работы с графикой по типу TImage. Вообщем работать он должен так же просто только нужно поменять с-му координат при отображении точки и несколько очень спецефиеских методов добавить. Так же надо будет в него инкапсулировать некоторые данные к графике отношение вообще не имеющие. 

Другими словами помогите выбрать папу. И как это дело потом можно будет нарисовать на форме?? Что-то у меня нифига не получаеться(( 

Автор: quard 21.4.2006, 19:04
Цитата

И как это дело потом можно будет нарисовать на форме


Создаёшь новый компонент 

Цитата

Другими словами помогите выбрать папу


Папа - TGraphicControl или сам TImage 

Автор: Cheburek 21.4.2006, 19:13
Цитата(quard @  21.4.2006,  19:04 Найти цитируемый пост)
Создаёшь новый компонент 

ссори за глупый вопрос - но это как в кратце.. если не сложно  smile 


Цитата(quard @  21.4.2006,  19:04 Найти цитируемый пост)
Папа - TGraphicControl или сам TImage 

А что предпочтительнее?( Мне из методов и своиств TImage нужен минимум)


И вообще не хочу я создавать новый компонент..  можно ли как-нибуть работать с TImage внутри другого класса? И если можно то с какими ограниениями?
  

Автор: quard 21.4.2006, 19:47
Цитата

А что предпочтительнее?( Мне из методов и своиств TImage нужен минимум)

Ну если тебе нужен минимум то TGraphicControl
В нем есть тока Канвас и еще несколько методов. Практически будешь работать с TCanvas с изменяемыми размерами...Много ручками приёдется писать((
 

Автор: Cheburek 21.4.2006, 19:55
quard, спасибо, но я наверно этим путем не пойду... не хочу принципиально создавать новый компенент, а класс нужен чисто для удобства.. попробую как-нибуть его обособить.. 

Автор: quard 21.4.2006, 20:02
Ок. Че не получится - спрашивай!))) smile  

Автор: Alexeis 25.4.2006, 09:19
Cheburek, нужен класс для хранения или вывода графики или и для того и другого smile  

Автор: Cheburek 25.4.2006, 10:56
alexeis1, реализует физическую модель - которую впоследствии нужно выводить на экране. Но дело в том, что все изображаемые примитвы должны так же изменять параметры физиеской модели. Т.Е. два эти понятия неразрывно связаны друг с другом и не плохо бы было бы написать свою реализацию функций TCanvas... но что-то у меня не получилось ... я пошел по другому пути ... я обстрагировал физику... и создал методы которые в качестве параметра имеют объект TImage ... все работает, но это оч. не удобно, когда по сути существет один объект TImage его приходиться вписывать как параметр в кучу методов, вопрос:Можно ли в качестве поля класса сделать указатель(или я не знаю что..), что бы обращаться к TImage напрямую внутри метода, а не так как у меня сделано?  

Автор: Alexeis 25.4.2006, 11:16
далеко не все понятно например:

Цитата(Cheburek @  25.4.2006,  09:56 Найти цитируемый пост)
 все изображаемые примитвы должны так же изменять параметры физиеской модели
 примитив - пасивный отображаемый элемент - как он что-то может менять?

Цитата(Cheburek @  25.4.2006,  09:56 Найти цитируемый пост)
 написать свою реализацию функций TCanvas
 - чем родные не устраивают?


Цитата(Cheburek @  25.4.2006,  09:56 Найти цитируемый пост)
 ... я пошел по другому пути ... я обстрагировал физику
 - а вот это наилучший из возможных вариантов!!!

А следующее я вообще не могу понять, может как-нибудь по другому сказать...

Цитата(Cheburek @  25.4.2006,  09:56 Найти цитируемый пост)
Можно ли в качестве поля класса сделать указатель(или я не знаю что..), что бы обращаться к TImage напрямую внутри метода, а не так как у меня сделано?  


Может вы имели ввиду это Form1.Image1.picture.... - т.е. явно использовать имеющийся экземпляр Image1?
  

Автор: Cheburek 25.4.2006, 18:21
рисуем мы примитив -"пасивный отображаемый элемент" - но одновременно этот примитив - являеться физическим объектом - и его тоже надо описать... а что бы не было таких ошибок, что физ. об. создан но на экране не отображаеться или на экране отображаеться но как таковой не существует делаю я эти действия(создания физ. об. и его рисование) делаються  одновременно, в одной фнкции(точнее методе, класса который реализует. физ. модель), для этого приходиться в качестве параметра использовать объект TImage (ну что бы это дело можно было нарисовать), и кстати оч. много таких примитивов, т.е и методов и в каждом приходиться в качестве параметра использовать об. TImage, как бы можно сделать так, то бы можно было сразу создавать ссылку но один объект TImage при создании класса описывающую  физ. модель, и далее при создании всех примитивов ссылаться сразу на cсылку на  TImage ... короче я запутался объяснять, надо примерчик будет написать.. 

Автор: Alexeis 26.4.2006, 09:04
Cheburek, Если решается данная конкретная задача, то не за чем делать какие-то ссылки. Можно привязаться к уже созданному TImage. И рисавать на нем на прямую, например так
Form1.Image1.picture.bitmap.Canvas.LineTo(x, y);
Если не нравится так длинно то можно

Код

With Form1.Image1.picture.bitmap.Canvas 
do
  Begin
     LineTo(x, y);
     .............
  end;
 

Автор: Парис 1.5.2006, 16:00
Цитата
...рисуем мы примитив -"пасивный отображаемый элемент" - но одновременно этот примитив - являеться физическим объектом - и его тоже надо описать...


Я когда-то сделал примерно так:

I_Physical = INTERFACE{интерфейс объекта, как физического}
{описывем только то, что отностися к физике}
END;

I_Graphics = INTERFACE{интерфейс объекта, как графического}
{описывем только то, что отностися к отрисовке}
END;

C_Physical = CLASS(TInterfacesObject,  I_Physical){класс, физического объекта}
{реализация физики}
END;

C_OurObject = CLASS(C_Physical, I_Graphics){результирующий класс}
{реализация графики}
PROCEDURE Paint(Canvas: TCanvas);
END;

то есть в качестве папы взял бы TInterfacesObject, а потом наращивал бы на него всё, что мне надо.

Так как множество этих объектов, как физических объединено во что-то, на чём их надо отображать (например, если C_OurObject - это бильярдный шар, то множество этих шаров объединяет бильярдный стол), то был бы создан класс, состоящий в клиентском отношении с C_OurObject:

С_OurSuperObject = CLASS ({А тут любой класс, который больше навится.}){тот самый "бильярдный стол"}
OurObjects = Array Of C_OurObject;
PROCEDURE Paint;{отрисовывает себя на своей же канве и говорит, чтобы OurObjects перерисовались на его канве. Что - то вроде Self.OurObjects[0].Paint(Self.Canvas)}
END;  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)