Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vainqueurbr

erro em aplicação MDI (Formulário Pai e Filhos)

Recommended Posts

:mellow: Estou tendando criar uma aplicação MDI, já criei o formulário principal e os forms MDIChild

porém ao chamar uma função clicando no botão Novo, onde é chamado a função codigoauto() é

exibido o seguinte erro:

 

Project Projeto1.exe raised exception class EAccessViolation with message

'Access violation at address 004B85FA in module Project1.exe' Read of

Address 00000304. Process Stopped. Use Step or Run to continue.

Sendo que o erro se dá no ponto Frmform2.Edit1.Seltext := dm1.tabCat.Fieldvalues['Codigo']+1, ou

em qualquer referência ao Form2 com recebimento de atribuição de valor, como mostra os exemplos abaixo

 

var

Frmform2: TFrmform2;

 

implementation

 

uses udm1;

 

{$R *.dfm}

 

A função código automático verifica se já existem registros, se existir cria um registro com o valor do último código + 1

 

Function CodigoAuto(): String;

begin

dm1.tabCat.Last;

if dm1.tabCat.FieldValues['Codigo'] >= 1 then

Frmform2.Edit1.Seltext := dm1.tabCat.Fieldvalues['Codigo']+1

else

Frmform2.Edit1.Seltext := '1';

 

dm1.tabCat.Insert;

Frmform2.Edit1.SetFocus;

end;

 

a outra função

 

A função Registroautual apresenta o código do registro atual na edit1

 

Function Registroatual(): String;

Var Vcod :String;

begin

begin

if Form2.Edit1.text = '' then

begin

Dm1.tabCat.First;

end;

end;

Vcod := dm1.tabCat.FieldValues['Codigo'];

Form2.Edit1.text := Vcod;

 

 

Depois das funções vem o chamado da função no botão novo

 

procedure TFrmForm2.Button1Click(Sender: TObject);

begin

codigoauto();

end;

 

*****************************

*

* Código

* [.......]

*

* Descrição

* [.......................]

*****************************

 

O que ocorre é que bem na chamada da rotina Frmform2.Edit1.Seltext já é dado um erro de violação de chave

porém se logo após o function declarar novamente var Frmform2: TFrmform2; o mesmo consegue passar, mas na chamada de uma outra

função em que é refrenciado o nome do formulário dentro da função o mesmo erro ocorre, mesmo se for declarado novamente o form

o retorno que está dando no form é nil, bem se fosse um formumário SDI não necessitaria nem de declara apenas atribur o formulário

e funcionaria normalmentee, porém com o MDI não é a mesma coisa pelo que parece.

A dúvida é o porque do erro, e como o corrigir utilizando o form MDI mesmo, pois como SDI, não tenho problema algum.

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como dica, verifique se os forms estão sendo criados automaticamente pelo programa (Project -> Options -> Forms -> Auto-create Forms), se sim realmente é estranho o erro como comentou, e também se é MDI, os forms são apresentados automaticamente quando criados sem necessidade de chamar o Show.

 

Caso contrário, precisará de criar os forms antes de usá-los de qualquer maneira, abaixo um exemplo de código para criar o form em tempo de execução:

 

if Assigned(Form1) then

Application.CreateForm(Tform1, Form1); // verifica se o form já foi criado, se não cria

 

 

Também verifique se os forms MDI foram setados corretamente: os forms MDIChild tem que ter um MDI Pai e só pode existir 1 na aplicação. O form pai deve ter a propriedade FormStyle igual a fsMDIForm

 

Espero ter ajudado, abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.