|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.05.2011, 23:40 | #1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
указатель на TCanvas
я создаю класс для отображения визуального компонента на форме
в создании и работе с окнами я не особо шарю, поэтому создаю такой класс, который будет себя отрисовывать на канвасе формы. а вообще следуя логике что TCanvas = TCanvas, то на любом канвасе, хоть на кнопке, хоть в битмапе. для реализации этой идеи я создал в классе поле в котором будет храниться указатель на Canvas, на котором класс будет себя рисовать. PCanvas:^TCanvas; а после создания экземпляра класса написать PCanvas:=@Form1.Canvas; а в самом классе процедура procedure Draw; begin PCanvas^.Draw(0,0,Frame); // нарисовать себя на указаном канвасе end; и все бы ничего, но строчка PCanvas:=@Form1.Canvas; выдает ошибку - Variable Required поэтому вопрос, в чем я не прав и как правильно реализовать такую идею? и еще один вопрос. что если создать в классе поле Canvas:TCanvas; а потом присвоить ему Canvas формы: Class.Canvas:=Form1.Canvas; ? насколько я себе представляю, это будет хрень. что-то типа если переменной b присвоить значение переменной a, а потом изменять переменную b. значение переменной a при этом не изменится. или в случае с канвасами это работает по-другому? |
12.05.2011, 00:41 | #2 | ||
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
TCanvas - это объект (класс) и при объявлении его в разделе переменных (var):
Код:
У формы есть уже Canvas (создается при создании формы) и заменять его нет никакой необходимости. Его просто надо применять в самой форме и не городить огород. В Дельфи переменные, ссылающиеся на объекты и есть указатели на них (не явные указатели, т.е. к ним не применяются символ "^"). Если необходимо рисовать в своем классе, то надо в нем объявить поле класса TCanvas, создать его и рисовать в нем не трогая канвы других компонентов. Цитата:
Поле будет содержать точно такую же ссылку на созданный в объекте класса Canvas и при изменении свойств в одном из них и там, и там будут изменения. Только не очень понятна логика такого извращения. Иметь еще указатель на один и тот же TCanvas? Тогда надо осознавать какую задачу он будет решать. Цитата:
Последний раз редактировалось Прик; 12.05.2011 в 01:13. |
||
12.05.2011, 01:00 | #3 | |
Пользователь
Регистрация: 28.05.2010
Сообщений: 82
|
Цитата:
Код:
Последний раз редактировалось WhiteSpirit; 12.05.2011 в 01:06. |
|
12.05.2011, 01:21 | #4 | |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
эта фраза
Цитата:
я просто раньше не знал что это так. я думал Cnv это и есть сам канвас, а если получается что сам по себе канвас лежит где-то, а Cnv это ссылка на него, то тогда получается мою задачу можно решить просто: Test.MyCanvas:=Form1.Canvas; WhiteSpirit, там у меня слово Class не в смысле класс, а в смысле имя создаваемого экземпляра класса, так что оно там не лишнее. а за совет - спасибо! воспользуюсь когда-нибудь в будующем, сейчас не хочу возиться с наследованиями и тем более со стандартными классами делфи. всем спасибо за внимание =) |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Incompatible types TCanvas and TBitmap | athleet | Общие вопросы Delphi | 2 | 13.07.2011 04:01 |
[Del] TCanvas.pixels → HBitMap | Alex Cones | Win Api | 11 | 21.11.2009 19:54 |
Графика в Делфи TCanvas | Summerrain | Помощь студентам | 1 | 19.12.2008 02:39 |
Как работать с TCanvas - на PaintBox1 программа должна рисовать полигон | Михаил Юрьевич | Общие вопросы Delphi | 16 | 04.01.2008 15:31 |
TListView; не рисует цветом TCanvas | JetAPI | Компоненты Delphi | 9 | 24.08.2007 22:22 |