Fórum Converter String para TFormClass #398780
06/04/2011
0
Boa noite pessoal.
Estou com um problema aqui dificil de resolver. Seguinte.
Criei um aplicação que abre formularios em abas dentro de um pagecontrol.
Criei uma função que espera uma variavel do tipo TFormClass, onde passo o nome da tela e ele abre a tela dentro do PageControl.
O problema, é que coloquei os nomes dos Forms no banco de dados, mesmo porque monto os menus de acesso dinamicamente de acordo com cada usuario cadastrado.
Quando recupero essa informação do banco, que ta em formato String, tenho que converter para TFormClass, pra poder abrir o form.
O Problema que ta dando Acess Violation e nao abre a tela.
O Código é esse.
procedure TFrmPrinc.CapturaClick(Sender: TObject);
var
Formulario: TFormClass;
NomeForm: String;
begin
Banco.QryMenu1.Open;// Abro o banco onde estao os nomes das telas.
//localizo o nome no banco de acordo com o item passado pelo menu.
if Banco.QryMenu1.Locate('NOME', TMenuItem(Sender).Caption, []) then begin
//coloco o nome do form em uma variavel.
NomeForm:= Banco.QryMenu1.FieldByName('FUNCAO').AsString;
CodTela:= Banco.QryMenu1.FieldByName('CODIGO').AsInteger;
//tento converter a variavel String para TFormClass
Formulario:= TFormClass(FindClass(NomeForm));
NovaAba(Formulario);//Função que abre o formulario no PageControl.
end
else begin
//se nao existir o nome no banco de dados, dou uma mensagem.
ShowMessage('Função não encontrada, contate o suporte!');
end;
Banco.QryMenu1.Close;//Fecho o banco de dados.
end;
O erro ocorre quando tento converter a variavel String em TFormClass.
Alguem ai tem uma idéia de como resolver isso?
Desde já obrigado.
Estou com um problema aqui dificil de resolver. Seguinte.
Criei um aplicação que abre formularios em abas dentro de um pagecontrol.
Criei uma função que espera uma variavel do tipo TFormClass, onde passo o nome da tela e ele abre a tela dentro do PageControl.
O problema, é que coloquei os nomes dos Forms no banco de dados, mesmo porque monto os menus de acesso dinamicamente de acordo com cada usuario cadastrado.
Quando recupero essa informação do banco, que ta em formato String, tenho que converter para TFormClass, pra poder abrir o form.
O Problema que ta dando Acess Violation e nao abre a tela.
O Código é esse.
procedure TFrmPrinc.CapturaClick(Sender: TObject);
var
Formulario: TFormClass;
NomeForm: String;
begin
Banco.QryMenu1.Open;// Abro o banco onde estao os nomes das telas.
//localizo o nome no banco de acordo com o item passado pelo menu.
if Banco.QryMenu1.Locate('NOME', TMenuItem(Sender).Caption, []) then begin
//coloco o nome do form em uma variavel.
NomeForm:= Banco.QryMenu1.FieldByName('FUNCAO').AsString;
CodTela:= Banco.QryMenu1.FieldByName('CODIGO').AsInteger;
//tento converter a variavel String para TFormClass
Formulario:= TFormClass(FindClass(NomeForm));
NovaAba(Formulario);//Função que abre o formulario no PageControl.
end
else begin
//se nao existir o nome no banco de dados, dou uma mensagem.
ShowMessage('Função não encontrada, contate o suporte!');
end;
Banco.QryMenu1.Close;//Fecho o banco de dados.
end;
O erro ocorre quando tento converter a variavel String em TFormClass.
Alguem ai tem uma idéia de como resolver isso?
Desde já obrigado.
Marcos Paulo
Curtir tópico
+ 0
Responder
Posts
07/04/2011
Dirceu Morais
Boa noite pessoal.
Estou com um problema aqui dificil de resolver. Seguinte.
Criei um aplicação que abre formularios em abas dentro de um pagecontrol.
Criei uma função que espera uma variavel do tipo TFormClass, onde passo o nome da tela e ele abre a tela dentro do PageControl.
O problema, é que coloquei os nomes dos Forms no banco de dados, mesmo porque monto os menus de acesso dinamicamente de acordo com cada usuario cadastrado.
Quando recupero essa informação do banco, que ta em formato String, tenho que converter para TFormClass, pra poder abrir o form.
O Problema que ta dando Acess Violation e nao abre a tela.
O Código é esse.
procedure TFrmPrinc.CapturaClick(Sender: TObject);
var
Formulario: TFormClass;
NomeForm: String;
begin
Banco.QryMenu1.Open;// Abro o banco onde estao os nomes das telas.
//localizo o nome no banco de acordo com o item passado pelo menu.
if Banco.QryMenu1.Locate('NOME', TMenuItem(Sender).Caption, []) then begin
//coloco o nome do form em uma variavel.
NomeForm:= Banco.QryMenu1.FieldByName('FUNCAO').AsString;
CodTela:= Banco.QryMenu1.FieldByName('CODIGO').AsInteger;
//tento converter a variavel String para TFormClass
Formulario:= TFormClass(FindClass(NomeForm));
NovaAba(Formulario);//Função que abre o formulario no PageControl.
end
else begin
//se nao existir o nome no banco de dados, dou uma mensagem.
ShowMessage('Função não encontrada, contate o suporte!');
end;
Banco.QryMenu1.Close;//Fecho o banco de dados.
end;
O erro ocorre quando tento converter a variavel String em TFormClass.
Alguem ai tem uma idéia de como resolver isso?
Desde já obrigado.
Estou com um problema aqui dificil de resolver. Seguinte.
Criei um aplicação que abre formularios em abas dentro de um pagecontrol.
Criei uma função que espera uma variavel do tipo TFormClass, onde passo o nome da tela e ele abre a tela dentro do PageControl.
O problema, é que coloquei os nomes dos Forms no banco de dados, mesmo porque monto os menus de acesso dinamicamente de acordo com cada usuario cadastrado.
Quando recupero essa informação do banco, que ta em formato String, tenho que converter para TFormClass, pra poder abrir o form.
O Problema que ta dando Acess Violation e nao abre a tela.
O Código é esse.
procedure TFrmPrinc.CapturaClick(Sender: TObject);
var
Formulario: TFormClass;
NomeForm: String;
begin
Banco.QryMenu1.Open;// Abro o banco onde estao os nomes das telas.
//localizo o nome no banco de acordo com o item passado pelo menu.
if Banco.QryMenu1.Locate('NOME', TMenuItem(Sender).Caption, []) then begin
//coloco o nome do form em uma variavel.
NomeForm:= Banco.QryMenu1.FieldByName('FUNCAO').AsString;
CodTela:= Banco.QryMenu1.FieldByName('CODIGO').AsInteger;
//tento converter a variavel String para TFormClass
Formulario:= TFormClass(FindClass(NomeForm));
NovaAba(Formulario);//Função que abre o formulario no PageControl.
end
else begin
//se nao existir o nome no banco de dados, dou uma mensagem.
ShowMessage('Função não encontrada, contate o suporte!');
end;
Banco.QryMenu1.Close;//Fecho o banco de dados.
end;
O erro ocorre quando tento converter a variavel String em TFormClass.
Alguem ai tem uma idéia de como resolver isso?
Desde já obrigado.
Marcos bom Dia,
dê uma olhada neste tôpico: http://www.forumweb.com.br/foruns/topic/48674-converter-string-para-tformclass/
me parece que faltou criar o formulário:
Application.CreateForm(TFormClass(FindClass('TForm2')), F);
procedure TFrmPrinc.CapturaClick(Sender: TObject);
var Formulario: TFormClass;
NomeForm: String;
begin
Application.CreateForm(TFormClass(FindClass(Formulario
)), F);
Banco.QryMenu1.Open;// Abro o banco onde estao os nomes das telas.
//localizo o nome no banco de acordo com o item passado pelo menu.
if Banco.QryMenu1.Locate('NOME', TMenuItem(Sender).Caption, []) then begin
//coloco o nome do form em uma variavel.
NomeForm:= Banco.QryMenu1.FieldByName('FUNCAO').AsString;
CodTela:= Banco.QryMenu1.FieldByName('CODIGO').AsInteger;
//tento converter a variavel String para TFormClass
Formulario:= TFormClass(FindClass(NomeForm));
NovaAba(Formulario);//Função que abre o formulario no PageControl.
end
else begin
//se nao existir o nome no banco de dados, dou uma mensagem.
ShowMessage('Função não encontrada, contate o suporte!');
end;
Banco.QryMenu1.Close;//Fecho o banco de dados.
end;
Atenciosamente,
Dirceu Morais
Responder
Gostei + 0
07/04/2011
Marcos Paulo
Bom dia Dirceu.
Na verdade o que estava faltando era colocar as classes dos forms na sessão initialization e finalization.
Depois de criado isso no Form principal a função funcionou perfeitamente.
Obrigado pela sua ajuda ok.
Abraço.
Na verdade o que estava faltando era colocar as classes dos forms na sessão initialization e finalization.
Depois de criado isso no Form principal a função funcionou perfeitamente.
Obrigado pela sua ajuda ok.
Abraço.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)