Fortes Report disponível para XE6

O FortesReport (não confundir com FastReport, nativo do Delphi, C++ Builder e RAD Studio) é um gerador de relatórios nacional, Open Source, produzido pela Fortes Informática de Fortaleza, exclusivamente para Delphi.

Em sua página oficial o download está homologado até a versão XE3 do Delphi. Porém, o usuário Willian Santos, da EdeSoft (parceiro de treinamentos da Embarcadero) atualizou o pacote para XE6 e os fontes estão disponíveis para download neste link:

http://cc.embarcadero.com/item/30001 (link atualizado)

IMPORTANTE: O fabricante original da ferramenta, e também o autor desta adequação para Delphi XE6, estão isentos de qualquer responsabilidade e suporte sobre esta versão em particular.

Suporte para Acessibilidade no FireMonkey

Disponibilidade

O suporte de acessibilidade FireMonkey está disponível para Delphi e C++ Builder XE6 para Windows Win32, Win64 e para aplicações Mac OS-X. Os usuários registrados podem baixar o pacote neste link:

http://cc.embarcadero.com/item/29850

Tecnologia

O suporte de acessibilidade FireMonkey é baseado na interface Microsoft MSAA para Windows ( Microsoft Active Accessibility arquitetura ) e no protocolo de acessibilidade do OS-X e para MAC.

As informações sobre as APIs podem ser encontradas em :

MSAA: http://msdn.microsoft.com/en-us/library/ms971310.aspx

OS-X: http://goo.gl/dguz6N

A implementação do Windows MSAA foi testado com Freedom Scientific JAWS e Microsoft Windows Narrador.

No Mac OS X, ele foi testado contra os aplicativos da Apple VoiceOver .

Arquitetura

Para implementar as interfaces de acessibilidade do sistema operacional, uma nova classe de formulário foi derivado do padrão FireMonkey TForm. Esta nova classe (TAccForm) tem uma implementação diferente para o sistema Windows e outra para OS-X, mapeando todas as interações necessárias com os controles do FireMonkey. Esta classe TAccForm tem tratamento interno para os controles mais comuns e padrões do FireMonkey. Isso significa que, além de descender seus forms de TAccForm em vez de TForm, o desenvolvedor não tem medidas adicionais a tomar para permitir a acessibilidade em aplicações FireMonkey.

Implementação

Para ativar um formulário FireMonkey para acessibilidade, primeiro adicione as unidades necessárias que implementam esta característica. A acessibilidade vem em 3 unidades: FMX.ScreenReaderCommon, FMX.ScreenReader.Mac e FMX.ScreenReader.Win:

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti,
  System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms,
  FMX.Dialogs, FMX.StdCtrls, FMX.ScreenReaderCommon
  {$IFDEF MACOS}
  , FMX.ScreenReader.Mac
  {$ELSE}
  , FMX.ScreenReader.Win
  {$ENDIF}
  ;

Em seguida, descenda seu form de TAccForm, em vez de TForm:

type
  TForm1 = class(TAccForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private
declarations }
  public
    { Public
declarations }
  end;

var
  Form1: TForm1;

Controles Suportados

A implementação de acessibilidade FireMonkey tem suporte automático para os seguintes controles do FireMonkey :

TButton
TSpeedButton
TTracker
TEdit
TListBox
TComboBox
TComboEdit
TSpinBox
TLabel
TCheckBox
TRadioButton
TMainMenu
TMemo
TTreeView
TCustomGrid
Isso significa que quando você usar qualquer um desses controles em seu aplicativo, não há medidas adicionais a tomar. O TAccForm vai corretamente permitir ao software leitor de tela “ler” o texto ou o “estado” destes controles. Note-se também que todos os controles descendentes também irão herdar automaticamente o suporte de acessibilidade .

Controles Personalizados

Para adicionar suporte para um controle personalizado para acessibilidade, adicione a interface IFMXAccessibility em seu controle ao implementá-lo.

O IFMXAccessibility é definida como :

  // Interface for custom controls to add accessibility support
  IFMXAccessibility = interface
  ['{49AF90E5-341A-4869-9D3E-F659670FB4D8}']
    // Return the text to read by the accessibility interface
    function GetControlText: string;
    // Returns the accesibility role of the custom control
    function GetRole: TFMXRole;
  end;

Portanto, esta interface é constituída por dois métodos simples :

GetRole: returns the role of the custom control
GetControlText: returns the text the screenreader should voice when the control has focus

Já o tipo TFMXRole é definida como :

TFMXRole = (rStaticText, rCell, RTEXT, rButton, rCheckBox, rRadioButton, rGrid, rList, rSlider, rComboBox, rTabGroup);

Assim, para um controle de edição personalizada, este pode ser implementado como :

type

  TMyOwnFireMonkeyEdit = class(TControl, IFMXAccessibility)
  protected
    function GetControlText: string;
    function GetRole: TFMXRole;
  end;

implementation

{ TMyOwnFireMonkeyEdit }

function TMyOwnFireMonkeyEdit.GetControlText: string;
begin
  Result := GetMyControlText,
end;

function TMyOwnFireMonkeyEdit.GetRole: TFMXRole;
begin
  Result := rText;
end;