• 0
Sign in to follow this  
nicolasbraz

Procedure para criar formulários

Question

Estou com o seguinte código para criar formulários.

procedure Tfrmprincipal.CriaForm (teste:TFormClass; teste2:Tform);
begin
    if not assigned (teste2) then
    begin
        Screen.Cursor := crHourGlass;
       application.createForm(teste, teste2);
      teste2.show;
      Screen.Cursor := crDefault;
  end;
end;
Ele cria o formulário tranquilo o problema é que eu tenho uma biblioteca onde eu preciso alterar algumas funções dos formulários de cadastro, só que quando eu faço referencia aos formulários criados por essa procedure eu recebo o erro de "Acess Violation". O código que eu posso dar como exemplo que me retorna erro é o seguinte.
Frm_Clientes.KeyPreview := True;

Share this post


Link to post
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Jhonas,

Eu usei o exemplo do segundo link que é exatamente o que eu quero!

O problema é que o erro continua, qualquer outro form, unit e etc que eu tente acessar o formulário criado à partir dessa função é retornado o erro.

Share this post


Link to post
Share on other sites
  • 0

coloque o seu código que fica mais facil te ajudar

o erro de "Acess Violation". pode estar acontecendo se voce colocar o comando no OnCreate do form

abraço

Share this post


Link to post
Share on other sites
  • 0

Jhonas,

Usei o código.

function TForm1.CriaFormModal(Formulario: TFormClass): Boolean;
begin
With Formulario.Create(Application) do
begin
Try
Result := ShowModal = mrYes;
Form2.Caption := 'aaa';
Finally
Free;
end;
end;
end;
E no botão eu chamo o formulário assim.
If CriaFormModal(TForm2) then
ShowMessage('Pressionou OK!\')
else
ShowMessage('Pressionou Cancela!\')

Usei o exemplo do site (código acima)! E também o meu código ambos dão o mesmo erro.

Eu tinha o código no create e dava o erro passei o código para o show o erro continua então eu coloquei o código em um botão e o erro continua também!

Share this post


Link to post
Share on other sites
  • 0

Não encontrei nenhum erro

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function CriaFormularioClientes:Boolean;
begin
   With TForm.Create(Application) do
   begin
      Try
        Result := ShowModal = mrOk;
      Finally
        Free;
      end;
   end;
end;

function CriaFormModal(Formulario : TFormClass) : Boolean;
begin
   With Formulario.Create(Application) do
   begin
      Try
        Result := ShowModal = mrYes;
      Finally
        Free;
      end;
   end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   If CriaFormModal(TForm) then
      ShowMessage('Pressionou OK!')
   else
      ShowMessage('Pressionou Cancela!')

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   If CriaFormularioClientes = true then
      ShowMessage('Pressionou OK!')
   else
      ShowMessage('Pressionou Cancela!')
end;

end.

abraço

Share this post


Link to post
Share on other sites
  • 0

Não tem erro no código! Ele chama perfeitamente outro form mas agora tenta alterar alguma propriedade do formulário criado por uma biblioteca (UNIT).

É assim que ele retorna o Acess Violation.

Share this post


Link to post
Share on other sites
  • 0

é melhor voce passa todo o seu código, se não fica dificil saber o que voce esta fazendo

abraço

Share this post


Link to post
Share on other sites
  • 0

Jhonas, Eu testei um exemplo aqui e não estou encontrando mais eu usei esse código como base porém eu não chamava o formulário como modal!

Vou tentar reproduzir o mesmo código e já posto aqui.

Share this post


Link to post
Share on other sites
  • 0
O problema é que meus formulários são MDI e essa função chama eles como MODAL.

então troque o codigo

Result := ShowModal = mrOk;

Result := Show = mrOk;

abraço

Share this post


Link to post
Share on other sites
  • 0

Coloquei o seguinte código.

function CriaFormulario:Boolean;
begin
   With TForm.Create(Application) do
   begin
      Try
        Result := Show = mrOk;
      Finally
        Free;
      end;
   end;
end;

Ele não compila e gera erro :(

O compilador aponta para a linha do mrOK.

Edited by nicolasbraz

Share this post


Link to post
Share on other sites
  • 0

Foi mal ... coloquei no lugar errado

seria isso

function CriaFormularioClientes:Boolean;

begin

frmClientes := TfrmClientes.Create(Application);

//frmClientes.ShowModal;

frmClientes.Show;

If frmClientes.ModalResult = mrOk Then

Result := True

Else

Result := False;

frmClientes.Free;

frmClientes := Nil;

End;

abraço

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this