ООП и формы
Модератор: Модераторы
CynicRus, спасибо, я попробую
Из азов ООП
Каждый класс не зависимо от его предков и потомков создается в своем разделе памяти.
Эти участки памяти никак не пересекаются с памятью предков и генетической памятью. Потомок только
в момент своего создания хватает ЗНАЧЕНИЯ свойств предка. И все. На этом взаимодействия
предка и потомка заканчиваются, как правило. Если не принять специальные меры.
Да предок и потомок имеют ссылки на общие методы, а вот свойства у них находятся
по разные стороны баррикады. При вызове метода, первый параметр (который вы не видите)
это ссылка на область памяти класса из которого метод дергается. Self так называемый (иди, например, this в других языках программирования).
Соответственно, доступ к полям класса, отсчитывается от этого Self. Если вы волевым решением
Присвоите этому Self другой адрес, получите по носу.
Упрощенно, класс в памяти выглядит как массив ссылок на методы и свойства.
Воспользоваться свойствами предка можно. Для этого вы в класс предка делегируете как одно из полей
класс предка. Ну и дальше ковыряйтесь с ними по вашему усмотрению.
Каждый класс не зависимо от его предков и потомков создается в своем разделе памяти.
Эти участки памяти никак не пересекаются с памятью предков и генетической памятью. Потомок только
в момент своего создания хватает ЗНАЧЕНИЯ свойств предка. И все. На этом взаимодействия
предка и потомка заканчиваются, как правило. Если не принять специальные меры.
Да предок и потомок имеют ссылки на общие методы, а вот свойства у них находятся
по разные стороны баррикады. При вызове метода, первый параметр (который вы не видите)
это ссылка на область памяти класса из которого метод дергается. Self так называемый (иди, например, this в других языках программирования).
Соответственно, доступ к полям класса, отсчитывается от этого Self. Если вы волевым решением
Присвоите этому Self другой адрес, получите по носу.
Упрощенно, класс в памяти выглядит как массив ссылок на методы и свойства.
Воспользоваться свойствами предка можно. Для этого вы в класс предка делегируете как одно из полей
класс предка. Ну и дальше ковыряйтесь с ними по вашему усмотрению.
Разговор про визуальное наследование в рамках IDE 
vada, я так понимаю, что вы тоже решили поучить меня азам ООП, не поняв суть моего вопроса? Может, все-таки не стоит так торопиться нести просвещение в массы? Для начала разберитесь с разницей между DesignTime и RunTime, потом ВНИМАТЕЛЬНО почитайте мой вопрос, потом (если к этому времени до вас еще не дойдет) выполните набор действий, которые я рекомендовал выполнить господину DedFrend 3-4 поста назад. А потом я с удовольствием обсужу с вами азы ООП, Self и прочие тонкости.
S_Gur Вы, коллега, хам. Сами почитайте свой первый пост. Из которого следует что вы ничего не понимаете в ООП.
vada, понятно. Вместо того, чтобы обратить внимание на то, что уже два человека объяснили вам, что вы не понимаете, о чем идет речь, вы предпочли обострить конфликт. Бывает, и таких видели. Изучайте азы ООП дальше, "коллега"... 
Добавлено спустя 1 час 30 секунд:
В общем, результатов я не добился. Пытался и закрывать формы, и удалять из проекта, чтобы добавить после изменения в предке. Те же яйца, только в профиль. Подозреваю, что все будет работать, если спроектировать систему полностью, и прописывать каждого предка от начала и до конца перед созданием потомков, чтобы потом совсем ничего не изменять. Поэтому пока с этим проектом перехожу в обычную Дельфи и пишу там - благо, там таких проблем нет. Потом попробую модуль за модулем перенести все это в Лазарус. Но такая работа, конечно, дико некомфортная.
Добавлено спустя 1 час 30 секунд:
В общем, результатов я не добился. Пытался и закрывать формы, и удалять из проекта, чтобы добавить после изменения в предке. Те же яйца, только в профиль. Подозреваю, что все будет работать, если спроектировать систему полностью, и прописывать каждого предка от начала и до конца перед созданием потомков, чтобы потом совсем ничего не изменять. Поэтому пока с этим проектом перехожу в обычную Дельфи и пишу там - благо, там таких проблем нет. Потом попробую модуль за модулем перенести все это в Лазарус. Но такая работа, конечно, дико некомфортная.
serbod, это все хорошо, но проблема в том, что в течении большего времени я при разработке вношу изменения то в одного, то в другого предка, а конечный потомок при этом в идеале должен находиться у меня перед глазами, чтобы оттестировать эти изменения. Если после каждого такого изменения пересобирать Лазарус, компоненты и проект, разработка несколько затянется...
В принципе, я даже особо не помню, когда я в Дельфях натыкался на такую проблему - разве что известная проблема с тулбарами, но она, кажется, несколько не из той серии
serbod писал(а):Нужно удалить все временные файлы, пересобрать Lazarus, пересобрать компоненты и проект.
serbod, имхо вы сильно сгущаете краски. По крайней мере простейший пример вроде даже работает.
iskander писал(а):простейший пример вроде даже работает
Насколько простейший? У меня уже на дедушке (предке предка) начинаются проблемы
S_Gur писал(а):У меня уже на дедушке (предке предка) начинаются проблемы
Т.е. при одном уровне наследования (типа, родитель-потомок) при изменении чего-либо в родителе, у потомка наследованые свойства автоматом меняются, а при двух уровнях (типа, родитель-потомок-потомокПотомка), у потомокПотомка при изменениях в родителе ничего не меняется, я правильно понял?
А в Дельфи второй случай работал?
Vadim, я вчера перенес этот проект на Дельфи и сейчас работаю с 6-ю уровнями наследования, периодически внося доработки в каждый из предков. Пока никаких проблем. Я, правда, еще не возился с тулбарами, поэтому очень надеюсь, что в 10.3.2 эту проблему исправили, но в любом случае у меня есть для нее решение. Больше никаких траблов пока не вижу. В Лазарусе я создавал форму, кидал на нее грид и на FormShow писал самый примитивный Grid.SetFocus. После чего создавал от нее потомка, работающего со справочником списковых переменных, а от этого потомка - форму, которая работает с конкретным справочником (передает предку идентификатор этого справочника). При открытии этой формы грид не фокусируется. Но если перекрыть ему FormShow и уже в конечном наследнике прописать тот же самый Grid.SetFocus, все отрабатывает. Это одна из многих проблем, на которые я натыкался. Честно говоря, не особо тестировал, через сколько поколений начинаются проблемы, вряд ли это будет жестко фиксированное количество
S_Gur писал(а):У меня уже на дедушке (предке предка) начинаются проблемы
Хмм, звучит забавно...
Простейший пример - три формы, каждая унаследована от предыдущей, с одним ActionList,
несколькими контролами и обработчиком OnClick. Но сильно долго его мучать мне как-то лениво было.
iskander, пробовали после создания в дизайне всех трех форм убивать акции из ActionList? Из всех наследников убиваются?
Мне не сильно интересна эта фича, поэтому я просто подобавлял/поудалял на первой форме несколько контролов/экшенов и проверил, что они добавляются/исчезают в дочерних формах. Если для вас она важна, сильно рекомендую лазаревский форум и багтрекер.
Кстати, одному мне кажется, что сегодня День Программиста?
Кстати, одному мне кажется, что сегодня День Программиста?
