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

 
  1. Jorge Rosivan disse:

    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.

  2. Cesar disse:

    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.

  3. Carlos Gonzaga disse:

    Muito interessante este post, Cesar!
    Um tempo atraz estava com essa necessidade ai tive q apelar para o .dfm em run-time!
    Valeu.

  4. Jorge Rosivan disse:

    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!

  5. Roberto disse:

    Eu uso o IBdac, e nele é possivel inserir scripts para criação de banco, além de alguns plus (backup e restore).

 

Leave a Comment

 




XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>