Fórum [ Ajuda ] Função para Criar Forms #416362
07/05/2012
0
Se alguém souber como passar, eu gostaria de Chamar de qualquer lugar pois é uma UnitCompartilhada,
chamar assim: NomeDaFuncao( frmParaCriar, TfrmParaCriar ), ou algo do gênero...
Agradeço desde já!
function CreateForms( FormClass: TFormClass; FormName: TCustomForm; ModalForm : Boolean ) : Boolean; begin with FormName do try FormName := FormClass.Create(Application); if ModalForm Then ShowModal else Show; CreateForms := True; except CreateForms := False; end; end;
procedure CriarForm(aClasseForm: TFormClass; aForm:TForm); begin Application.CreateForm(aClasseForm, aForm); aForm.showmodal; aForm.free; end;
Marcelo Jr
Curtir tópico
+ 0Posts
07/05/2012
Joel Rodrigues
Para garantir a referência, clique com a direita sobre TFormClass, depois em Refactoring > Find Unit, o Delphi lhe dirá a unit que deve ser adicionada (isso para qualquer identificador).
Gostei + 0
07/05/2012
Marcelo Jr
Se souber de alguma forma, minha idéia era puxar o nome do form do banco, criar atalhos pelo que o usuário tem permissao, dai ele criaria automático...
Gostei + 0
07/05/2012
Joel Rodrigues
Dica: nunca diga apenas que está dando erro, especifique qual é.
Gostei + 0
07/05/2012
Marcelo Jr
Obrigado pela ajuda.
Gostei + 0
08/05/2012
Cesar Roniglei
Voce Pode utilizar uma função e cria-los dinamicamente segue um exemplo:
procedure TFrmComum.AbreTela(vForm, vMenu: String; vClasse: TFormClass);
var
nForm: Integer;
vAbre: Boolean;
begin
//Procedimento que abre a tela, não deixa abrir duas ao mesmo tempo
if Trim(vForm) = then begin
MessageBox(Handle, Informe o nome do formulário a ser aberto!,
Sem nome..., MB_OK+MB_ICONEXCLAMATION);
Abort;
end else if vClasse = nil then begin
MessageBox(Handle, Informe a classe do formulário a ser criado!,
Sem classe..., MB_OK+MB_ICONEXCLAMATION);
Abort;
end;
//Por default a variável vAbre fica setado False, ela que indicará se cria a tela ou só executa o show
vAbre := False;
//Varredura em todos os formulários abertos na tela ou Screen
for nForm := 0 to Screen.FormCount - 1 do
//Se encontra o mesmo nome de formulário seta a varável vAbre para True
if Screen.Forms[nForm].Name = vForm then
vAbre := True;
//Se a variável vAbre for falsa haverá a criação do form ou só irá dar um show
if Trim(sUsuario_id) <> then
with DM_Principal.SQLQGeral do begin
Close;
SQL.Clear;
SQL.Add(SELECT GRAVAR, CANCELAR, EXCLUIR, NOVO, ALTERAR, IMPRIMIR, );
SQL.Add(NAVEGAR, PESQUISAR FROM SIS_USU_PERMISSAO);
SQL.Add(WHERE USUARIO_ID = +sUsuario_id);
SQL.Add(AND MENU_ID = +QuotedStr(vMenu));
SQL.Add(AND SISTEMA = +QuotedStr(Copy(uppercase(Application.Title), 1, 3)));
Open;
if FieldByName(GRAVAR).AsString = S then
sBotao := G;
if FieldByName(CANCELAR).AsString = S then
sBotao := C+sBotao;
if FieldByName(EXCLUIR).AsString = S then
sBotao := E+sBotao;
if FieldByName(NOVO).AsString = S then
sBotao := O+sBotao;
if FieldByName(ALTERAR).AsString = S then
sBotao := A+sBotao;
if FieldByName(IMPRIMIR).AsString = S then
sBotao := I+sBotao;
if FieldByName(NAVEGAR).AsString = S then
sBotao := N+sBotao;
if FieldByName(PESQUISAR).AsString = S then
sBotao := P+sBotao;
end;
if not vAbre then begin
//Cria a tela de aguarde...
//Cria a classe do form e executa o show ou showmodal conforme o tag do formulário
//uma vez tag = 0 ou tag > 0
with vClasse.Create(Application) do
if Tag = 0 then
Show
else
ShowModal
end else
Show;
end;
Espero ter ajudado.
Gostei + 0
08/05/2012
Bruno Leandro
Gostei + 0
08/05/2012
Marcelo Jr
Gostei + 0
09/05/2012
Cesar Roniglei
No Exemplo acima eu verifico se o Form ja está aberto, como trabalho com form mdi e shield pode ser que o usuário abriu o cadastro de clientes por ex, e depois o cadastro de produtos. Caso ele vá no menu para abrir novamente o cadastro de clientes a função verifica se já foi aberto e apenas coloca a frente para a sua visualização.
Mas qualquer duvida so me avisar.
César Roniglei
Consultor e Desenvolvedor (Delphi, Oracle, SQLServer, Firebird, MySQL).
E-mail: cesar.roniglei@live.com
Skype : cesar.roniglei
Gostei + 0
28/05/2013
Nivaldo Ricci
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)