Fórum Criando uma procedura com variável... #216026

22/02/2004

0

Tem geito de eu colocar uma variável, como procedure variavel=valor, ao envéz de Objeto e Ação?
Sei que é meio sem lógica essa pergunta, pois existe o comando If, mas eu gostaria de saber se é possível...


Jasig Aurumalfa

Jasig Aurumalfa

Responder

Posts

22/02/2004

Ildefonso

Olá, Jasig.

A sua resposta para o caso das variáveis só funciona se forem números inteiros consecutivos. Mas para A = 5 e B = 3, já não dá. Pense um pouco mais que você vai ver que o professor que pediu a tarefa está querendo que exploremos a matemática básica, apenas, e seus princípios de distributiva e operação reversamente possíveis.

E... sim. É possível colocar um procedure em uma variável. Mas você deve declarar o tipo de procedure e atribuir este tipo a variável que irá sustentá-lo. Este é o caso, inclusive, dos eventos, que são atribuídos a variáveis internas dos componentes e, então, executados.

Imagine que você tem três [b:19d930e9cc]procedures[/b:19d930e9cc] para realizar tarefas internas do sistema:
type
  TMain = class(TForm)
    { ... }
    btFire: TButton;
    procedure btFireClick(Sender: TObject);
    
  private
    vProcedimento: procedure of object;
  public
    procedure MakeBackup;
    procedure MakeRestore;
    procedure MakeManut;
  end;

    { ... }

implementation

procedure TMain.btFireClick(Sender: TObject);
begin
  if Assigned(vProcedimento) then
    vProcedimento;
end;
A [b:19d930e9cc]procedure btFireClick[/b:19d930e9cc] dispara outra procedure cujo valor for guardado em vProcedimento... Ou seja, em algum lugar de seu código, você ´carrega´ a variável:
vProcedimento := MakeRestore;
... e o Delphi sabe que deve executar o procedimento atribuído à ela.

Note que o tipo deve ser compatível. Os eventos mais simples, por exemplo o próprio evento Click, são do tipo TNotifyEvent, que é declarado assim, na [b:19d930e9cc]unit[/b:19d930e9cc] classes.pas, do Delphi:
TNotifyEvent = procedure(Sender: TObject) of object;


Como já há um tipo definido, uma variável que apontasse para tais eventos deveria ser declarada como:
MeuEvento : TNotifyEvent;

Como o tipo da [b:19d930e9cc]procedure[/b:19d930e9cc] exige um argumento do tipo TObject - que pode ser qualquer um de seus descendentes, também - para você usar a variável, mesmo que na declaração não apareça, você deveria informar os argumentos corretos...
 { ... }
 MeuEvento(btFire);


Quando estamos trabalhando com componentes - modificando, criando, etc. - é muito comum o uso destas variáveis de procedimento. Seu uso adequado não incorre em perdas de recursos ou outros problemas de memória, mas pode deixar o código pouco legível sem a devida documentação e comentários.

Bom trabalho. 8)


Responder

Gostei + 0

22/02/2004

Marco Salles

A Sua Resposta Para Este Tópico Foi Brilhante Sr:Ildefonso, Mas Voce Atribui O Professor Do ´LucianoBarreto´ Para o ´Jasig Aurumalfa´

. Pense um pouco mais que você vai ver que o [color=red]professor [/color]que pediu a tarefa está querendo que exploremos a matemática básica, apenas, e seus princípios de distributiva e operação reversamente possíveis. 



Mas No Fim Dá Tudo Certo :P


Responder

Gostei + 0

24/02/2004

Jasig Aurumalfa

Gente, num viagem não, ainda num cheguei na faculdade não, e vou fazer física quando chegar lá, se Deus quizer...
Eu programo por conta própria mesmo, sou um jovem programador dedicado a curiosidade, nenhum professor me exigiu isso, ok?
:oops: Mas obrigado pela resposta, ajudou muito... :lol:


Responder

Gostei + 0

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

Aceitar