GARANTIR DESCONTO

Fórum cria forms de acordo com o nome passado #272270

14/03/2005

0

Oi pessoal estou com uma dúvida sobre o código abaixo:

*************************************************************
if NomeForm = ´form_aluno´ then
begin
[b:39ed62aaa7]Application.CreateForm(TForm_Aluno, Form_Aluno);[/b:39ed62aaa7]
Form_Aluno.Left := 0;
Form_Aluno.Top := 0;
end;

if NomeForm = ´form_responsavel´ then
begin
[b:39ed62aaa7]Application.CreateForm(TForm_Responsavel, Form_Responsavel);[/b:39ed62aaa7]
Form_Responsavel.Left := 0;
Form_Responsavel.Top := 0;
end;
*************************************************************

Tem alguma maneira de eu cria os forms passando apenas a string NomeForm?
Ex: algo mais ou menos assim

[b:39ed62aaa7]Application.CreateForm(T + ´NomeForm´, NomeForm);[/b:39ed62aaa7]

assim eu teria uma linha para criar o form solicitado dentro da procedure.

Desde já obigado.[b:39ed62aaa7][/b:39ed62aaa7]


Magnof

Magnof

Responder

Posts

14/03/2005

Marco Salles

Tem alguma maneira de eu cria os forms passando apenas a string NomeForm? Ex: algo mais ou menos assim Application.CreateForm(T + ´NomeForm´, NomeForm); assim eu teria uma linha para criar o form solicitado dentro da procedure. Desde já obigado.



[b:e9c68e048b]Amigo : Tente assim:[/b:e9c68e048b]

procedure CriarFormPeloNome(TFormulario:TComponentClass; var Formulario);
begin
      Application.CreateForm(TFormulario,Formulario);
      Tform(Formulario).ShowModal;
      Freeandnil(TForm(formulario));
 end;

Para Chamar O método basta:

CriarFormPeloNome(TNomeDoForm,NomeDoForm);



Responder

Gostei + 0

15/03/2005

Magnof

entendi seu código. porém se eu quiser passar uma string com o nome do form e não o form. teria jeito.


Responder

Gostei + 0

15/03/2005

Rômulo Barros

Pesquise, aqui mesmo no fórum, por [b:0e6c8d739c]FindComponent[/b:0e6c8d739c] para resolver sua situação. :wink:


Responder

Gostei + 0

16/03/2005

Marco Salles

entendi seu código. porém se eu quiser passar uma string com o nome do form e não o form. teria jeito


Jeito em delphi , tudo tem :D :D :D ...
So não entendi qual a dificuldade em passar o Form do Nome do Form :?: :?: :?: ... Sei lá . Me parece indiferente.

:idea: Diga-se de passagem que estes Forms :arrow: Devem estar na Secção Available Forms[b:0c2abd01c6] e [/b:0c2abd01c6]não na secção Auto_Create_Form.


Responder

Gostei + 0

16/03/2005

Magnof

[quote:9bd48bfbf3=´Undeclared Identifier´]Pesquise, aqui mesmo no fórum, por [b:9bd48bfbf3]FindComponent[/b:9bd48bfbf3] para resolver sua situação. :wink:[/quote:9bd48bfbf3]


É exatamente o que eu precisava. Vc é o cara. Veja o código como ficou. Valeu.

[color=red:9bd48bfbf3][b:9bd48bfbf3]var
formulario: TForm;
NomeForm: string
begin
NomeForm := ´Form_Clientes´;
formulario := TForm(Self.FindComponent(NomeForm));
Application.CreateForm(tform, formulario);
formulario.Show;[/b:9bd48bfbf3][/color:9bd48bfbf3]


Responder

Gostei + 0

16/03/2005

Magnof

[quote:dea24d7ba3=´Undeclared Identifier´]Pesquise, aqui mesmo no fórum, por [b:dea24d7ba3]FindComponent[/b:dea24d7ba3] para resolver sua situação. :wink:



É exatamente o que eu precisava. Vc é o cara. Veja o código como ficou. Valeu.

[color=green:dea24d7ba3]var
formulario: TForm;
NomeForm: string
begin
NomeForm := ´Form_Clientes´;
formulario := TForm(Self.FindComponent(NomeForm));
Application.CreateForm(tform, formulario);
formulario.Show;[/b][/quote:dea24d7ba3][/color:dea24d7ba3]


[color=red:dea24d7ba3]Corrigindo. Ainda não consegui. Na verdade o Código acima cria um novo form para a aplicação. Eu queria é chamar um form pasasndo apenas uma string com o nome dele.
É mais ou menos o código acima.

Se alguém ainda puder me ajudar agradeço. [/color:dea24d7ba3]


Responder

Gostei + 0

17/03/2005

Marco Salles

Magnof Citou
Corrigindo. Ainda não consegui. Na verdade o Código acima cria um novo form para a aplicação. Eu queria é chamar um form pasasndo apenas uma string com o nome dele. É mais ou menos o código acima. Se alguém ainda puder me ajudar agradeço.


Eu vou continuar insistindo mesmo sabendo que corro risco de receber uma má resposta, do tipo:[b:465135f492] ´Eu Quero assim pô´[/b:465135f492]
Qual o Problema em chamar uma Procedure Passando o Nome do Form, da chamanda passando o Form :?: :?: :?:

Procedure 1)
begin 
NomeForm := ´Form_Clientes´; 
formulario := TForm(Self.FindComponent(NomeForm)); 
Application.CreateForm(tform, formulario); 
formulario.Show;


Procedure 2?
procedure CriarFormPeloNome(TFormulario:TComponentClass; var Formulario); 
begin 
      Application.CreateForm(TFormulario,Formulario); 
      Tform(Formulario).ShowModal; 
      Freeandnil(TForm(formulario)); 
 end; 

