Erro em Procedure - Criar Form Dinamicamente
E ai pessoal, tudo bem? Caraca, eu tava longe do forum... mas agora to de volta hehe
Bom, minha duvida é a seguinte.
Cansada de ter que incluir duas, três ou até mais linhas de código cada vez que tenho que criar dinamicamente um formulario, pensei no seguinte... Criar uma unit padrão, onde adicionei a pasta Lib do meu Delphi, desta forma posso inlcui-la em qualquer projeto apenas acrescentando seu nome na seção Uses do mesmo.
Peguei aqui no forum mesmo a um tempão atras uma função que verifica se o form já foi criado ou não, se já estiver criado apenas chama o form, senão o cria.
Resumindo, até consigo ver saber se o form já está criado ou não, mas o erro ocorre exatamente na criação do form. O código é esse:
unit UFuncoes;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, Buttons, ExtCtrls, StdCtrls, ComCtrls, ToolWin, ImgList, DBTables, DB,
DbGrids, ShellApi, Registry, Grids, Typinfo, DbCtrls;
function ExistesForm(Existe: TForm): Boolean;
procedure CriarForms(xForm: TForm);
procedure FecharForms(xForm: TForm);
implementation
function ExistesForm(Existe: TForm): Boolean;
var
I:Integer;
begin
ExistesForm := false;
for I := 0 to Screen.FormCount -1 do
if Screen.Forms[i] = Existe then
begin
ExistesForm := true;
Break;
end
end;
procedure CriarForms(xForm:TForm);
begin
If ExistesForm(xForm)= true then
begin
xForm.BringToFront;
xForm.Focused;
end else
begin // neste bloco é que dá erro...
xForm.Create(self);
xForm.Focused;
end;
end;
procedure FecharForms(xForm: TForm);
begin
if xForm <> nil then
begin
FreeAndNil(xForm);
end;
Na hora de chamar meu form ficaria apenas assim:
CriarForms(NomeDoForm);
Já tentei colocar de tudo ali... Todas as formas que eu conheço de se criar um form e em todas dá erro...
Eu copiei da unit apenas as partes relevantes aos Forms, nessa mesma unit tem varias outras funcções que funcionam normalmente.... Só estou apanhando mesmo dessa....
Alguém pode me ajudar???
Bom, minha duvida é a seguinte.
Cansada de ter que incluir duas, três ou até mais linhas de código cada vez que tenho que criar dinamicamente um formulario, pensei no seguinte... Criar uma unit padrão, onde adicionei a pasta Lib do meu Delphi, desta forma posso inlcui-la em qualquer projeto apenas acrescentando seu nome na seção Uses do mesmo.
Peguei aqui no forum mesmo a um tempão atras uma função que verifica se o form já foi criado ou não, se já estiver criado apenas chama o form, senão o cria.
Resumindo, até consigo ver saber se o form já está criado ou não, mas o erro ocorre exatamente na criação do form. O código é esse:
unit UFuncoes;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, Buttons, ExtCtrls, StdCtrls, ComCtrls, ToolWin, ImgList, DBTables, DB,
DbGrids, ShellApi, Registry, Grids, Typinfo, DbCtrls;
function ExistesForm(Existe: TForm): Boolean;
procedure CriarForms(xForm: TForm);
procedure FecharForms(xForm: TForm);
implementation
function ExistesForm(Existe: TForm): Boolean;
var
I:Integer;
begin
ExistesForm := false;
for I := 0 to Screen.FormCount -1 do
if Screen.Forms[i] = Existe then
begin
ExistesForm := true;
Break;
end
end;
procedure CriarForms(xForm:TForm);
begin
If ExistesForm(xForm)= true then
begin
xForm.BringToFront;
xForm.Focused;
end else
begin // neste bloco é que dá erro...
xForm.Create(self);
xForm.Focused;
end;
end;
procedure FecharForms(xForm: TForm);
begin
if xForm <> nil then
begin
FreeAndNil(xForm);
end;
Na hora de chamar meu form ficaria apenas assim:
CriarForms(NomeDoForm);
Já tentei colocar de tudo ali... Todas as formas que eu conheço de se criar um form e em todas dá erro...
Eu copiei da unit apenas as partes relevantes aos Forms, nessa mesma unit tem varias outras funcções que funcionam normalmente.... Só estou apanhando mesmo dessa....
Alguém pode me ajudar???
Lightshine
Curtidas 0
Respostas
Dbergkamps10
07/02/2009
Olá
Tente assim:
Espero ter ajudado e que funcione....
Att
Dalton
Tente assim:
procedure CriarForms(xForm:TForm); begin If ExistesForm(xForm)= true then begin xForm.BringToFront; xForm.Focused; end else begin // neste bloco é que dá erro... application.createform(TxForm, xform.name); xform.showmodal; end; end;
Espero ter ajudado e que funcione....
Att
Dalton
GOSTEI 0