Como criar um VCL Form sem .dfm?
As vezes precisamos criar um Form em tempo de execução, a partir de uma classe especializada de TForm, apenas com métodos, criando os componentes dinamicamente, ex:
type
TMyForm = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
E nos deparamos com o erro:
Project MyProject.exe raised exception class EResNotFound with message ‘Resource TMyForm not found’.
Solução:
- Crie o formulário chamando o método TMyForm.CreateNew().
begin FMyForm:= TMyForm.CreateNew(Application); FMyForm.AlphaBlend:= True; FMyForm.AlphaBlendValue:= AlphaBlendValue; FMyForm.FormStyle:= fsStayOnTop; end;
Atenção:
- Este formulário não pode criado automaticamente pelo projeto.
- Não pode ser criado pelos métodos Application.CreateForm() ou TMyForm.Create().

5 Comments
Olá Cesar,
Meu post nada tem a ver com este asunto.
Tenho procurado e não encontrei uma forma de criar um database Firebird com o DBExpress no RAD2010. Até na Embarcadero só há uma solicitação de suporte, mas nada ainda.
Voce teria algum exemplo?
Muito obrigado, e desculpe o local inadequado (creio).
Abraços.
Olá Jorge,
O DBXExpress não suporta este tipo de instrução SQL, que são instruções sem transação.
Eu fiz vários testes e li os fontes, a limitação está nos drivers DBX.
Usando todas as opções, chega a um ponto em que o comando SQL é enviado, e o driver inicia uma transação automaticamente, gerando o erro que esta instrução SQL não pode ser executada em uma transação, com os drivers atuais não há como contornar esta limitações.
A única forma é carregar a DLL FBClient.dll e fazer as chamadas vc mesmo, ou utilizar algum componente de terceiro para esta tarefa.
Se vc estiver precisando criar um banco vazio a partir da sua aplicação, uma solução temporária é criar ele, adicionar na sua aplicação como um recurso, e extrai-lo na hora de instalar, ou baixar um vazio do seu site.
Muito interessante este post, Cesar!
Um tempo atraz estava com essa necessidade ai tive q apelar para o .dfm em run-time!
Valeu.
Cesar, Obrigado pelo retorno.
Como tenho que criar o banco na hora, e que depende de alguns parametros, nao seria interessante criar ele vazio (e fica algo como “não consegui – é frustante”..rs.) Vou tentar pela api.
Irei pesquisar pra ver se encontro algo.
Obrigado, e sucesso!
Eu uso o IBdac, e nele é possivel inserir scripts para criação de banco, além de alguns plus (backup e restore).