Главная страница
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.05 c
1-1130340430
vers
2005-10-26 19:27
2005.11.20
TPopupMenu с 32-битными картинками


4-1127247140
ArtemESC
2005-09-21 00:12
2005.11.20
Как убрать строку с Caption


2-1130505625
gvv
2005-10-28 17:20
2005.11.20
График Gantt


2-1130596420
ruslan1
2005-10-29 18:33
2005.11.20
LPT порт


2-1130856983
Arazel
2005-11-01 17:56
2005.11.20
Быстрый пойск в масиве