As operações que um usuário pode executar em programas com interface visual podem estar disponíveis de diversas maneiras. As formas mais óbvias e mais utilizadas são os menus, barras de ferramentas, menus de contexto, botões espalhados pela interface e, mais recentemente, os
ribbons introduzidos pela interface do
Microsoft Office. Com essa variedade de formas de se acessar uma operação, é bastante comum que esse acesso esteja disponível em mais de um lugar.
Do ponto de vista do programador surge então uma questão: qual a melhor maneira de se gerenciar as operações em uma aplicação, notadamente aquelas que estarão acessíveis por mais de uma via ? A solução para quem desenvolve com Delphi ou C++ Builder é um componente que já existe há um bom tempo nesses ambientes, chamado
TActionManager.
Como diz o nome, o objetivo do
TActionManager é gerenciar as operações que estarão disponíveis para o usuário em uma aplicação, centralizando a configuração básica de cada operação. O componente permite organizar as operações por afinidade (relativas a arquivo, edição, visualizar ou ajuda, por exemplo); informar textos e imagens descritivos da operação a fim de manter a uniformidade visual independente da forma de acesso escolhida; sinalizar se a operação está ativa ou mesmo visível.
E como é que isso tudo se conecta ? Alimentar o
TActionManager com operações faz com que o
IDE crie instâncias de um outro objeto, o
TAction. Cada
TAction corresponde a uma operação - ou ação - isolada, independente da interação necessária para ativá-la. Essa ação pode então ser associada à propriedade
Action existente em diversos componentes - itens de menu, botões, itens em barras de ferramenta, etc.
Entretanto, certos componentes - como o
TActionMainMenuBar e o
TRibbon - são configurados diretamente com uma instância do
ActionManager e não com ações individuais.
Para dar manutenção nas ações gerenciadas pelo
ActionManager, dê um duplo clique nele. Será exibida uma caixa de diálogo como a reproduzida abaixo, onde é possível criar novas ações, excluí-las e rearranjá-las. Selecionar uma ação fará com que o
Object Inspector apresente as propriedades relativas a ela.
Há umas poucas propriedades no
ActionManager e elas não são obrigatórias; destaco abaixo aquelas que são mais utilizadas:
Images e
DisabledImages são
TImageList contendo, respectivamente, a imagem que deve ser vinculada a uma ação quando ela está ativa e quando está desabilitada. Em ambos os casos, as imagens devem ser pequenas - 16 x 16
pixels. Uma das propriedades de uma ação é o índice da imagem a ser usada; como só há um índice, a imagem correspondente à ação deve estar exatamente na mesma posição em todas as listas de imagens configuradas.
LargeImages e
LargeDisabledImages são os
TImageList que contem imagens grandes - 32 por 32 pixels - para as ações configuradas nesse gerenciador. A primeira lista vincula imagens a ações ativas enquanto a segunda traz as imagens grandes para ações desabilitadas. Lembre-se que as imagens relativas a uma ação devem estar na mesma posição, conforme dito no tópico anterior.
State: Permite desativar todas as ações de um única vez, impedindo-as de serem disparadas.

Use a propriedade
ActionBars para criar barras de ferramentas associadas ao gerenciador.
FileName indica o caminho completo para um arquivo que armazernará a configuração dinâmica feita pelo usuário final em tempo de execução.
Como se depreende do exposto acima, o gerenciador de ações pode ser usado em conjunto com o
TCustomizeDlg para permitir ao usuário final reorganizar as barras de ferramentas.
Uma vez que o gerenciador está preparado, podemos acrescentar-lhe as ações e configurá-las. A lista abaixo mostra as principais propriedades do
TAction:

Use
Caption para informar o texto padrão para a ação. É esse texto que será usado num item de menu ou como texto de um botão onde a ação for vinculada.

Use
Category para organizar as ações, agrupando-as por afinidade, o que facilita a manuntenção de ações tanto para o programador quanto para o usuário final - caso a funcionalidade de configuração seja disponibilizada a ele.
ImageIndex é a posição das imagens a serem usadas para representar a ação em diversos contextos. Cada ação terá à sua disposição o mesmo índice em cada uma das 4 listas existentes no gerenciador de ações.

Uma combinação de teclas pode ser atribuída em
Shortcut. Essa combinação é um método alternativo para executar a ação associada a ela.

O evento
OnExecute é usado para centralizar a execução da ação. Assim, não é preciso acrescentar código em nenhum outro ponto do programa nem responder a outros eventos; basta configurar a propriedade
Action existente no componente que desejar disparar a ação - menus e botões, por exemplo.
Enabled permite habilitar ou desabilitar uma ação individual de forma centralizada. Isto é, altere essa propriedade para que todas as possibilidades de se executar a ação sejam afetadas de uma só vez.

Modifique a propriedade
Visible para esconder ou mostrar uma ação de uma só vez em todos os contextos nos quais ela estiver disponível.
2 comentários :
Esse é um componente fantástico, agora vai uma dúvida: Como criar criar Actions dinamicamente no ActionManager ?
William
Embora o TActionManager tenha sido concebido para se usar visualmente, é possível adicionar novas ações com o método AddAction. Ele aceita como parâmetros um TAction (que pode ser criado manualmente) e a banda onde a ação deve ser incluída (pode criá-la manualmente ou obter uma do ActionManager).
[]s
Postar um comentário
OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.
Observação: somente um membro deste blog pode postar um comentário.