Форум: "Начинающим";
Текущий архив: 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