Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];

Вниз

не регистрируется класс 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.006 c
2-1214920523
Pasha L
2008-07-01 17:55
2008.08.03
Как узнать глобальные координаты контрола ?


15-1213852980
Отличительный
2008-06-19 09:23
2008.08.03
Отличие приложения от программы


15-1213701783
No_Dead
2008-06-17 15:23
2008.08.03
«околорезюмный» сабж


2-1215150495
Владимир
2008-07-04 09:48
2008.08.03
Вывод документа MS Word на форму


2-1214985863
Анна
2008-07-02 12:04
2008.08.03
В CreateProcess задать координаты и размеры приложения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский