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

Вниз

не регистрируется класс RegisterClass   Найти похожие ветки 

 
_Guest_   (2008-07-01 11:46) [0]

Есть модуль:

unit UFDCE;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  ComCtrls, StdCtrls;

type
 TFDCE = class(TForm)
   DateTimePicker1: TDateTimePicker;
   procedure FormResize(Sender: TObject);
 end;

implementation

{$R *.DFM}

procedure TFDCE.FormResize(Sender: TObject);
begin
 DateTimePicker1.Height := ClientHeight;
 DateTimePicker1.Width := ClientWidth;
end;

initialization
 RegisterClass(TFDCE);

end.


Далее в программе, если искать этот класс FindClass("FDCE");
, то возникает ошибка: "класс не найден".
Если выполнять регистрацию при создании главной формы, происходит то же самое. Подскажите это глюк или я что-то неправильно делаю? Спасибо.


 
Palladin ©   (2008-07-01 12:19) [1]

а тебе не кажется что TFDCE и FDCE это разные вещи?


 
Ega23 ©   (2008-07-01 12:20) [2]

FindClass("TFDCE");
?


 
_Guest_   (2008-07-01 12:23) [3]


> Ega23 ©   (01.07.08 12:20) [2]
> FindClass("TFDCE");

Да, конечно FindClass("TFDCE"); , это опечатка здесь, а не в программе, извините.


 
_Guest_   (2008-07-01 12:36) [4]

Похоже, я что-то неправильно делаю или про какую директиву не знаю: у меня ни один класс не регистрируется, TListBox например.


 
Поросенок Винни-Пух ©   (2008-07-01 13:08) [5]

если класс не найден, значит либо имя неправильное, либо register не вызывается вовсе


 
_Guest_   (2008-07-01 13:20) [6]


> Поросенок Винни-Пух ©   (01.07.08 13:08) [5]
> если класс не найден, значит либо имя неправильное,  

Что значит не правильное? Это про мою опечатку - тогда я все еще раз проверил - нет пишу имя класса, а не экземпляра, совпадает с зарезервированным - тоже нет - пробовал, что еще может быть?

> либо register не вызывается вовсе

в отладчике на RegisterClass вствет, внутрь (в Classes) не пускает. Похоже, конечно, что не вызывается, понять бы еще почему?
Кроме как быть потомком TPersistent других ограничений на класс нет?


 
Поросенок Винни-Пух ©   (2008-07-01 13:23) [7]

Похоже, конечно, что не вызывается, понять бы еще почему?

Например потому, что модуля нет ни в одном из юзез


 
Поросенок Винни-Пух ©   (2008-07-01 13:24) [8]

initialization
ShowMessage("bla bla bla");
RegisterClass(TFDCE);

end.


 
Игорь Шевченко ©   (2008-07-01 13:29) [9]


> Например потому, что модуля нет ни в одном из юзез


достаточно, чтобы он был перечислен в .dpr


 
_Guest_   (2008-07-01 13:39) [10]


> Поросенок Винни-Пух ©   (01.07.08 13:23) [7]
> Например потому, что модуля нет ни в одном из юзез

есть, там же используются ссылки на класс типа TFDCE(...), так что компилятор бы ругался.

> Поросенок Винни-Пух ©   (01.07.08 13:24) [8]
> initialization
> ShowMessage("bla bla bla");
> RegisterClass(TFDCE);
> end.

Я новичок, и думал что останова в отладчике [5] достаточно для контроля выполнения строки, но вариант с бла-бла тоже проходит, т.е. сообщение я вижу.
Вопрос похоже проще: при создании главного окна выполняю RegisterClass(TListBox);
Затем по кнопке: FindClass("TListBox"); - все ошибка: класс не найден. Почему? Явно что-то упускаю, но найти не могу.


 
_Guest_   (2008-07-01 13:44) [11]


> Игорь Шевченко ©   (01.07.08 13:29) [9]
> > Например потому, что модуля нет ни в одном из юзез
>  достаточно, чтобы он был перечислен в .dpr

