GARANTIR DESCONTO

Fórum Pq dá erro quando passo uma variável para criar um form?? #268507

14/02/2005

0

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

Responder

Posts

14/02/2005

Rodolpho123

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;



Responder

Gostei + 0

15/02/2005

Cabelo

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


Responder

Gostei + 0

15/02/2005

Rodolpho123

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


Responder

Gostei + 0

15/02/2005

Beppe

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;



Responder

Gostei + 0

15/02/2005

Cabelo

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?


Responder

Gostei + 0

15/02/2005

Beppe

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

Isto sanará seu problema de ineficiência.

T+


Responder

Gostei + 0

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

Aceitar