Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.27;
Скачать: CL | DM;

Вниз

Проблемы с компонентом с Ancestor от TForm   Найти похожие ветки 

 
NetKnight ©   (2003-03-15 12:44) [0]

Хочу сделать компонент-форму под свои нужды, но почему-то в этом участке происходит эксепшн

constructor TNKForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDataLink:=TDataLink.Create;
end;

Когда пытается вызвать метод Create выдаёт ошибку: "Project Project1.exe raised exception class EResNotFound with message "Resourse TNKForm not found". Proccess stopped..."
Покопался в исходниках TForm и TCustomForm и нашёл следующую вещь:

constructor TCustomForm.Create(AOwner: TComponent);
begin
GlobalNameSpace.BeginWrite;
try
CreateNew(AOwner);
if (ClassType <> TForm) and not (csDesigning in ComponentState) then
begin
Include(FFormState, fsCreating);
try
if not InitInheritedComponent(Self, TForm) then
raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);
finally
Exclude(FFormState, fsCreating);
end;
if OldCreateOrder then DoCreate;
end;
finally
GlobalNameSpace.EndWrite;
end;
end;

if not InitInheritedComponent(Self, TForm) then
raise EResNotFound.CreateFmt(SResNotFound, [ClassName]); - вот где происходит исключение, но почему ??!
Кто-нить может помочь ?


 
Юрий Зотов ©   (2003-03-15 15:09) [1]

Вероятно, отсутствует директива {$R *.RES}. Добавьте ее и используйте репозиторий.


 
NetKnight ©   (2003-03-17 00:55) [2]

А какой res ? Он же файл ресурса тогда искать будет! Всё должно кодом выполнятся..


 
Юрий Зотов ©   (2003-03-17 02:27) [3]

Именно. InitInheritedComponent ищет ресурсы и не находит их. Отсюда и ошибка.

Если ресурсы Вашей форме не нужны - переписывайте конструктор. Только учтите, что после этого придется забыть об использовании визуального проектирования такой формы в design-time, простого набрасывании на нее компонентов и пр. Все, как Вы и сказали, придется делать кодом. И я полагаю, что объем этого кода окажется соизмеримым с объемом ресурса формы, если бы он был.

Так что не вижу смысла. Специально для подобных целей Delphi имеет репозиторий. Почему бы его не использовать? Неужели задача такая уж нестандартная, что ее нельзя решить нормальными средствами и без головной боли?


 
icWasya ©   (2003-03-17 09:51) [4]

а если совсем невмоготу, создай пустую форму, сохрани в ресурс, а потом делай всё кодом


 
NetKnight ©   (2003-03-17 12:55) [5]

Юрий Зотов, ресурсы ей не нужны, т.к. её вид полностью зависит от ситуации, всё кодом генерируется... Визуальное использование не нужно, только в run-time.

Как использовать рипозиторий я не знаю, не сталкивался...
А как конструктор для неё писать ? Так же как и в TCustomForm ?


 
Юрий Зотов ©   (2003-03-17 14:13) [6]

Наверное, так же, только убрав загрузку ресурсов и проверку OldCreateOrder:

constructor TMyForm.Create(AOwner: TComponent);
begin
GlobalNameSpace.BeginWrite;
try
CreateNew(AOwner);
if not (csDesigning in ComponentState) then DoCreate
finally
GlobalNameSpace.EndWrite
end
end;


 
NetKnight ©   (2003-03-17 15:58) [7]

Юрий Зотов
Уже разобрался.. Сянькс.. :)



Страницы: 1 вся ветка

Текущий архив: 2003.03.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
6-88098
PrettyFly
2003-02-02 22:06
2003.03.27
DNSName -> IP


4-88301
Timon
2003-01-24 22:12
2003.03.27
Клавиатура !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


1-87965
Deadlock
2003-03-18 04:25
2003.03.27
совместимость прог компиленных на D5 с Win95


3-87865
Jaxtor
2003-03-06 15:20
2003.03.27
Доступ к значению генератора


1-87913
OxyGenASG
2003-03-17 10:22
2003.03.27
ExpressQuantumGrid от Developer Express