Chama Formulário por Função
Caros colegas,
Gostaria de saber como faço para chamar um formulário através de uma função, ou seja, quero passar o nome do form para essa função para que ela crie e chame meu formulário.
Gostaria de substituir a procedure abaixo por uma função:
procedure TfrmFiltros.ChamaFormulario;
var
r : TRect;
begin
case vForm of
0 : begin //Formulário do Cadastro de Empresas
Windows.GetClientRect(frmMenu.ClientHandle, r);
LockWindowUpdate(frmMenu.Handle);
//Cria o formulário de Empresas
if frmEmpresa = nil then
frmEmpresa := TfrmEmpresa.Create(Application)
else
begin
frmEmpresa.OnCreate(nil);
frmEmpresa.Show;
end;
//Apresenta a janela preenchendo a área disponível
frmEmpresa.Height := r.Bottom - r.Top;
frmEmpresa.Width := r.Right - r.Left;
frmEmpresa.Top := 0;
frmEmpresa.Left := 0;
LockWindowUpdate(0);
//
frmEmpresa.Caption := ´Empresas´ + vNomeFiltro;
end;
1 : begin //Formulário do Cadastro de Centros de Custos
.
.
.
.
Gostaria de saber como faço para chamar um formulário através de uma função, ou seja, quero passar o nome do form para essa função para que ela crie e chame meu formulário.
Gostaria de substituir a procedure abaixo por uma função:
procedure TfrmFiltros.ChamaFormulario;
var
r : TRect;
begin
case vForm of
0 : begin //Formulário do Cadastro de Empresas
Windows.GetClientRect(frmMenu.ClientHandle, r);
LockWindowUpdate(frmMenu.Handle);
//Cria o formulário de Empresas
if frmEmpresa = nil then
frmEmpresa := TfrmEmpresa.Create(Application)
else
begin
frmEmpresa.OnCreate(nil);
frmEmpresa.Show;
end;
//Apresenta a janela preenchendo a área disponível
frmEmpresa.Height := r.Bottom - r.Top;
frmEmpresa.Width := r.Right - r.Left;
frmEmpresa.Top := 0;
frmEmpresa.Left := 0;
LockWindowUpdate(0);
//
frmEmpresa.Caption := ´Empresas´ + vNomeFiltro;
end;
1 : begin //Formulário do Cadastro de Centros de Custos
.
.
.
.
Rodrigo Mendes
Curtidas 0
Respostas
Steve_narancic
10/05/2005
Cara fiz algo semelhante da seguinte forma:
procedure CriaForm(sFormCadastro);
var
tela : TFormClass;
xform : TForm;
begin
tela := TFormClass(FindClass(sFormCadastro));
Application.CreateForm(tela, xform);
xform.ShowModal;
xform.Free;
end;
[b:6c47e65289]e no Final da unit do Form a ser criado Coloque[/b:6c47e65289]
initialization
RegisterClass(TCad_Cidade);//Onde TCad_Cidade -> Form a ser criado
finalization
UnRegisterClass(TCad_Cidade);
Chame assim:
CriaForm(TCad_Cidade)
procedure CriaForm(sFormCadastro);
var
tela : TFormClass;
xform : TForm;
begin
tela := TFormClass(FindClass(sFormCadastro));
Application.CreateForm(tela, xform);
xform.ShowModal;
xform.Free;
end;
[b:6c47e65289]e no Final da unit do Form a ser criado Coloque[/b:6c47e65289]
initialization
RegisterClass(TCad_Cidade);//Onde TCad_Cidade -> Form a ser criado
finalization
UnRegisterClass(TCad_Cidade);
Chame assim:
CriaForm(TCad_Cidade)
GOSTEI 0
Rodrigo Mendes
10/05/2005
Steve,
Os meus formularios são MDIChid, neste caso como faço para testar se eles já estão criados ou não dentro do seu exemplo?
exemplo:
if frmCadCli = nil then
cria form....
else
mostra form....
Os meus formularios são MDIChid, neste caso como faço para testar se eles já estão criados ou não dentro do seu exemplo?
exemplo:
if frmCadCli = nil then
cria form....
else
mostra form....
Cara fiz algo semelhante da seguinte forma:
procedure CriaForm(sFormCadastro);
var
tela : TFormClass;
xform : TForm;
begin
tela := TFormClass(FindClass(sFormCadastro));
Application.CreateForm(tela, xform);
xform.ShowModal;
xform.Free;
end;
[b:b7fd4347d5]e no Final da unit do Form a ser criado Coloque[/b:b7fd4347d5]
initialization
RegisterClass(TCad_Cidade);//Onde TCad_Cidade -> Form a ser criado
finalization
UnRegisterClass(TCad_Cidade);
Chame assim:
CriaForm(TCad_Cidade)
GOSTEI 0
Steve_narancic
10/05/2005
Cara desculpe não poder te ajudar mas já fugiu do meu alcance tentei de varias maneiras mas não consegui.
GOSTEI 0
Saint
10/05/2005
Velho, eu crio assim:
procedure TfrmPrincipal.CriaForm(objeto:TComponentClass; var Reference);
begin
application.createform(objeto,reference)
end;
vc usa assim.. CriaForm(TNomeForm,NomeForm);
Abraços..
procedure TfrmPrincipal.CriaForm(objeto:TComponentClass; var Reference);
begin
application.createform(objeto,reference)
end;
vc usa assim.. CriaForm(TNomeForm,NomeForm);
Abraços..
GOSTEI 0
Marco Salles
10/05/2005
Gostaria de saber como faço para chamar um formulário através de uma função, ou seja, quero passar o nome do form para essa função para que ela crie e chame meu formulário.
procedure TfrmFiltros.ChamaFormulario (TFormulario:TcomponentClass; var formulario); begin if TForm(Formulario) = Nil Then application.CreateForm(Tformulario,Formulario); Tform(Formulario).show; *****bla.. bla.. //exemplo::: Tform(Formulario).caption:=´ola´; end;
:arrow: Pra chamar
TfrmFiltros.ChamaFormulario(TNomeDoFormulario,Nomedoformulario);
GOSTEI 0
Adsilver
10/05/2005
function ExibeForm(Form: TFormClass): TForm;
var Found, i: Integer;
begin
Screen.Cursor := crHourGlass;
FrmPrincipal.StbPadrao.Panels[0].Text := ´Abrindo formulário...´;
FrmPrincipal.Update;
Found := -1;
for i := 0 to Screen.FormCount - 1 do
if Screen.Forms[i] is Form then
Found := i;
if Found >= 0 then begin
Result := Screen.Forms[Found];
Screen.Forms[Found].Show;
if Screen.Forms[Found].Visible then
Screen.Forms[Found].SetFocus;
SetForegroundWindow(Screen.Forms[Found].Handle);
ShowWindow(Screen.Forms[Found].Handle, SW_RESTORE);
end else begin
Result := Form.Create(Nil);
Result.FormStyle := fsMDIChild;
end;
Screen.Cursor := crDefault;
FrmPrincipal.StbPadrao.Panels[0].Text := ´Pronto´;
end;
//
Para chamar:
FrmCadTurno := ExibeForm(TFrmCadTurno) as TFrmCadTurno;
FrmCadTurno.NomeTabela := ´TURNO´;
//
Essa função procura um Form child. Case encontre-o, traz para frente. Se nao encontra cria e exibe.
var Found, i: Integer;
begin
Screen.Cursor := crHourGlass;
FrmPrincipal.StbPadrao.Panels[0].Text := ´Abrindo formulário...´;
FrmPrincipal.Update;
Found := -1;
for i := 0 to Screen.FormCount - 1 do
if Screen.Forms[i] is Form then
Found := i;
if Found >= 0 then begin
Result := Screen.Forms[Found];
Screen.Forms[Found].Show;
if Screen.Forms[Found].Visible then
Screen.Forms[Found].SetFocus;
SetForegroundWindow(Screen.Forms[Found].Handle);
ShowWindow(Screen.Forms[Found].Handle, SW_RESTORE);
end else begin
Result := Form.Create(Nil);
Result.FormStyle := fsMDIChild;
end;
Screen.Cursor := crDefault;
FrmPrincipal.StbPadrao.Panels[0].Text := ´Pronto´;
end;
//
Para chamar:
FrmCadTurno := ExibeForm(TFrmCadTurno) as TFrmCadTurno;
FrmCadTurno.NomeTabela := ´TURNO´;
//
Essa função procura um Form child. Case encontre-o, traz para frente. Se nao encontra cria e exibe.
GOSTEI 0
Porty
10/05/2005
function ExibeForm(Form: TFormClass): TForm;
var Found, i: Integer;
begin
Screen.Cursor := crHourGlass;
FrmPrincipal.StbPadrao.Panels[0].Text := ´Abrindo formulário...´;
FrmPrincipal.Update;
Found := -1;
for i := 0 to Screen.FormCount - 1 do
if Screen.Forms[i] is Form then
Found := i;
if Found >= 0 then begin
Result := Screen.Forms[Found];
Screen.Forms[Found].Show;
if Screen.Forms[Found].Visible then
Screen.Forms[Found].SetFocus;
SetForegroundWindow(Screen.Forms[Found].Handle);
ShowWindow(Screen.Forms[Found].Handle, SW_RESTORE);
end else begin
Result := Form.Create(Nil);
Result.FormStyle := fsMDIChild;
end;
Screen.Cursor := crDefault;
FrmPrincipal.StbPadrao.Panels[0].Text := ´Pronto´;
end;
//
Para chamar:
FrmCadTurno := ExibeForm(TFrmCadTurno) as TFrmCadTurno;
FrmCadTurno.NomeTabela := ´TURNO´;
//
Essa função procura um Form child. Case encontre-o, traz para frente. Se nao encontra cria e exibe.
Mas voce passou o objecto (TFrmCadTurno) as TFrmCadTurno, eu queria passar em string ou seja ´FrmCadTurno´.
Pois estou a montar o menu dinamicamente indo lendo na base dados qual e o nome do menu a chamar.
GOSTEI 0