Componentes - criando eventos

Top  Previous  Next

============ criando eventos ===============

 

 

Se o seu evento só possui parametro SENDER: TOBJECT ou seja

padrão, use o type TNotifyEvent para simplificação do codigo

veja a dica sobreo NotifyEvent

 

crie um type procedure of object:

 

type

  TImprimeLinha = procedure(Sender: TObject; var Linha: string; 

                            var Aborta:Boolean; LinhaAtual: Integer) of object;

 

  // Componente TxPrinter

  TxPrinter = class(TComponent)

  private

 

    fOnImprimeLinha: TImprimeLinha; // interna

 

  public

    

    procedure Imprimeln(const Valor:string);

 

  published

 

    // declaraçao para o object inspector

    property OnImprimeLinha: TImprimeLinha read fOnImprimeLinha write fOnImprimeLinha;

 

  end;

 

implementation

 

procedure TxPrinter.Imprime(const Valor:string);

var

  Linha    : string;  // Linha que contém a string a ser impressa

  Imprimir : Boolean; // Se deverá imprimir ou não (var passada para o onImprimeLinha)

begin

  fOK   := True;

  Linha := Valor;

 

  Inc(LinhaAtual);  // uma var global exemplificada aqui

 

  // Se o OnImprimeLinha estiver associado, passa os parametros ANTES de imprimir

  if Assigned(OnImprimeLinha) then

  begin

    Imprimir := True; // De padrão imprime a linha atual

 

    // a passagem de Linha e Imprimir como var, permite que o usuário modifique

    // seus valores ANTES de completar esta rotina. Interceptando no OnImprimeLinha

 

    OnImprimeLinha(Self, Linha, Imprimir, LinhaAtual);

 

    if NOT Imprimir then Exit// Se o Imprime foi alterado então cancela a impressão...

  end;

 

  MandaImpressora(Valor);

end;