|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.12.2010, 16:53 | #1 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
ГЛЮКИ при наследовании фреймов Delphi 7
Здравствуйте.
Хотел написать конкретную проблему, но, замечал раньше, а сейчас, при попытке решить эту проблему разными способами, выяснилось, что делфя просто категорически не желает нормально работать с фреймами, созданными на основе какого-либо. Вот, для примера. есть фрейм, пусть, для определённости, frmRec есть его наследник - frmRecNew у наследника, чтобы он заработал, в тексте файла-наследника фрейма заменил вручную object frmRecNew: TfrmRec на inherited frmRecNew: TfrmRec фрейм создаётся динамически (т.е. нужный тип определяется в программе) при старте delphi периодически вываливается сообщение, что-то вроде ancestor TfrmRecnew not found (пишу по памяти), но фиг с ним, всё компилировалось, работало. Сообщение позже даже появляться перестало В общем, всё работало прекрасно, пока, в один момент не докидал на наследника контролов. И тут же поправил контролы у предка (которые наследуется) Теперь, при попытке инициализации фрейма, валится с ошибкой "Control 'Label_new' has no parent window." Полчаса долбился, пытаясь разобраться, наконец-то сделал так. Удалил все новые контролы, на наследнике, и наставил их заново, на те же места, точно так же называя - всё работает! ошибка не вылазит Позже специально пробовал - открываю (блокнотом) ufrmSpecERI.pas - вставляю в объявлении новый контрол, открываю ufrmSpecERI.dfm, делфёй (может, в этом дело??), вставляю там его же объявление Код:
Удаляю вручную созданный лабел, кладу на форму новый, называю его LabelNew, даже значения свойств дал те же самые, - проверяю, в файле фрейма записано то же самое, что я до этого вставлял вручную, в объявлении - тоже. Всё работает. Мистика какая-то. Может, это нормально, и уже на сто раз встречалось? Погуглил - ничего толкового не нашёл |
09.12.2010, 17:28 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Сколько работаю с фреймами, запомнил одну истину - с этим зверем нужно аккуратнее. Накидал один раз компонентов на него, все на экземпляре куда вставляешь компоненты не кидай, не удаляй на экземпляре, не дыши на него.
Потому многие программисты и не рекомендуют Фреймы, ибо в них очень легко нарваться на неприятность.
I'm learning to live...
|
10.12.2010, 05:57 | #3 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
Спасибо, что-то подобное я и предполагал.
Но вот что мне не даёт покоя. В чём принципиальная разница, как эти фреймы создавать? Почему, когда я угрохал из фрейма проблемную кнопку, и поставил её заново, в дезигн-тайме, - проблема исчезла? Ведь код фрейма, в pas-файле и при просмотре dfm - идентичен! Более того - если этот же код после удаления в файлы фрейма вписать вручную - кнопка на форме появляются, но после её вызова - те же проблемы.... по идее - какая разница, каким образом созданы pas и dfm-файлы? полагаю, тут только два варианта. 1. У delphi хранятся какие-то хвосты, о создании 2. (по мне - наиболее вероятный) что-то важное хранится в dfm-файле, ведь это не простая текстуха. может, кто-нибудь разбирал, что за зверь такой - формат dfm ? Моя необходимость разобраться в том, что вся логика программы завязана на этой куче наследников фрейма, и всё работает прекрасно, просто офигенно, но теперь появилось опасение, что неожиданно в какой-то (как обычно, самый неудачный) момент всё ёкнется. Как бы подстраховаться. В тексте формы, и в текстовом виде dfm-файла ничего сложного нет. Где же возникают сложности? |
10.12.2010, 09:02 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ничего не могу посоветовать кроме как... Сменить стратегию.
Не работал с фреймами глубоко по вышеуказанной причине. Меня вполне устраивает их обычное контейнерское назначение. Динамически на них ничего создавать не стараюсь, дабы избежать сложностей.
I'm learning to live...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как вызываются конструкторы объектов при наследовании? | TwiX | Общие вопросы C/C++ | 10 | 17.11.2010 13:59 |
TMediaPlayer DisplayRect - глюки при изменении | Dmitry333 | Мультимедиа в Delphi | 6 | 22.03.2010 22:35 |
глюки при численном интегрировании (Delphi) | Bazookин | Помощь студентам | 5 | 23.04.2009 13:12 |
Перегрузка == при наследовании | paramon | Общие вопросы C/C++ | 5 | 17.06.2008 00:17 |