Turbo Vision For Delphi - Function Application : Function Application : TApplication;

  /// < since>
  ///  . A função Application retorna a aplicação corrente.
  ///  . A função Application será usada para compartilhar self de TApplication com todas classes filhas de Tview.
  ///  . Caso a aplicação corrente não esteja em ambiente multitarefa a função deve retornar a ultima aplicação da lista.
  /// < /since>
  Function Application   : TApplication;//TProgram;

   {$REGION '---> Declaração de variáveis locais'}
        var Session: TDSSession;
        var Index: Integer;
        var aObject : system.TObject;
   {$ENDREGION}

  BEGIN
    {$REGION '---> Se a lista de aplicações não foi inicializada retornar nil'}
      if Applications=nil
      then begin
             Result := nil;
             exit;
           end;
    {$ENDREGION}

    /// < since>
    ///  . procura o Application associado a sessão do usuário.
    /// < /since>
    Session := TDSSessionManager.GetThreadSession;
    if (Session<>nil)
    then  Begin
            {$REGION '--->  O sistema está trabalhando em ambiente multitarefa com TDSSessionManager' }
                if Applications.Find(Session.SessionName,Index)
                Then Begin
                       {$REGION '---> Localizou a sessão do usuário conectado.'}

                          {$REGION '---> Calcula o resultado da função'}
                             aObject := Applications.GetObject(Index);
                             if aObject is TApplication
                             then result := aObject as TApplication
                             else result :=  nil;
                          {$ENDREGION}

                          {$REGION '---> Se a sessão não é válida a mesma deve ser destruída.'}
                              if (Result<>nil) and (Not Session.IsValid)
                              then Begin
                                     Result.Free;
                                      Result := nil;
                                   End;
                          {$ENDREGION}

                       {$ENDREGION}
                     End
                else result :=  nil;
            {$ENDREGION}
          End
    else  begin
            {$REGION '---> A aplicação não está em ambiente multitarefa  com DSSessionManager ' }
                if Applications.Count>0
                then begin
                       /// < since>
                       ///  . Quando não está em ambiente multitarefa deve retornar a última aplicação da lista
                       /// < /since>

                       /// < since>
                       ///  . Pega a ultima tarefa
                       /// < /since>
                        aObject := Applications.GetObject(Applications.Count-1);
                        if aObject is TApplication
                        then result := aObject as TApplication
                        else result :=  nil;
                     end
                else Result := nil;
            {$ENDREGION}
          end;
  END;


Comentários