Para Chamar O método basta: 

CriarFormPeloNome(TForm_Clientes,Form_Clientes); 


Eu acho Não tem Nanhuma dificuldade.. Alem do mais o segundo Método , Posso garantir que funciona.. Não irá ter o Problema descrito

Magnof Citou:
Ainda não consegui. Na verdade o Código acima cria um novo form para a aplicação
.

[b:465135f492]É Claro que continuo a Insistir:[/b:465135f492]
Marco salles Citou :
Diga-se de passagem que estes Forms Devem estar na Secção Available Forms e não na secção Auto_Create_Form.



Responder

Gostei + 0

17/03/2005

Magnof

[quote:cff9308317=´Marco Salles´]Magnof Citou
Corrigindo. Ainda não consegui. Na verdade o Código acima cria um novo form para a aplicação. Eu queria é chamar um form pasasndo apenas uma string com o nome dele. É mais ou menos o código acima. Se alguém ainda puder me ajudar agradeço.


Eu vou continuar insistindo mesmo sabendo que corro risco de receber uma má resposta, do tipo:[b:cff9308317] ´Eu Quero assim pô´[/b:cff9308317]
Qual o Problema em chamar uma Procedure Passando o Nome do Form, da chamanda passando o Form :?: :?: :?:

Procedure 1)
begin 
NomeForm := ´Form_Clientes´; 
formulario := TForm(Self.FindComponent(NomeForm)); 
Application.CreateForm(tform, formulario); 
formulario.Show;


Procedure 2?
procedure CriarFormPeloNome(TFormulario:TComponentClass; var Formulario); 
begin 
      Application.CreateForm(TFormulario,Formulario); 
      Tform(Formulario).ShowModal; 
      Freeandnil(TForm(formulario)); 
 end; 

Para Chamar O método basta: 

CriarFormPeloNome(TForm_Clientes,Form_Clientes); 


Eu acho Não tem Nanhuma dificuldade.. Alem do mais o segundo Método , Posso garantir que funciona.. Não irá ter o Problema descrito

Magnof Citou:
Ainda não consegui. Na verdade o Código acima cria um novo form para a aplicação
.

[b:cff9308317]É Claro que continuo a Insistir:[/b:cff9308317]
Marco salles Citou :
Diga-se de passagem que estes Forms Devem estar na Secção Available Forms e não na secção Auto_Create_Form.
[/quote:cff9308317]

Oi Marcos. Consegui o que queria com o código abaixo. De qualquer forma muito obrigado por sua ajuda T+.

procedure TForm_Menu.CriarForm(NomeForm: String);
var
APersistentClass: TPersistentClass;
AForm: TForm;
FormCriado : Boolean;
begin
NomeForm := TRIM(LowerCase(NomeForm)); [color=green:cff9308317]//converte o NomeForm em minúsculo[/color:cff9308317]

APersistentClass := GetClass(NomeForm);

if APersistentClass = nil then
showmessage(´Programa não localizado!´)
else
begin
[color=green:cff9308317] {Verifica se o Form já foi criado ou não.}[/color:cff9308317]

if Self.MDIChildCount > 0 then
begin
FormCriado := false;
for i := 0 to self.MDIChildCount -1 do
begin
if LowerCase(´t´+ MDIChildren[i].Name) = NomeForm then
FormCriado:= true;
end;

if FormCriado = false then
begin
AForm := TComponentClass(APersistentClass).Create(Application) as TForm;
AForm.Left := 0;
AForm.Top := 0;
AForm.Show;
end;

end else
begin
AForm := TComponentClass(APersistentClass).Create(Application) as TForm;
AForm.Left := 0;
AForm.Top := 0;
AForm.Show;
end;
end;
end;


Responder

Gostei + 0

17/03/2005

Marco Salles

Muitas das vesez a gente não sabe exatamente o que os amigos querem.
e a reciproca segue fiel e verdadeira :) :) :)

Isto porque a escrita nen sempre e bem compreendida

Eu tentei simular o que voce disse: :lol: :lol: :lol:

Abri um novo projeto com dois forms
( O Form Principal Chamado De TFORM_MENU e o Form Secundário Chamei de Form2) Então No Evento OnClick De Um Botão Escrevi:

procedure TForm_Menu.Button1Click(Sender: TObject);
begin
Form_Menu.CriarForm(´Form2´);
end;


Rodei o Programa e ao clicar no evento OnClick De Um Botão ,Recebi sempre a mesma resposta:

´Programa não localizado´


Sinceramente eu Esperava que o Form2 Fosse Criado ao ser disparado o Evento OnClick Do Botão. Mas definitivamente Não foi :cry: :cry: :cry:

Mas como eu mesmo disse:
[b:02198264b8]Muitas das vesez a gente não sabe exatamente o que os amigos querem.[/b:02198264b8]

[b:02198264b8]Mas de tudo vale aquilo que voce disse:[/b:02198264b8]
Oi Marcos. Consegui o que queria com o código abaixo. De qualquer forma muito obrigado por sua ajuda T+.


E eu fico feliz por isto :P :P :P :P :P


Responder

Gostei + 0

17/03/2005

Massuda

Para o esquema usando FindClass funcionar OK, em cada unit que declara um form que poderá ser criado pelo nome, inclua o seguinte:
initialization
  RegisterClass(TSeuForm);
no final da unit, antes do ´end.´ Isso garante que o Delphi conseguirá encontrar a classe pelo nome.

Aliás, esse esquema de usar RegisterClass/FindClass pode ser usado para qualquer classe que seja descendente de TPersistent.


Responder

Gostei + 0

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

Aceitar