| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Свой объект для работы с графикой. |
| Автор: Cheburek 21.4.2006, 18:26 |
| Нужен свой класс для работы с графикой по типу TImage. Вообщем работать он должен так же просто только нужно поменять с-му координат при отображении точки и несколько очень спецефиеских методов добавить. Так же надо будет в него инкапсулировать некоторые данные к графике отношение вообще не имеющие. Другими словами помогите выбрать папу. И как это дело потом можно будет нарисовать на форме?? Что-то у меня нифига не получаеться(( |
| Автор: quard 21.4.2006, 19:04 | ||||
Создаёшь новый компонент
Папа - TGraphicControl или сам TImage |
| Автор: Cheburek 21.4.2006, 19:13 |
ссори за глупый вопрос - но это как в кратце.. если не сложно А что предпочтительнее?( Мне из методов и своиств TImage нужен минимум) И вообще не хочу я создавать новый компонент.. можно ли как-нибуть работать с TImage внутри другого класса? И если можно то с какими ограниениями? |
| Автор: quard 21.4.2006, 19:47 | ||
Ну если тебе нужен минимум то TGraphicControl В нем есть тока Канвас и еще несколько методов. Практически будешь работать с TCanvas с изменяемыми размерами...Много ручками приёдется писать(( |
| Автор: Cheburek 21.4.2006, 19:55 |
| quard, спасибо, но я наверно этим путем не пойду... не хочу принципиально создавать новый компенент, а класс нужен чисто для удобства.. попробую как-нибуть его обособить.. |
| Автор: quard 21.4.2006, 20:02 |
| Ок. Че не получится - спрашивай!))) |
| Автор: Alexeis 25.4.2006, 09:19 |
| Cheburek, нужен класс для хранения или вывода графики или и для того и другого |
| Автор: Cheburek 25.4.2006, 10:56 |
| alexeis1, реализует физическую модель - которую впоследствии нужно выводить на экране. Но дело в том, что все изображаемые примитвы должны так же изменять параметры физиеской модели. Т.Е. два эти понятия неразрывно связаны друг с другом и не плохо бы было бы написать свою реализацию функций TCanvas... но что-то у меня не получилось ... я пошел по другому пути ... я обстрагировал физику... и создал методы которые в качестве параметра имеют объект TImage ... все работает, но это оч. не удобно, когда по сути существет один объект TImage его приходиться вписывать как параметр в кучу методов, вопрос:Можно ли в качестве поля класса сделать указатель(или я не знаю что..), что бы обращаться к TImage напрямую внутри метода, а не так как у меня сделано? |
| Автор: 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); Если не нравится так длинно то можно
|
| Автор: Парис 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; |