Gostaria de saber qual é o tipo TForm que posso declarar numa chamada de função?
Vi que ele é do tipo: TFormExemplo= class(TForm), só que se eu declarar assim, não funciona.
Como eu declararia isso num chamada de função?
Quero fazer assim porque preciso chamar vários forms, e iria economizar linhas só fazendo essa chamada de função:
Você pode usar TFormClass como parâmetro. Para chamar os métodos de criação e alterar valores, pode ser necessário fazer um cast para TForm. Algo como:
Muito obrigada!
Era o que eu estava precisando, não sabia qual era o tipo a ser colocado, no caso TFormClass.
Não foi necessário colocar o cast.
Abraço, valeu!
Bianca.Nunes
Fui testar melhor aqui, e o parâmetro não é passado para o frmCadastroDepartamento.
O frmCadastroDepartamento continua sendo nil. Achei que ao passar o parâmetro frmCadastroDepartamento , ele seria carregado dentro da função showForm, e não ficaria nil.
Quero dar um FreeAndnil() quando o panel receber outro form.
É como se eu tivesse criado um novo objeto do tipo frmCadastroDepartamento, ao invés de apenas passar os parâmetros e valores diretamente pra ele.
Sabe como resolver isso?
Não está claro para mim qual problema você quer resolver. O que espera obter com esse conjunto de funções?
Desconfio que você está adicionando mais complexidade que o necessário, sem obter muito benefício. Ter a opção de determinar dinamicamente qual o form a ser criado não é tanta vantagem assim se você precisa dar tantas voltas para usar isso.
Se o que você quer é simplesmente criar o form e configurá-lo, acredito ser mais fácil passar o form já criado para a procedure, do que passar a classe dele e tentar criá-lo dentro dessa procedure. Se somente um form pode ser exibido (e o anterior deve ser fechado antes), você pode adicionar uma variável ao seu form principal (pnPrincipal, pelo que entendo) e verificar essa variável antes de configurar o novo form. Algo como:
procedureTfrmPrincipal.ShowForm(AForm:TForm);begin//FormAtualéumavariávelprivatedotipoTForm,emTfrmPrincipalif(FormAtual<>nil)thenbeginFormAtual.Close;FreeAndNil(FormAtual);end;AForm.Parent:=Self;AForm.Align:=alClient;Self.Caption:=copy(AForm.name,0,length(AForm.name)-2); // muda o título do form principalAForm.Show;FormAtual:=AForm;end;
Obrigada. Eu estava tendo problemas com a passagem de parâmetros, e para poder liberar a memória. Estava percebendo que a memória estava começando a ficar cheia. Achei que fosse possível passar parâmetro do tipo TForm, e ele ficasse persistente, colocando um var na frente, mas não funcionou.
Assim: Procedure TfrmPrincipal.ShowForm(var AForm: TForm);