Fórum Erro de procedure #263537
27/12/2004
0
To criando uma tela mdichild com a função abaixo:
procedure TfrmPrincipal.criatela(TFormulario: TFormClass;
Formulario: TForm);
var
found, i: Integer;
begin
found:= -1;
for i:=0 to Screen.FormCount -1 do
if Screen.Forms[i] is TFormulario then
found:= i;
if found >= 0 then
begin
Screen.Forms[found].BringToFront;
Screen.Forms[found].WindowState:= wsNormal;
end
else
begin
Formulario:= TFormulario.Create(Self);
Formulario.Show;
end;
end;
crio um formulario Vendas:
criatela(frmVendas, TfrmVendas);
Só que o formulário criado não fica visivel para os outros formularios, tipo os datamodules que são crados na abertura do sistema. Neste formulario de venda, tenho um currencyedit que deve ser zerado na inserção de um novo registro. Então, no evento onnewrecord do clientedataset no datamodule tá assim:
frmVenda.CurrencyEdit1.value:= 0;
Quando executo e tento inserir um novo registro, da erro de acces violation.
Passando o mause en cima de frmVenda aparece: frmVenda=nil. Então é como se o datamodule não tivesse enxergando o frmvenda.
Se uso desta maneira, funciona sem problemas:
procedure TfrmPrincipal.Venda1Click(Sender: TObject);
var
found, i: Integer;
begin
found:= -1;
for i:=0 to Screen.FormCount -1 do
if Screen.Forms[i] is TfrmVenda then
found:= i;
if found >= 0 then
Screen.Forms[found].Show
else
begin
frmVenda:= TfrmVenda.Create(Self);
frmVenda.Show;
end;
end;
Stclara3107
Curtir tópico
+ 0Posts
28/12/2004
Massuda
procedure TfrmPrincipal.criatela(TFormulario: TFormClass; Formulario: TForm);
para
procedure TfrmPrincipal.criatela(TFormulario: TFormClass; [b:80823e06d1]var[/b:80823e06d1] Formulario: TForm);
Gostei + 0
29/12/2004
Peterks
Formulario: TForm);
e
var Formulario: TForm);
Ou em qualquer outra function ou procedure, passar o parametro como var .. etc
Gostei + 0
29/12/2004
Euclides
Formulario: TForm);
e
var Formulario: TForm);
Ou em qualquer outra function ou procedure, passar o parametro como var .. etc
Olá Peterks,
Acho que posso te ajudar !!!!!
Bom o parâmetro var passado antes de uma variavel indica que não será criada uma variavel na rotina e sim será passado o endereço de uma variavel ou seja quando voce chama uma função que utiliza o var essa variavel poderá ser alterada dentro da rotina e quando a rotina terminar ela estará com o valor que foi obtido dentro da rotina chamada sem o var o valor da sua rotina será o mesmo que foi passado para a rotina .....
Um pouco confuso mas acho que poderá ser bem interpretado melhor com testes ............
Espero que tenha ajudado...
Abraços
Gostei + 0
29/12/2004
Massuda
... Formulario: TForm);
Por outro lado, desta forma:
... var Formulario: TForm);
Gostei + 0