Чувствую себя не в своей тарелке и думаю можетя уже того, модуль не подключил, но нет в dpr он перечислен. Да и бог с ними с модулями, у меня внутри одного [10] ничего не работает.


 
alexBlack ©   (2008-07-01 13:50) [12]

Обратите внимание на параметр:

function RegisterClass(const lpWndClass: TWndClass): ATOM; stdcall;

и посмотрите как делается регистрация в forms.pas


 
Leonid Troyanovsky ©   (2008-07-01 13:50) [13]


> _Guest_   (01.07.08 13:39) [10]

> Вопрос похоже проще: при создании главного окна выполняю
> RegisterClass(TListBox);
> Затем по кнопке: FindClass("TListBox"); - все ошибка: класс
> не найден. Почему? Явно что-то упускаю, но найти не могу.

Ты чего-то не договариваешь.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-07-01 13:52) [14]


> alexBlack ©   (01.07.08 13:50) [12]

> Обратите внимание на параметр:

Это немного из другой оперы.

--
Regards, LVT.


 
Игорь Шевченко ©   (2008-07-01 13:52) [15]

Вот пример, ищи отличия у себя

program FormProp;

uses
 Forms,
 main in "main.pas" {Form1},
 other in "other.pas" {Form2};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


unit main;

interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation
uses
 TypInfo;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 F: TCustomForm;
begin
 F := TFormClass(FindClass("TForm2")).Create(Self);
 try
   SetStrProp(F, "StrProp", "Hello, world!");
   F.ShowModal;
 finally
   F.Free;
 end;
end;

end.


unit other;

interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm2 = class(TForm)
   Edit1: TEdit;
   procedure FormShow(Sender: TObject);
 private
   FStrProp: string;
 published
   property StrProp: string read FStrProp write FStrProp;
 end;

var
 Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
begin
 Edit1.Text := FStrProp;
end;

initialization
 RegisterClass(TForm2);
end.


 
_Guest_   (2008-07-01 14:12) [16]


> alexBlack ©   (01.07.08 13:50) [12]
> Обратите внимание на параметр:function RegisterClass(const
> lpWndClass: TWndClass): ATOM; stdcall;и посмотрите как делается
> регистрация в forms.pas

Может мы о разных RegisterClass говорим? Я о том что в Classes а он:
procedure RegisterClass(AClass: TPersistentClass);


> Leonid Troyanovsky ©   (01.07.08 13:50) [13]
Ты чего-то не договариваешь.--Regards, LVT.

Может, но сам не знаю чего. Могу по-подробнее. Использую компонент, которому нужно передать строку с именем класса. В момент создания формы (не автоматически), которой принадлежит этот компонент получаю сообщение: класс TFDCE не найден. Ладно, думаю, чего там этот компонент делает внутри себя, выкидываю его и ищу класс сам FindClass("TFDCE"); Все компонент ни причем, не регистрируется класс. Причину понять не могу, делаю простой пример уже описанный в [10] и все равно получаю ошибку.


 
Игорь Шевченко ©   (2008-07-01 14:18) [17]


> В момент создания формы (не автоматически), которой принадлежит
> этот компонент получаю сообщение: класс TFDCE не найден.
>  


в uses формы не указан юнит для этого компонента ?


 
Leonid Troyanovsky ©   (2008-07-01 14:23) [18]


> _Guest_   (01.07.08 14:12) [16]

>  делаю простой пример уже описанный в [10] и все равно получаю
> ошибку.

Сделай тоже самое, в новом проекте.
Если будут ошибка при поиске листбокса - код сюда.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-07-01 14:30) [19]


> Игорь Шевченко ©   (01.07.08 14:18) [17]

> в uses формы не указан юнит для этого компонента ?

Компилятор не пропустит RegisterClass.

--
Regards, LVT.


 
Игорь Шевченко ©   (2008-07-01 14:37) [20]

Leonid Troyanovsky ©   (01.07.08 14:30) [19]

Я про это:


