Pq dá erro quando passo uma variável para criar um form??

Delphi

14/02/2005

Colegas..

É o seguinte, tenho um form, na qual eu utilizo em várioas módulos separadamente, então ele deve ser independente..

Para isso preciso dar um CreateForm em um dos forms, mas passá-lo como uma variável TForm, mas quando tento usá-lo em outros forms dá erro de violação de acesso FFFF, quando debuguei percebi que o form leva um valor null..

como faço para utilizar essa variável, sem ter que passar o próprio form..?

Agradeço antecipadamente..


Cabelo

Cabelo

Curtidas 0

Respostas

Rodolpho123

Rodolpho123

14/02/2005

Tente:
var
   fForm : TSuaClasseDeForm;
   //  Desde que a uses esteje declarada neste form onde vc chama o outro...

begin
    if fForm = nil then
    Application.CreateForm(TSuaClasseDeForm,fForm);



   //  Depois, vc destrói o Form onde vc quiser, usando
  FreeAndNil(fForm);

end;



GOSTEI 0
Cabelo

Cabelo

14/02/2005

Colega..

Isso eu já faço, exatamente como vc sugeriu.. o problema está no seguinte..

Em um determinado momento eu chamo um form de busca.. frmBusca, neste form eu tenho a variável s_form.. dentro de um do form selecionar cliente eu preciso chamar o frmbusca, e passar para a variável o form cadastro de clientes, frmCadCli.. até aí belesa uso o createform como vc sugeriu e ele cra, o problema está quando eu preciso usar o form por exemplo frmCadCli.caption := ´Teste´, aí dá erro de violação de acesso, debuguei, e o que ele criou foi um ´espelho´ do form que passei pra variável, com o nome frmCadCli_1, isto é não criou o form como deveria ser..

Preciso criar este mesmo form, mas sem usá-lo na seção USES do frmBusca..

Tem outra sugestão..?


GOSTEI 0
Rodolpho123

Rodolpho123

14/02/2005

Tente antes de criar o seu Form pela variável, passar [b:8f199885ea]nil[/b:8f199885ea], pois eu já tive um problema parecido com o seu. Quando eu atribuía minha variável, assim:
var
   fForm : TMinhaClasse;


ela já vinha instanciada, como vc disse, um ´espelho´ da classe de herança. E o que resolveu foi fazer isto:
begin
   fForm := nil;
   Application....
end;


Acho que isto pode resolver o seu problema...


GOSTEI 0
Beppe

Beppe

14/02/2005

Sem colocar a unit no uses é impossível fazer algo com o form diretamente, mas dá pra fazer algo com Screen.Forms, ou se vc usar um variável global.

for I := 0 to Screen.FormCount - 1 do
  if Screen.Forms[I].ClassName = ´TfrmCadCli´ then
  begin
    Screen.Forms[I].Caption := ´Teste´;
    Break;
  end;



GOSTEI 0
Cabelo

Cabelo

14/02/2005

Eu utilizo uma variável global e mesmo assim não consegui, e com o screen forms ficou extremamente lenta a plicação, já que passo quaso todos os parâmetros em RUN TIME, o que eu acho estranho, é pq criar um form parecido se eu passo um form existente para a variável..

Não posso tratar na seção uses, já que uso este form em vários módulos, sendo que ele é compartilhado a todos..

Tem alguma outra sugestão?


GOSTEI 0
Beppe

Beppe

14/02/2005

Cabelo, verifique este thread: http://forum.clubedelphi.net/viewtopic.php?t=58133

Isto sanará seu problema de ineficiência.

T+


GOSTEI 0
POSTAR