Erro em Procedure - Criar Form Dinamicamente

Delphi

07/02/2009

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


Lightshine

Lightshine

Curtidas 0

Respostas

Dbergkamps10

Dbergkamps10

07/02/2009

Olá
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
POSTAR