Solução pra esse código ?
15/07/2004
0
Peguei esse código aqui no forum de uma discursão sobre criação de formulários, baseando-se em uma string.
Alguém tem uma idéia mais simples de fazer isso ?
Obrigada !
[b:d1a2e63cf2]Código:[/b:d1a2e63cf2]
function ShowAForm(z: string): boolean;
var
i: integer;
strClass: String;
FormClass: TFormClass;
NewForm: TForm;
begin
result := false;
// verifica se o form ja foi criado e mostra ele
for i := 0 to Screen.FormCount - 1 do begin
if UpperCase(Screen.Forms[i].Name) = UpperCase(z) then begin
result := true;
Screen.Forms[i].Show;
exit;
end;
end;
// Se nao foi criado, cria e mostra!!!
if not result then begin
try
strClass := ´T´ + z;
FormClass := TFormClass(GetClass(strClass));
if (FormClass = nil) then begin // Nao existe form (nao deve ter sido registrado!)
exit;
end;
NewForm := FormClass.Create(Application);
NewForm.Name := z;
NewForm.Show;
Result := true;
except
Result := false;
end;
end;
end;
Renata Coimbra
Posts
15/07/2004
Nildo
for i := 0 to Screen.FormCount - 1 do begin if UpperCase(Screen.Forms[i].Name) = UpperCase(z) then begin result := true; Screen.Forms[i].Show; exit; end; end;
´
Pode ser trocado por esse:
if Application.FindComponent( z ) <> nil then begin Result := True; TForm( Application.FindComponent( z ) ).Show; end;
15/07/2004
Renata Coimbra
Nildo estou tentando criar um formulário herdado de uma classe:
f_Cliente herda de Tf_Cadastro
Exemplo:
Tf_Cliente = class(Tf_Cadastro)
nessa rotina eu teria que alterar o que ?
o tipo da variavel FormClass: TFormClass para Tf_Cadastro ?
Muito obrigada pela atenção !
Renata Coimbra
15/07/2004
Persist
Ele está um formulário para cada classe.
Se na Screen não existir o formulário aberto, ele cria, mas com uma classe diferente.
15/07/2004
Renata Coimbra
No meu caso todos os formulários vai ser herdeiro de Tf_Cadastro,
que são:
Tf_Cliente
Tf_Produtos
Tf_Vendas...
etc...
na funcção eu gostaria de passar o nome do formulário como uma string para ser instaciado.
será se tem como adaptar essa função pra isso ?
Obrigada !
[]´s
Renata
15/07/2004
Persist
Vc tem um menú flexível que é montado a partir de parâmetros externos e por isso vc não pode instanciar fixo nos onClicks do ítens de menú, pq vc não sabe qual formulário irá representar qual ítem.
É mais ou menos isso?
15/07/2004
Renata Coimbra
eu tenho todos os nomes de formulários em uma tabela que são:
Tf_Cliente
Tf_Produtos
Tf_Vendas...
etc..
daí eu tenho uma variavel dentro de um for que pega o nome dos formulários da tabela.
só não estou conseguindo associar a minha string ´Tf_formulario´ herdeiro da classe Tf_cadastro a rotina de instaciar formulários.
com um TForm funciona normal, o problema é que eu uso heranças de formulários, todos herda de Tf_Cadastro.
vc pode me ajudar ?
[]´s
Renata.
15/07/2004
Persist
RegisterClass(Tf_Cadastro); RegisterClass(Tf_Cliente); RegisterClass(Tf_Produtos); RegisterClass(Tf_Vendas);
Daí vc pega a classe acenstral de acordo com a string que entra
var f:Tf_Cadastro; begin f := Tf_Cadastro(GetClass(´string´)); end;
15/07/2004
Renata Coimbra
olha todo o código:
procedure TPrograma.ClickMenu(Sender: TObject);
Var
f : Tf_Cadastro;
NewForm: TForm;
strClass: String;
begin
{Essa rotina procura um formularo do tipo Tf_Cadastro e retorna o mesmo}
f := TChamarProgramas.LocalizarFormularioCadastro(´StrForme´);
if f <> nil then
f.Show
else
begin
strClass := ´T´ + StrForm;
f := Tf_Cadastro(GetClass(strClass));
f := Tf_Cadastro.Create(Application );
f.Show;
end;
e na Inicialization estou registrando todas as classes,
RegisterClass([Tf_CLiente, TfProduto, etc...]);
o que estou fazendo de errado ?
a minha var strClass está mostrando o nome da classe certinho.
[]´s
Renata.
15/07/2004
Persist
Vc está colocando ´T´ + StrForm, então StrForm deve conter ´F_CLIENTE´.
O que está em StrForm?
15/07/2004
Renata Coimbra
T+strForm
strClass = Tf_Cliente
[]´s
Renata.
15/07/2004
Renata Coimbra
ao invés de criar o Tf_Cliente está criando e abrindo o pai dele Tf_Cadastro.
estou ficando maluca com isso, heheh !
[]´s
Renata;
15/07/2004
Persist
Acho que vc terá que fazer um if para criar os descendentes.
São muitos formulários?
Clique aqui para fazer login e interagir na Comunidade :)