Форум: "Основная";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизНе работает 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c