Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1128673276
Kacnep
2005-10-07 12:21
2005.11.20
Последовательное открытие в АДОTABLE нескольких таблиц.


14-1130239230
SergP.
2005-10-25 15:20
2005.11.20
Поиск совпадений цифр в списке чисел. Есть ли мысли?


2-1130599970
картограф
2005-10-29 19:32
2005.11.20
Перетаскивание


2-1130767781
stud
2005-10-31 17:09
2005.11.20
получить код ошибки


14-1130668994
Nic
2005-10-30 13:43
2005.11.20
У кого кокой опыт в области Shareware?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский