Fórum Abrir form #295638
15/09/2005
0
eu utlizo o seguinte código para criar o form
if frmPessoaProcura = nil then application.CreateForm(TfrmPessoaProcura,frmPessoaProcura) else frmPessoaProcura.show;
até aí tudo bem
depois eu fiz uma função que fará uma verificação e depois executara o código acima
Procedure Abrirfrm(VTform:TcomponentClass; Vform: Tform; Vacesso:string); begin //verificar acesso if Vacesso <> ´´ then begin //fazer a verificação if module.TableVUsuario.FieldByName(Vacesso).AsBoolean <> true then begin messagedlg(´Acesso restrito, para acessar está funcão contate o administrador do sistema´,mtwarning,[mbok],0); exit; end; end; if Vform = nil then application.CreateForm(VTform, Vform) else Vform.Show; end;
e chamo da seguinte maneira
abrirfrm(TFrmPessoaCadastro,FrmPessoaCadastro,´GUFPESSOA´); frmpessoacadastro.pessoa = ´CLIENTE´;
O FORM ABRE NORMAL, porém a próxima linha da erro, como se form frmpessacadastro não tivesse sido criado
Sistemald
Curtir tópico
+ 0Posts
15/09/2005
Massuda
Procedure Abrirfrm(VTform:TcomponentClass; Vform: Tform; Vacesso:string);
Procedure Abrirfrm(VTform:TcomponentClass; var Vform: Tform; Vacesso:string);
O [b:cc7ca37fb6]var[/b:cc7ca37fb6] vai fazer com que o form criado dentro da procedure seja retornado no parametro Vform; sem o [b:cc7ca37fb6]var[/b:cc7ca37fb6], esse valor não é retornado (já pensou em fazer uma function ao invés de uma procedure?).
Gostei + 0
15/09/2005
Sistemald
Devo mudar a chamada a procedure?
Gostei + 0
15/09/2005
Massuda
function Abrirfrm(VTform:TcomponentClass; Vform: TForm; Vacesso:string): Tform; begin //verificar acesso .... if Vform = nil then application.CreateForm(VTform, Vform) else Vform.Show; Result := vform; end;
Gostei + 0
15/09/2005
Sistemald
Fiz a troca para função
mas na chamada devo fazer
frmpessoacadastro:= abrirfrm(TfrmPessoacadastro,frmpessoacadastro,´guf´); frmpessoacadastro.pessoa:= ´cliente´;
Gostei + 0
15/09/2005
Marco Salles
[b:f6c8064afc]por [/b:f6c8064afc]
[b:f6c8064afc]Procedure Abrirfrm(VTform:TcomponentClass;var Vform; Vacesso:string); [/b:f6c8064afc]
Ficando assim :
Procedure Abrirfrm(VTform:TcomponentClass;var Vform; Vacesso:string); begin //verificar acesso if Vacesso <> ´´ then begin //fazer a verificação if module.TableVUsuario.FieldByName(Vacesso).AsBoolean <> true then begin messagedlg(´Acesso restrito, para acessar está funcão contate o administrador do sistema´,mtwarning,[mbok],0); exit; end; end; if Vform = nil then application.CreateForm(VTform, Vform) else Vform.Show; end;
A Chamada não precisa alterar ;
Código:
abrirfrm(TFrmPessoaCadastro,FrmPessoaCadastro,´GUFPESSOA´); frmpessoacadastro.pessoa = ´CLIENTE´;
Gostei + 0
15/09/2005
Sistemald
se eu fizer isto
frmpessoacadastro:= abrirfrm(TFrmPessoaCadastro,FrmPessoaCadastro,´GUFPESSOA´);
da Incomplatibes types Tform and Tfrmpessoacadastro.
se usar um var temporaria como vou acessar uma var publica do form acima???
Gostei + 0
15/09/2005
Sistemald
essa dica Massuda me passou, porém deu o seguinte problema:
Gostei + 0
15/09/2005
Massuda
frmpessoacadastro:= abrirfrm(TFrmPessoaCadastro,FrmPessoaCadastro,´GUFPESSOA´) as TFrmPessoaCadastro; // OU frmpessoacadastro:= TFrmPessoaCadastro( abrirfrm(TFrmPessoaCadastro,FrmPessoaCadastro,´GUFPESSOA´) );
Gostei + 0
15/09/2005
Sistemald
Problema resolvido, sabia que teria que fazer um Typecast, só não sabia como.
Valeu galera pela atenção.
Muito Obrigado.
Gostei + 0
15/09/2005
Marco Salles
caro sistemald Sei que o problema seu foi resolvido , mas acho que voce se enganou com relação ao que eu lhe passei.. [b:9973e5741b]Ha uma pequena diferença nas postagems[/b:9973e5741b]
Veja :
sistemald
massuda
Marco salles escreveu
[b:9973e5741b]Do seu jeito inicial voce com certeza consegueria resolver também[/b:9973e5741b]
Gostei + 0
15/09/2005
Sistemald
Vou testar do jeito que você me falou, talvez fique melhor!
Obrigado novamente!!!
:D
Gostei + 0
11/10/2005
Sistemald
Olhe fiz a troca mas o seguinte trecho não funcionou:
if Vform = nil then <- Icompatible types application.CreateForm(VTform, Vform) else Vform.Show; <- record, object or class type required end;
Tem alguma idéia
Gostei + 0
20/10/2005
Sistemald
Gostei + 0
21/10/2005
Sistemald
Procedure Abrirfrm(VTform:TcomponentClass; var Vform; Vacesso:string); var i:integer; criado:boolean; begin criado:= False; //verificar acesso if not veracesso(Vacesso) then exit; //agora vai abrir o form //if Vform = nil then for I:=0 to application.ComponentCount - 1 do begin if application.Components[i] is VtForm then begin (application.Components[i] as Tform).Show; criado:= true; end; end; if criado = False then application.CreateForm(VTform, Vform); end;
Gostei + 0
21/10/2005
Martins
pessoa é uma variável pública ou o q?
só apra eu me situar!
valew!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)