|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.04.2013, 11:22 | #1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
как изменить видимость методов в наследнике стандартного класса?
Где-то видел очень похожий пример - как сделать видимым Canvas в TPanel.
там создавали наследника от панельки и писали в нем: public property Canvas; и это работало - Canvas теперь виден был в новом классе Как такое же сделать с процедурами? Вот наследую я свой класс от панельки и хочу в нем использовать стандартный SetWidth, который описан еще в TControl, и он там в private. по аналогии с первым примером пытаюсь написать: public procedure SetWidth(value:integer); но компилятор, в принципе, справедливо сообщает что процедура объявлена, но не реализована... Вот можно ли ему как-то объяснить, что это не новая процедура, а попытка перенести старую в public ? Заранее спасибо =) |
15.04.2013, 12:56 | #2 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
Если бы она была protected (что и было в property Canvas) то можно было бы написать СВОЮ процедуру(метод) в котором вызывать нужную. Но не private. Смысл private как раз в том чтобы никто и никогда не смог бы напрямую пользоваться ею (только сам класс). А для Tcontrol (и тем паче TPanel) есть же свойство public(а может protected) property Width которое как раз и "открывает" данную процедуру (выполняет действия по ее вызову).
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 15.04.2013 в 12:59. |
|
15.04.2013, 15:46 | #3 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
Дело в том, что мне как раз и нужны эти имена свойств.
чтобы в моем компоненте было свойство Width, которое бы вызывало стандартные действия + действия моего компонента на случай изменения размера - перерассчет координат, перерисовка и т.п. |
16.04.2013, 09:57 | #4 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Для изменения реакций (включения дополнительных действий) есть динамические(dinamic) и виртуальные (virtual) методы.
Так в Tcontrol есть Код:
Код:
Цитата:
А для перерисовки вообще-то есть procedure Paint; virtual; и много много других на все другие случаи.
программа — запись алгоритма на языке понятном транслятору
|
|
16.04.2013, 13:16 | #5 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
evg_m, а если мне нужны разные действия на изменение высоты или ширины? =)
проверять в Resize что изменилось? а если при вызове свойства ширины, но с таким же параметром, как сейчас, нужно выполнить только действия, предназначенные для события ширины? да что-то вроде C.Width:=100; // some actions C.Width:=100; вы, конечно скажете, что это глупо, мол, зачем устанавливать ширину 100, если она и так 100, но вы не можете предусмотреть всех возможных ситуаций, а у меня иногда возникает потребность в таких действиях. а перекрытый Paint во всех моих компонентах используется лишь с одной целью - отрисовать Frame на Canvas окна. Frame - это битмап, который есть в каждом моем графическом компоненте. его размеры равны размерам формы и отрисовка самого компонента производится именно на него. этот Frame - что-то вроде заднего буффера, поскольку если сразу рисовать все на Canvas окна, то неизбежно мелькание (и никакой DoubleBuffered здесь не поможет). это первая причина. вторая - иногда делаю компоненты, у которых отрисовка некоторых элементов сложнее, чем отрисовка всего Frame в итоге. поэтому вся отрисовка происходит в процедуре Render, по МОЕМУ специальному запросу (например в случае изменения размеров), а не по сообщению винды. а в случае последнего, как я уже говорил - готовый Frame рисуется на Canvas окна. С минусами, конечно не поспоришь - растяни компонент на весь экран и получишь огромного размера битмап в памяти... Но, если предложите более оптимальный способ отображения без мелькания - перепишу все свои компоненты =) Последний раз редактировалось xrob; 16.04.2013 в 14:18. |
16.04.2013, 13:24 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
OnCanResize и OnResize формы чем не нравятся? В первом из них вообще можно запретить изменение размеров или подавить их своими значениями
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
16.04.2013, 13:57 | #7 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
Аватар, мало информации.
Так мы узнаем только что что-то изменилось, а что именно - не знаем. А что бы вы сделали? Если вы едете на машине и прокололи колесо, вы менять все будете, или только проколотое? вот в случае OnResize вы, похоже, все собираетесь менять... Проблему, описанную в первом посте я решил радикально: Код:
TControl.Set-WHTL (пока не разобрался какую роль они играют), но все работает и результатом я доволен. Последний раз редактировалось xrob; 16.04.2013 в 14:01. |
16.04.2013, 14:03 | #8 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 16.04.2013 в 14:05. |
|
16.04.2013, 14:31 | #9 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
в посте #5 я выделил то, что я понимаю под "мало информации"
возник теперь другой вопрос, очень похожий на то что мне объясняли. Как узнать что окно изменило видимость? т.е. была запущена private процедура SetVisible. Последний раз редактировалось xrob; 16.04.2013 в 15:59. |
16.04.2013, 16:02 | #10 | ||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
Цитата:
Код:
Цитата:
Цитата:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 16.04.2013 в 16:10. |
||||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
перегрузка методов класса (с++) | Antej | Общие вопросы C/C++ | 2 | 24.07.2012 17:58 |
Видимость полей и методов | sich_zp | Общие вопросы C/C++ | 19 | 16.08.2011 15:05 |
массив методов класса | DartDayring | Общие вопросы C/C++ | 0 | 07.12.2010 20:00 |
видимость переменных и методов в c# | Sparky | Помощь студентам | 5 | 26.07.2010 20:20 |
Типы данных стандартного класса | mauar | Общие вопросы Delphi | 10 | 23.05.2009 18:24 |