melhor maneira para criar form.
Boa Noite, gostaria de pedir a opinião de vocês, se possivel exemplos.
Como vocês fazem para criar form, em tempo de execução ?
Utilizam algum tipo de função?
Pesquisei no fórum sobre registrar uma classe, mas não entendi direito, é válido fazer dessa maneira ?
Estou procurando algo sobre os tipos de form, com explicações detalhadas, vantagens e desvantagens (MDIForm,Shild etc..)
Obrigado
Como vocês fazem para criar form, em tempo de execução ?
Utilizam algum tipo de função?
Pesquisei no fórum sobre registrar uma classe, mas não entendi direito, é válido fazer dessa maneira ?
Estou procurando algo sobre os tipos de form, com explicações detalhadas, vantagens e desvantagens (MDIForm,Shild etc..)
Obrigado
Lynx
Curtidas 0
Melhor post
Lynx
29/07/2005
Foi mal...
O Não correto, que eu escrevi é que não é para todos os casos.
Muito legal a explicação dos form, muito Obrigado.
Mas por exemplo se eu crio um form, e quando clico fora dele ele fecha...
Qual tipo de form devo criar ?
E Para complementar o form, que criar vou criar outro form, com ele e também não pode fechar quando clicar fora, só vai poder mexer no form que criou.
No caso 3, forms
FORM1 > FORM2 > FORM3
Quando criar o 2 o usuário só pode fechar ele, sem clicar forá...
E Também não pode clicar no 1, a mesma coisa com o FORM3.
Obrigado
Obrigado
O Não correto, que eu escrevi é que não é para todos os casos.
Muito legal a explicação dos form, muito Obrigado.
Mas por exemplo se eu crio um form, e quando clico fora dele ele fecha...
Qual tipo de form devo criar ?
E Para complementar o form, que criar vou criar outro form, com ele e também não pode fechar quando clicar fora, só vai poder mexer no form que criou.
No caso 3, forms
FORM1 > FORM2 > FORM3
Quando criar o 2 o usuário só pode fechar ele, sem clicar forá...
E Também não pode clicar no 1, a mesma coisa com o FORM3.
Obrigado
Obrigado
GOSTEI 1
Mais Respostas
Raczy
28/07/2005
Fm_Principal:=TfmPrincipal.Create(Application);
Fm_Principal.Show;
Sempre criei os meus formulários desta forma.
Fm_Principal.Show;
Sempre criei os meus formulários desta forma.
GOSTEI 0
Lynx
28/07/2005
mas assim não é o correto
GOSTEI 0
Rjun
28/07/2005
pq não é correto?
GOSTEI 0
Rafael Mattos
28/07/2005
Qual a melhor maneira de criar forms em tempo de execucao:
a) Application.CreateForm(TfmClientes, fmClientes);
Cria o Form; o proprietário é a aplicação.
b) fmClientes := TForm.Create(self);
Cria o Form; o proprietário é ele mesmo.
c) fmClientes := TForm.Create(Application);
Cria o Form; o proprietário é a aplicação.
d) fmClientes := TForm.Create(nil);
Cria o Form; teoricamente sem proprietário; na prática é a aplicação.
e) fmClientes := TfmClientes.Create(self);
Cria o Form; o proprietário é ele mesmo.
f) fmClientes := TfmClientes.Create(Application);
Cria o Form; o proprietário é a aplicação.
g) fmClientes := TfmClientes.Create(nil);
Cria o Form; teoricamente sem proprietário; na prática é a aplicação.
Poderiam me informar a diferenca entre elas?
Quando você cria um Form dinamicamente:
1. se criar através de CreateForm, que é um método de TApplication, você passa como parâmetro a instância da classe e o nome do seu objeto (TfmClientes, fmClientes);
2. se criar através de Create - método de TForm, entre outros - você passa como parâmetro o proprietário do componente criado (no caso o Form).
2.1 se o proprietário for a aplicação, o Form só será destruído quando você finalizar o aplicativo ou se você declarar Free ou Destroy no seu programa; (casos a, c, d, f, g);
2.2 se o proprietário for ele mesmo (self), o form terá que ser destruído por você;
2.3 se você criar, por exemplo, Form2 e passar como proprietário Form1; no momento em que Form1 for destruído, Form2 também o será.
Quanto à melhor maneira, depende de como você quer controlar a aplicação, mas leve em conta que enquanto um objeto não é destruído, ele está na memória.
a) Application.CreateForm(TfmClientes, fmClientes);
Cria o Form; o proprietário é a aplicação.
b) fmClientes := TForm.Create(self);
Cria o Form; o proprietário é ele mesmo.
c) fmClientes := TForm.Create(Application);
Cria o Form; o proprietário é a aplicação.
d) fmClientes := TForm.Create(nil);
Cria o Form; teoricamente sem proprietário; na prática é a aplicação.
e) fmClientes := TfmClientes.Create(self);
Cria o Form; o proprietário é ele mesmo.
f) fmClientes := TfmClientes.Create(Application);
Cria o Form; o proprietário é a aplicação.
g) fmClientes := TfmClientes.Create(nil);
Cria o Form; teoricamente sem proprietário; na prática é a aplicação.
Poderiam me informar a diferenca entre elas?
Quando você cria um Form dinamicamente:
1. se criar através de CreateForm, que é um método de TApplication, você passa como parâmetro a instância da classe e o nome do seu objeto (TfmClientes, fmClientes);
2. se criar através de Create - método de TForm, entre outros - você passa como parâmetro o proprietário do componente criado (no caso o Form).
2.1 se o proprietário for a aplicação, o Form só será destruído quando você finalizar o aplicativo ou se você declarar Free ou Destroy no seu programa; (casos a, c, d, f, g);
2.2 se o proprietário for ele mesmo (self), o form terá que ser destruído por você;
2.3 se você criar, por exemplo, Form2 e passar como proprietário Form1; no momento em que Form1 for destruído, Form2 também o será.
Quanto à melhor maneira, depende de como você quer controlar a aplicação, mas leve em conta que enquanto um objeto não é destruído, ele está na memória.
GOSTEI 1
Rafael Mattos
28/07/2005
Se eu entendi o que vc disse vc pode usar:
try
Form1 := TForm1.Create(Self);
Form1.ShowModal;
finally
freeandnil(Form1)
end;
try
Form1 := TForm1.Create(Self);
Form1.ShowModal;
finally
freeandnil(Form1)
end;
GOSTEI 0
Paullsoftware
28/07/2005
Uma boa maneira de criar Forms é usar uma função simples, q tb verifique se o mesmo já não foi criado...
como usar:::
[b:e90386ef28][i:e90386ef28]Op´s detalhe, estou usando MidForm e MidChild...[/i:e90386ef28][/b:e90386ef28]
Sempre uso esse metodo, e nunca deu problema... :wink:
function FormExiste(xForm: Tform): Boolean; var I:Integer; begin FormExiste := false; for I := 0 to Screen.FormCount -1 do if Screen.Forms[i] = aberto then begin FormExiste := true; Break; end end;
como usar:::
If FormExiste(Form_Clientes) then begin Form_Clientes.BringToFront; Form_Clientes.Focused; end else begin Form_Clientes := TForm_Clientes.Create(Self); end;
[b:e90386ef28][i:e90386ef28]Op´s detalhe, estou usando MidForm e MidChild...[/i:e90386ef28][/b:e90386ef28]
Sempre uso esse metodo, e nunca deu problema... :wink:
GOSTEI 0
Massuda
28/07/2005
a) Application.CreateForm(TfmClientes, fmClientes);
Eu prefiro deixar esta forma para o próprio Delphi utilizar para (auto)criar forms. Essa função toma um cuidado especial no caso do form que está sendo criado ser o primeiro form criado pelo programa.b) fmClientes := [color=red:8af04ba2c2]TForm[/color:8af04ba2c2].Create(self);
c) fmClientes := [color=red:8af04ba2c2]TForm[/color:8af04ba2c2].Create(Application);
d) fmClientes := [color=red:8af04ba2c2]TForm[/color:8af04ba2c2].Create(nil);
Embora essas três linhas compilem sem problemas, não vejo muita utilidade em criar forms da classe TForm... esses forms iniciariam vazios e você teria que incluir componentes neles em tempo de execução via código. Você usa isso?e) fmClientes := TfmClientes.Create(self);
f) fmClientes := TfmClientes.Create(Application);
g) fmClientes := TfmClientes.Create(nil);
Ao contrário dos três exemplos anteriores, estas linhas vão criar um form desenhado por você da classe TfrmClientes.Com relação ao proprietário (Owner)....
Owner é o objeto (da classe TComponent) que irá se encarregar de destruir o objeto que está sendo criado. No exemplo (e) seria o TComponent apontado por Self (normalmente outro form) e no exemplo (f) seria o Application.
Com relação ao exemplo (g), eu entendo que a intenção de usar nil é informar (ao compilador) que você está assumindo a responsabilidade de destruir o objeto que está sendo criado (ou, em outras palavras, o objeto que está sendo criado não será destruído automaticamente junto com outro).
Por questões de funcionamento do Windows, na prática, todos os objetos criados por seu programa que não foram destruídos durante a execução são destruídos no término do programa. O que pode ocorrer é você observar que o destrutor/OnDestroy dos forms são executados numa sequencia inesperada.
2.2 se o proprietário for ele mesmo (self), o form terá que ser destruído por você;
Isso não está correto, veja meu comentário acimaGOSTEI 0
Massuda
28/07/2005
Mas por exemplo se eu crio um form, e quando clico fora dele ele fecha... Qual tipo de form devo criar ?
Eu não entendi o que você quis dizer... poderia explicar melhor?E Para complementar o form, que criar vou criar outro form, com ele e também não pode fechar quando clicar fora, só vai poder mexer no form que criou.
Um form que não deixa você mexer em outros forms é exibido usando o método ShowModal do form. Esse form é exibido até que o valor de ModalResult do form seja não zero; normalmente o valor de ModalResult do form é alterado quando você clica num botão (é para isso que serve a propriedade ModalResult do botão). Forms que usam ShowModal normalmente são caixas de diálogo e são criados com borda bsDialog.GOSTEI 0
Lynx
28/07/2005
É assim Tenho um Form de cadastro, clico em um botao de consulta,vai abrir outro form...
Quando eu clico no 1 form, o 2 fecha sozinho...
Quando eu clico no 1 form, o 2 fecha sozinho...
GOSTEI 0
Massuda
28/07/2005
Quando eu clico no 1 form, o 2 fecha sozinho...
Para que dosi forms possam ser usados simultaneamente, exiba os forms usando Show (e não destrua os forms depois de executar o método Show). O que eu não entendo é o que você quer dizer com ´fecha sozinho´... você quer que o form seja destruído quando ele perder o foco de entrada? Nesse caso, execute Release no OnDeactivate do form.GOSTEI 0
Lynx
28/07/2005
Já funcionou normalmente com o showmodal...
Valeu
Valeu
GOSTEI 0