> В момент создания формы (не автоматически), которой принадлежит
> этот компонент получаю сообщение: класс TFDCE не найден


 
_Guest_   (2008-07-01 14:46) [21]


> Игорь Шевченко ©   (01.07.08 13:52) [15]
> Вот пример, ищи отличия у себя

Ваш пример работает, спасибо.

> Leonid Troyanovsky ©   (01.07.08 14:23) [18]
> Сделай
> тоже самое, в новом проекте.Если будут ошибка при поиске
> листбокса - код сюда.

Мой пример на пустом проекте тоже работает, тоже спасибо.

Дело за малым - найти что не так с основным проектом, в котором десяток форм и куча кода, но понятно, что это мой геморой. Спасибо всем, не пинайте сильно, если через какое то время снова отвлеку. Ибо откуда ковырять даже не представляю: в проекте кроме отображения данных в TStringGrid из базы ничего нет. Начну пока выкидывать все последовательно.


 
_Guest_   (2008-07-01 15:17) [22]

Все выкинул кроме главной формы - не работает. Совершенно случайно ни у кого идей нет чем можно задавить связку RegisterClass - FindClass?


 
Игорь Шевченко ©   (2008-07-01 15:44) [23]

кода мы не увидим ?


 
Плохиш ©   (2008-07-01 15:49) [24]


> _Guest_   (01.07.08 15:17) [22]
> Все выкинул кроме главной формы - не работает. Совершенно
> случайно ни у кого идей нет чем можно задавить связку RegisterClass
> - FindClass?

Держишь кнопку Ctrl и кликаешь мышаком на букавах RegisterClass, после смотришь в появившиеся букавы и много думаешь...


 
Anatoly Podgoretsky ©   (2008-07-01 16:20) [25]

> _Guest_  (01.07.2008 15:17:22)  [22]

Задавить можно кодом, твоим кодом.


 
_Guest_   (2008-07-01 17:22) [26]


> Игорь Шевченко ©   (01.07.08 15:44) [23]
> кода мы не увидим ?

Кода много, что относится к теме определить затрудняюсь, за что извините.


> Anatoly Podgoretsky ©   (01.07.08 16:20) [25]
> > _Guest_  (01.07.2008 15:17:22)  [22]Задавить можно кодом,
>  твоим кодом.

Опытным путем выяснил, что к этой ситуации приводит uses QControls  в одном из модулей, который прицепился к проекту с другим модулем, а я не досмотрел. Впредь наука. А дальше интересно в чем причина на самом деле и что кроме вцл нельзя ничего использовать?


 
Игорь Шевченко ©   (2008-07-01 17:25) [27]


> Опытным путем выяснил, что к этой ситуации приводит uses
> QControls  в одном из модулей


ну так у него небось свой RegisterClass есть


 
_Guest_   (2008-07-02 09:45) [28]


> Игорь Шевченко ©   (01.07.08 17:25) [27]
> ну так у него небось свой
> RegisterClass есть

Это было бы слишком просто :), в нем самом нет, но у него тоже есть uses.
И кстати в этом случае, как я понимаю, прокатило бы Classes.RegisterClass , чего не произошло. Конечно, мог бы сам догадаться и начать выкидывать подключенные модули, не отвлекая других, но увы, не догадался сразу.
В любом случае все заработало. Большое спасибо. Есть еще вопрос, но надо создать отдельную тему.



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

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

Наверх




Память: 0.54 MB
Время: 0.022 c
6-1190972431
botaniQ
2007-09-28 13:40
2008.08.03
Переход в TWebBrowser...


2-1215154260
uno-84
2008-07-04 10:51
2008.08.03
Проблема с переходом по ссылке


4-1193628432
031178
2007-10-29 06:27
2008.08.03
Как программно поменять частоту обновления экрана


2-1214936261
Bear
2008-07-01 22:17
2008.08.03
Длинный запрос в AdoQuery


4-1194154748
San1712
2007-11-04 08:39
2008.08.03
Как можно программно отследить перемещения по реестру человека ?