Fórum Como usar NULL para um parâmetro tipo quot;varquot; #332203

28/10/2006

0

Bom amigos, tenho uma função genérica para chamada das rotinas do sistema, na qual faço as validações de acesso e abertura de arquivos.

Preciso usar na função um parâmetro tipo ´var´.

procedure ChamaForm(nNivel: integer; var FormChamou );


Como faço para poder não passar o parâmetro FormChamou, já que em determinadas partes do sistema, não vou utilizá-lo?

A chamada com parâmetro seria assim:

ChamaForm(1001,fCadPro)


Sem parâmetro

ChamaForm(1001)


Em parâmetros ´normais´ utilizo:
Teste: string = ´´
Teste2: integer = 0


Mas nesse caso não sem como colocar que esse parâmetro pode ser deixado em branco.

Obrigado a todos

Mario[/code]


Aldus

Aldus

Responder

Posts

28/10/2006

Marco Salles

amigo aldus , porque voce não usa a directiva overload;


Responder

Gostei + 0

28/10/2006

Siam

E pq vc precisa passar como [b:f03d8a299e]var[/b:f03d8a299e] um objeto ?


Responder

Gostei + 0

28/10/2006

Tnaires

Olá
Como nosso colega [b:52574289f8]siam[/b:52574289f8] falou, você não precisa passar uma referência a um objeto usando [b:52574289f8]var[/b:52574289f8]. Basta fazer:
procedure ChamaForm(nNivel: integer; FormChamou: TForm );

Para escrever a função de forma que nem sempre seja necessário passar o segundo parâmetro, basta fazer:
procedure ChamaForm(nNivel: integer; FormChamou: TForm = nil );

Abraços


Responder

Gostei + 0

29/10/2006

Aldus

Bom dia amigos, coloquei como TForm = nil e funcionou como queria.

O objetivo dessa funcao é fazer com que determinadas partes do sistema quando estiver em um cadastro e chamar um outro, fazer com o que chamou ´já que vou passar´quem chamou fique transparente:

A funcao ficara mais ou menos assim:

procedure tform1.chamaform(nform: integer; formchamou: TForm = nil);
begin
   // Primeiro faco a validacao
   if Pode acessar o form chamado then
      begin
         if FormChamou <> nil then
            begin
               formchamou.AlphaBlend := true;
               formchamou.AlphaBlendvalue := 120;
            end;
         if nForm = 1 then
            form2.ShowModal
         else if nform = 2 then
            form3.ShowModal ;
      if FormChamou <> nil then
         begin
            formchamou.AlphaBlendvalue := 255;
            formchamou.AlphaBlend := false;
         end;
      end;
end;


Obrigado a todos e bom fim de semana

Mario


Responder

Gostei + 0

30/10/2006

Marco Salles

procedure tform1.chamaform(nform: integer; formchamou: TForm = nil); 
begin 
   // Primeiro faco a validacao 
   if Pode acessar o form chamado then 
      begin 
         if FormChamou <> nil then 
            begin 
               formchamou.AlphaBlend := true; 
               formchamou.AlphaBlendvalue := 120; 
            end; 
         if nForm = 1 then 
            form2.ShowModal 
         else if nform = 2 then 
            form3.ShowModal ; 
      if FormChamou <> nil then 
         begin 
            formchamou.AlphaBlendvalue := 255; 
            formchamou.AlphaBlend := false; 
         end; 
      end; 
end;


Não teria jeito de melhorar isto não ???? Pelo que to entendendo o valor
nform ja define o Formularoi ique sera chamado.. Alem disso o fato de voce ter duplicidade de codigos , por exemplo
if FormChamou <> nil then aparece duas vezes
sugere refactoring...
Alem do mais voce esta dentro de uma procedure do privativa do form1 tratando explicitamente com objetos (Form2 e Form3)... Veja se voce fizer disso uma prática , imagine que caso voce altere o nome dos Form do projeto , em consequencia voce ira ter que alterar o nome desse formularios em cada procedure.. Imagine ainda que essas proceudres são muitas ... Enfim , para mim , não constitui boa parte de POO , em termos de visuabilidade , reuso, encapsulamento etc.... é so uma opinião


Responder

Gostei + 0

30/10/2006

Aldus

Bom dia Marco, obrigado pela preocupação, mas essa rotina é responsável pela abertura e encerramento de todos os meus forms, não tenho citação de nomes dos forms no projeto, apenas nessa função, pois nela coloco minhas validações, abertura e fechamento de arquivos, portanto, qualquer mudança de nessas funções, altere somente aqui.

Obrigado pela atenção

Mario


Responder

Gostei + 0

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

Aceitar