![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не регистрируется класс RegisterClass [D6, WinXP]
_Guest_ © (2008-07-01 11:46:00)Есть модуль:
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');
, то возникает ошибка: "класс не найден".
Если выполнять регистрацию при создании главной формы, происходит то же самое. Подскажите это глюк или я что-то неправильно делаю? Спасибо.
_Guest_ (2008-07-02 09:45:00) [1]
> Игорь Шевченко © (01.07.08 17:25) [27]
> ну так у него небось свой
> RegisterClass есть
Это было бы слишком просто :), в нем самом нет, но у него тоже есть uses.
И кстати в этом случае, как я понимаю, прокатило быClasses.RegisterClass, чего не произошло. Конечно, мог бы сам догадаться и начать выкидывать подключенные модули, не отвлекая других, но увы, не догадался сразу.
В любом случае все заработало. Большое спасибо. Есть еще вопрос, но надо создать отдельную тему.
Игорь Шевченко (2008-07-01 17:25:00) [2]
> Опытным путем выяснил, что к этой ситуации приводит uses
> QControls в одном из модулей
ну так у него небось свой RegisterClass есть
_Guest_ (2008-07-01 17:22:00) [3]
> Игорь Шевченко © (01.07.08 15:44) [23]
> кода мы не увидим ?
Кода много, что относится к теме определить затрудняюсь, за что извините.
> Anatoly Podgoretsky © (01.07.08 16:20) [25]
> > _Guest_ (01.07.2008 15:17:22) [22]Задавить можно кодом,
> твоим кодом.
Опытным путем выяснил, что к этой ситуации приводитuses QControlsв одном из модулей, который прицепился к проекту с другим модулем, а я не досмотрел. Впредь наука. А дальше интересно в чем причина на самом деле и что кроме вцл нельзя ничего использовать?
Anatoly Podgoretsky (2008-07-01 16:20:00) [4]> _Guest_ (01.07.2008 15:17:22) [22]
Задавить можно кодом, твоим кодом.
Плохиш (2008-07-01 15:49:00) [5]
> _Guest_ (01.07.08 15:17) [22]
> Все выкинул кроме главной формы - не работает. Совершенно
> случайно ни у кого идей нет чем можно задавить связку RegisterClass
> - FindClass?
Держишь кнопку Ctrl и кликаешь мышаком на букавах RegisterClass, после смотришь в появившиеся букавы и много думаешь...
Игорь Шевченко (2008-07-01 15:44:00) [6]кода мы не увидим ?
_Guest_ (2008-07-01 15:17:00) [7]Все выкинул кроме главной формы - не работает. Совершенно случайно ни у кого идей нет чем можно задавить связку RegisterClass - FindClass?
_Guest_ (2008-07-01 14:46:00) [8]
> Игорь Шевченко © (01.07.08 13:52) [15]
> Вот пример, ищи отличия у себя
Ваш пример работает, спасибо.
> Leonid Troyanovsky © (01.07.08 14:23) [18]
> Сделай
> тоже самое, в новом проекте.Если будут ошибка при поиске
> листбокса - код сюда.
Мой пример на пустом проекте тоже работает, тоже спасибо.
Дело за малым - найти что не так с основным проектом, в котором десяток форм и куча кода, но понятно, что это мой геморой. Спасибо всем, не пинайте сильно, если через какое то время снова отвлеку. Ибо откуда ковырять даже не представляю: в проекте кроме отображения данных в TStringGrid из базы ничего нет. Начну пока выкидывать все последовательно.
Игорь Шевченко (2008-07-01 14:37:00) [9]Leonid Troyanovsky © (01.07.08 14:30) [19]
Я про это:
> В момент создания формы (не автоматически), которой принадлежит
> этот компонент получаю сообщение: класс TFDCE не найден
Leonid Troyanovsky (2008-07-01 14:30:00) [10]
> Игорь Шевченко © (01.07.08 14:18) [17]
> в uses формы не указан юнит для этого компонента ?
Компилятор не пропустит RegisterClass.
--
Regards, LVT.
Leonid Troyanovsky (2008-07-01 14:23:00) [11]
> _Guest_ (01.07.08 14:12) [16]
> делаю простой пример уже описанный в [10] и все равно получаю
> ошибку.
Сделай тоже самое, в новом проекте.
Если будут ошибка при поиске листбокса - код сюда.
--
Regards, LVT.
Игорь Шевченко (2008-07-01 14:18:00) [12]
> В момент создания формы (не автоматически), которой принадлежит
> этот компонент получаю сообщение: класс TFDCE не найден.
>
в uses формы не указан юнит для этого компонента ?
_Guest_ (2008-07-01 14:12:00) [13]
> 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 13:52:00) [14]Вот пример, ищи отличия у себя
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.
Leonid Troyanovsky (2008-07-01 13:52:00) [15]
> alexBlack © (01.07.08 13:50) [12]
> Обратите внимание на параметр:
Это немного из другой оперы.
--
Regards, LVT.
Leonid Troyanovsky (2008-07-01 13:50:00) [16]
> _Guest_ (01.07.08 13:39) [10]
> Вопрос похоже проще: при создании главного окна выполняю
> RegisterClass(TListBox);
> Затем по кнопке: FindClass('TListBox'); - все ошибка: класс
> не найден. Почему? Явно что-то упускаю, но найти не могу.
Ты чего-то не договариваешь.
--
Regards, LVT.
alexBlack (2008-07-01 13:50:00) [17]Обратите внимание на параметр:
function RegisterClass(const lpWndClass: TWndClass): ATOM; stdcall;
и посмотрите как делается регистрация в forms.pas
_Guest_ (2008-07-01 13:44:00) [18]
> Игорь Шевченко © (01.07.08 13:29) [9]
> > Например потому, что модуля нет ни в одном из юзез
> достаточно, чтобы он был перечислен в .dpr
Чувствую себя не в своей тарелке и думаю можетя уже того, модуль не подключил, но нет в dpr он перечислен. Да и бог с ними с модулями, у меня внутри одного [10] ничего не работает.
_Guest_ (2008-07-01 13:39:00) [19]
> Поросенок Винни-Пух © (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');- все ошибка: класс не найден. Почему? Явно что-то упускаю, но найти не могу.
Игорь Шевченко (2008-07-01 13:29:00) [20]
> Например потому, что модуля нет ни в одном из юзез
достаточно, чтобы он был перечислен в .dpr