fossean 2 / 2 / 0 Регистрация: 05.03.2021 Сообщений: 82 |
||||||||||||||||||||
1 |
||||||||||||||||||||
RAD XE3+ 25.10.2021, 13:28. Показов 1043. Ответов 11 Метки нет (Все метки)
Здравствуйте!
Далее создаю фрейм отдельно: File -> New -> VCL Frame и наследуюсь от TMyFrame:
Далее в dfm файле ‘CustomFrame’ меняю object на inherited:
При закрытии и открытие фрейма выходит ошибка: Error creating form: Ancestor for ‘…’ not found
Подключаю dfm файл к модулю:
Но выходит все та же ошибка. Что я делаю не так?
__________________
0 |
Житель Земли 2994 / 2987 / 391 Регистрация: 26.07.2011 Сообщений: 11,456 Записей в блоге: 1 |
|
25.10.2021, 15:33 |
2 |
Далее в dfm файле ‘CustomFrame’ меняю object на inherited: Бред. С какого перепугу ты что-то меняешь в DFM-файле?
1 |
2 / 2 / 0 Регистрация: 05.03.2021 Сообщений: 82 |
|
26.10.2021, 12:38 [ТС] |
3 |
DenNik, в таком случае, если оставить object, выходит следующая ошибка при открытии фрейма на визуальное редактирование: Error reading CustomFrame.TabOrder: Property TabOrder does not exist. То есть ide воспринимает фрейм как форму.
0 |
Verevkin Нарушитель 8388 / 4391 / 1009 Регистрация: 12.03.2015 Сообщений: 20,566 |
||||||
26.10.2021, 12:42 |
4 |
|||||
Бред. С какого перепугу ты что-то меняешь в DFM-файле? Видимо, так работает визуальное наследование.
Вложения
0 |
Модератор 8254 / 5477 / 2248 Регистрация: 21.01.2014 Сообщений: 23,578 Записей в блоге: 3 |
|
26.10.2021, 12:44 |
5 |
и затем наследоваться читаю-читаю и никак не пойму: зачем, для каких целей Вы чего-то там наследуете?
0 |
Нарушитель 8388 / 4391 / 1009 Регистрация: 12.03.2015 Сообщений: 20,566 |
|
26.10.2021, 12:49 |
6 |
читаю-читаю и никак не пойму: зачем, для каких целей Вы чего-то там наследуете? я прицепил там куски исходников, загляни
0 |
2 / 2 / 0 Регистрация: 05.03.2021 Сообщений: 82 |
|
26.10.2021, 13:00 [ТС] |
7 |
читаю-читаю и никак не пойму: зачем, для каких целей Вы чего-то там наследуете? Чтобы избавиться от дублирования полей и методов
0 |
5442 / 4266 / 1375 Регистрация: 14.04.2014 Сообщений: 19,204 Записей в блоге: 19 |
|
26.10.2021, 14:25 |
8 |
судя по тексту, все верно, но если у вас ошибка, то о чем-то вы умолчали
0 |
fossean 2 / 2 / 0 Регистрация: 05.03.2021 Сообщений: 82 |
||||||||
28.10.2021, 08:48 [ТС] |
9 |
|||||||
Всем спасибо за помощь, нашел решение моей проблемы. Изначально моя цель была создать модуль с описанием классов, наследуемых от TFrame, без dfm файла. Но так как если наследоваться в модуле с визуальным фреймом, он начинает думать что эта форма и выводит ошибку c TabOrder`ом. Чтобы всё заработало, нужно переназначить класс TFrame:
Тогда визуальная форма открывается нормально, без каких-либо ошибок. Добавлено через 8 минут
0 |
krapotkin |
28.10.2021, 10:25
|
Не по теме: обычно такие хакерские решения потом отличаются большими проблемами в поддержке
0 |
2 / 2 / 0 Регистрация: 05.03.2021 Сообщений: 82 |
|
28.10.2021, 11:36 [ТС] |
11 |
Не по теме: Не по теме: А какие проблемы ещё могут быть кроме порядка модулей? В HeidiSQL используется этот хак.
0 |
krapotkin |
29.10.2021, 11:16
|
Не по теме: недавно целая дискуссия была, сейчас вряд ли найду уже
0 |
Error creating form: Ancestor for ‘<ParentForm>’ not found
(OP)
5 Nov 09 03:10
Hi all,
First off, I use Delphi 6 upd pack 2 on WinXP.
I’ve been programming in Delphi for over a decade now. Up until recently, I used to include everything the project needed in the project source. One day I decided to make my own library(ies) for obvious reasons.
I started by making a TfrmMDIAppMain = class(TForm), a common ancestor for all my MDI apps’ mainforms. I added its location at the Library Path in Tools->Env.Options->Library.
As a second step, I created a test project with TfrmMDIAppDescMain = class(TfrmMDIAppMain) as its main form. The project compiled ok, even though TfrmMDIAppMain’s unit was not included in the project. But the next time I opened the project and doubleclicked on TfrmMDIAppDescMain, I got «Error creating form: Ancestor for ‘TfrmMDIAppDescMain’ not found». The source file is opened but the form cannot be displayed.
Now, if I open TfrmMDIAppMain in the editor (which by the way works by right-clicking it in the editor and selecting Find Declaration) and reopen its descendant, everything is fine and the form displays correctly.
After adding the parent’s path to every possible (environment and project) path I came to the conclusion that, in order for the error not to appear, one has to either add the parent form in the project or have the parent form opened before the descendant.
Is there any way to solve this? I mean, what’s the use of a library path / project search path if the IDE can’t utilize it?
Thanx
← →
Юрий Зотов ©
(2010-04-27 10:48)
[0]
Загружаю в IDE чужой проект. Билдится, запускается. Но при попытке поднять любую форму для визуального просмотра IDE выдает ошибку: «Error creating form: Ancestor for «TForm» not found». В других проектах все нормально.
Такая ошибка возникает (и гугль это подтвердил), если в проекте есть визуальное наследование форм и при попытке открыть форму-потомка форма-предок не открыта. Но тут-то IDE говорит о классе TForm, у которого вовсе нет никаих ресурсов. Поэтому и непонятно, в чем дело.
Может, кто-то уже с таким безобразием сталкивался?
← →
jack128_
(2010-04-27 10:58)
[1]
а если создать новую форму в этом проблемном проэкте — все нормально??
если в проэкте какая нить форма без визуального наследования и вложенных фреймов? Проверь её и выложи dfm»ку, а то так с ходу и не скажешь. ну и вообще проверь, нету где нить левой копии Forms.pas на винте
← →
sniknik ©
(2010-04-27 11:44)
[2]
приблизительно было.
в dfm сбилось (каким образом хз.) указание что форма наследуемая. стала как обычная. компилятор не пострадал, все inherited действовали как положено, компилировалось/работало правильно, но ide при открытии этой формы временами валился в ексепт (а также если форма просто присутствовала среди открытых, переходить и смотреть на нее для ошибки было необязательно, но так реже).
← →
sniknik ©
(2010-04-27 11:46)
[3]
> Но тут-то IDE говорит о классе TForm
TForm = class(Forms.TForm);
← →
_Гость_
(2010-04-27 13:47)
[4]
надо проверить, что написано в dfm первым
object или inherited
должно быть object
IDE иногда ошибочно пишет туда inherited, и начинается зоопарк
← →
Anatoly Podgoretsky ©
(2010-04-27 19:02)
[5]
> Юрий Зотов (27.04.2010 10:48:00) [0]
Вообще то он не совсем о TForm говорит, а о том, что не найден наследник от него.
← →
Игорь Шевченко ©
(2010-04-27 20:17)
[6]
> IDE иногда ошибочно пишет туда inherited, и начинается зоопарк
IDE ошибочно не пишет и чудес на свете не бывает
← →
Германн ©
(2010-04-28 02:52)
[7]
> IDE ошибочно не пишет
Это точно.
Но IDE пишет «туда» всегда «тупо». И читает при компиляции тоже всегда по шаблону. Возможно это и правильно. Возможно нет.
Не всегда «шаблонная» реализация хороша.
← →
Юрий Зотов ©
(2010-04-28 09:57)
[8]
В общем, так. Может, кому пригодится.
Визуального наследования и вложенных фреймов в проекте нет. Левых Forms.pas на диске тоже нет. Класс TForm нигде не переопределен. Это все сразу было проверено, иначе и писать сюда не стал бы.
Потом подумал, что надо проверить dfm. Сконвертил все dfm в текст (были бинарными) и проверил — везде object.
Вроде, все нормально. А глюк живет.
Удалил из проекта все формы и сохранил его. Потом перезагрузил IDE и те же формы добавил снова.
Глюк исчез. Значит, это действительно был глюк.
PS
Предок, Толя, предок. Что и странно.
← →
Anatoly Podgoretsky ©
(2010-04-28 11:23)
[9]
> Юрий Зотов (28.04.2010 09:57:08) [8]
Мне тоже странно, ни разу не видал такого сообщения. А глюк возможно связан с путями, лечился повторным добавлением форм.