Fórum Chama Formulário por Função #280880

10/05/2005

0

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
.
.
.
.


Rodrigo Mendes

Rodrigo Mendes

Responder

Posts

10/05/2005

Steve_narancic

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)


Responder

Gostei + 0

10/05/2005

Rodrigo Mendes

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....



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)



Responder

Gostei + 0

10/05/2005

Steve_narancic

Cara desculpe não poder te ajudar mas já fugiu do meu alcance tentei de varias maneiras mas não consegui.


Responder

Gostei + 0

24/05/2005

Saint

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..


Responder

Gostei + 0

24/05/2005

Marco Salles

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);



Responder

Gostei + 0

24/05/2005

Adsilver

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.


Responder

Gostei + 0

14/09/2005

Porty

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar