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

Вниз

Не работает FindClass   Найти похожие ветки 

 
BFG9k ©   (2005-10-26 15:42) [0]


var FormClass:TClass;
begin
  FormClass:=FindClass("TForm");
end;


Ошибка - Class TForm not found. Но он есть и активно используется в программе (и так со всеми классами).  В чем дело ?


 
Leonid Troyanovsky ©   (2005-10-26 15:48) [1]


> BFG9k ©   (26.10.05 15:42)  

> Ошибка - Class TForm not found. Но он есть и активно используется
> в программе (и так со всеми классами).  В чем дело ?


RTFM: RegistreClass

--
Regards, LVT.


 
BFG9k ©   (2005-10-26 15:58) [2]

Усложним задачу.

Я регистрирую свой класс в пакете (BPL) с помощью RegisterClass. После того как основная программа загрузила пакет с помощью LoadPackage, класс не находится с помощью FindClass. Так и должно быть ?


 
Reindeer Moss Eater ©   (2005-10-26 16:00) [3]

>Я регистрирую свой класс в пакете (BPL) с помощью RegisterClass.

Остается проверить, вызывается ли код регистрации класса при загрузке BPL


 
Digitman ©   (2005-10-26 16:05) [4]


> BFG9k ©   (26.10.05 15:58) [2]


RegisterClass() делает свое дело в "своем" экземпляре RTTI

Если у вызывающего и вызываемого модулей разные RTTI, то и ожидать "чудес" от FindЧегоТоТам() не следует.


 
BFG9k ©   (2005-10-26 16:08) [5]

RTTI один и тот же. Проблему решил - RegisterClass должен вызываться не в том модуле, где этот класс объявляется. Иначе ошибка - класс уже зарегестрирован.


 
Игорь Шевченко ©   (2005-10-26 16:17) [6]

В обычном приложении такой код тоже вызовет ошибку, несмотря на то, что класс TForm есть.
А вот если перед этим вызывать RegisterClass(TForm), то ошибки не будет.


> RegisterClass() делает свое дело в "своем" экземпляре RTTI
>
> Если у вызывающего и вызываемого модулей разные RTTI


RegisterClass делает свое дело в своем экземпляре Classes.ClassList, RTTI тут как бы не причем, если речь идет о пакетах


 
Игорь Шевченко ©   (2005-10-26 16:21) [7]

BFG9k ©   (26.10.05 16:08) [5]


> Проблему решил - RegisterClass должен вызываться не в том
> модуле, где этот класс объявляется. Иначе ошибка - класс
> уже зарегестрирован


Ерунда какая.

unit SpaATBP;
interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 SpaConditionForm, StdCtrls, SpaPoint, SpaRouteConditionForm, ActnList,
 Buttons;

type
 TfSpaATBP = class(TfSpaRouteConditionForm)
 end;

implementation

{$R *.DFM}

{ TfSpaATBP }

initialization
 RegisterClass(TfSpaATBP);
end.

Все прекрасно работает


 
Digitman ©   (2005-10-26 16:23) [8]


> Игорь Шевченко ©   (26.10.05 16:17) [6]


> RTTI тут как бы не причем


логично.
ошибку признаю.
дело - в экземпляре списка, к которому происходит обращение при вызове FindClass().


 
BFG9k ©   (2005-10-26 17:32) [9]


> Все прекрасно работает



TfSpaRouteConditionForm - что это ?

Я пробовал с потомками обычной формы.


 
Игорь Шевченко ©   (2005-10-26 17:51) [10]

BFG9k ©   (26.10.05 17:32) [9]


> TfSpaRouteConditionForm - что это ?


Наследник TForm :)


> Я пробовал с потомками обычной формы.


Покажи, как ты пробовал и как не получилось.

У меня получилось даже так:

type
 TForm1 = class(TForm)
   procedure Button4Click(Sender: TObject);
 end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 RegisterClass(TForm1);
end;


Без всяких ошибок. Delphi5.


 
BFG9k ©   (2005-10-26 18:32) [11]

Думаю, что ключевой момент в том, что я создавал форму с момощью меню New-Form. Создавал в пакете, повторюсь еще раз. Delphi7.  Регистрировал так :


type
TForm1 = class(TForm)
//ля-ля-ля
end;

implementation

{$R *.DFM}

initialization
RegisterClass(TForm1);
end.



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

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

Наверх




Память: 0.49 MB
Время: 0.032 c
9-1120200139
Pasechnick
2005-07-01 10:42
2005.11.20
GLScene и ATI


4-1127385325
Wistler
2005-09-22 14:35
2005.11.20
COM-порт и XP


14-1130476416
CHES
2005-10-28 09:13
2005.11.20
Мне сегодня исполнилось 10 000 дней.


10-1108124068
PVOzerski
2005-02-11 15:14
2005.11.20
R6025 - pure virtual function call


14-1130473666
PZ
2005-10-28 08:27
2005.11.20
Билл Гейтс - с днем рождения