Создаю форму во время выполнения программы, вот код:
class TMyForm : public TForm
{
public:
virtual __fastcall TMyForm();
};
__fastcall TMyForm::TMyForm() : TForm(Application)
{
}
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
TMyForm *Form;
Form = new TMyForm(); // Здесь вылетает ошибкаdelete Form;
}
В момент создания формы вылетает ошибка "Project Test.exe raised exception class EResNotFound with message 'Resource TMyForm not found'. Process stopped. Use Step or Run to continue."
Чего я еще не сделал?
Здравствуйте, lsv, Вы писали:
lsv>Я не создавал форму в дизайн режиме, поэтому у меня нет такого файла. Мне нужно просто создать форму.
Форма (TForm) подразумевает наличие dfm. Без вариантов. Возможно можно ей подсунуть какой-нибудь TStream* из которого она будет сериализоваться, но проще забабахать пустой dfm, чем ковыряться в потрохах VCL, честное слово.
Здравствуйте, Владик, Вы писали: В>Форма (TForm) подразумевает наличие dfm. Без вариантов. Возможно можно ей подсунуть какой-нибудь TStream* из которого она будет сериализоваться, но проще забабахать пустой dfm, чем ковыряться в потрохах VCL, честное слово.
В>Форма (TForm) подразумевает наличие dfm. Без вариантов.
Как раз именно TForm и не подразумевает (см. ниже).
В>проще забабахать пустой dfm, чем ковыряться в потрохах VCL, честное слово.
А чё там ковыряться то? Вот:
constructor TCustomForm.Create(AOwner: TComponent);
begin
GlobalNameSpace.BeginWrite;
try
CreateNew(AOwner);
if (ClassType <> TForm {т.е. для TForm сработает}) and not (csDesigning in ComponentState) then
begin
Include(FFormState, fsCreating);
tryif not InitInheritedComponent(Self, TForm) then
raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);//Вот тут и вылетаетfinally
Exclude(FFormState, fsCreating);
end;
if OldCreateOrder then DoCreate;
end;
finally
GlobalNameSpace.EndWrite;
end;
end;
Сам только что проверял, вот так работает:
TForm *F = new TForm(Application);
F->Show();
И ещё. Если интересно, можно заглянуть в Dialogs.pas, там как раз формы без всяких DFM создаются.
Здравствуйте, ak_miass, Вы писали:
_>Здравствуйте, Владик, Вы писали: _>Сам только что проверял, вот так работает: _>
_>TForm *F = new TForm(Application);
F->>Show();
_>
_>И ещё. Если интересно, можно заглянуть в Dialogs.pas, там как раз формы без всяких DFM создаются.
Данный случай работает, это-то понятно. Но мне нужно сделать свой класс, унаследованный от TForm.
Мне это нужно для того, чтобы вставить обработку сообщения, пример:
Здравствуйте, Владик, Вы писали:
lsv>>Я не создавал форму в дизайн режиме, поэтому у меня нет такого файла. Мне нужно просто создать форму.
В>Форма (TForm) подразумевает наличие dfm. Без вариантов. Возможно можно ей подсунуть какой-нибудь TStream* из которого она будет сериализоваться, но проще забабахать пустой dfm, чем ковыряться в потрохах VCL, честное слово.
Ну да?? Интересно, я, оказывается, иногда делал невозможное!