Menu Principal
Praticamente em qualquer aplicação precisaremos de um MENU DE OPÇÕES.
Como sugestão de uso, o RadCORE traz um menu que é preenchido dinamicamente e que a chamada de cada opção também é feita de forma dinâmica, ou seja, você não precisa codificar nada, apenas informar como será o conteúdo do menu.
Há muitos anos utilizo um "padrão" de nomenclatura que se aplica a praticamente qualquer situação, então, apliquei isso no RadCORE.
- MENU BÁSICOS
- MENU MOVIMENTO
- MENU RELATÓRIOS
- MENU FERRAMENTAS
- MENU OUTROS( ou OPÇÕES )
Para cada opção classificamos mais níveis então, no meu humilde ponto de vista, o 1o. nível do MENU fica mais simples e fácil para o usuário.
Claro que você poderá mudar isso, basta compreender o fluxo da execução.
Entendendo o Processo
No evento Create do main.pas haverão diversas functions/procedures para configurar toda a tela( estude o código ).
A montagem dinâmica do menu é feita com rc_BuildMainMenu
que por sua vez executará a montagem individual do menu por categoria:
Como dito anteriormente, esse é o padrão escolhido por mim, estude o código e poderá alterar de acordo com seu necessidade.
Para cada grupo de opções foi criada uma unit contendo o seu respectivo conteúdo.
> alguns usuários modificaram e transportaram para isso para tabelas mas eu consigo parametrizar melhor e definir "exclusões" usando da forma padrão.
Adicionando ítens
Importante: a partir da versão 5.0 foi simplificado a criação dos menus mas, toda a estrutura anterior permanece ativa, ou seja,
você pode continuar usando a função anterior.
procedure rc_BuildMenuItem( pMenuGroup : string;
pLevel : integer;
pItem : string
);
pMenuGroup : Grupo do menu a ser criado( '' or 'B'asic, 'M'ovement, 'R'eport, 'T'ools, 'O'thers )
pLevel : Nível do menu a ser criado.
pItem : Definição da opção do menu a ser criada no seguinte formato:
> rc_BuildMenuItem( 'Descrição da opção param1:aaa param2:aaa' );
Exemplos de definições:
tbl: > Tabela no banco de dados que será vinculada a esse ítem.
fld: > Nome do campo na tabela de restrições( USUARIOS_RESTRICOES ) para controle de permissionamento.
frm: > Nome do formulário/frame( sem o prefixo padrão ).
ico: > Ícone fontawesome para ser exibido do lado do ítem.
modal: > Se este ítem for um FORM, e este precisar ser exibido de forma MODAL.
hide: > Este ítem ficará oculto se o usuário não for MASTER.
asknew: > Este ítem perguntará se quer cadastrar outro registro logo após SALVAR um registro anterior.
genid: > Gerar ou não um novo sequencial ao cadastrar um novo registro.
genid-off: > Não gerar um novo sequencial ao cadastrar um novo registro. Informar "getpk:" se "genid-off:" for informado.
closebtn: > Exibir ou não o "( x )" para fechar a aba.
notshow: > Efetivamente não exibir no menu. Mesmo que o usuário seja MASTER.
master: > Não exibe no menu se não for MASTER e ao ser clicado, vai exigir senha MASTER.
tag-form: > Passa uma "tag string" que poderá ser lida pelo formulário para disparar alguma ação.
getpk: > Informa o campo de sequência da tabela vinculada( tbl: ) pois por padrão, o primeiro campo da chave primária é usado pelo RC como sendo a sequência da tabela vinculada( tbl: ).
expand: > Inicia a opção do menu já aberta.
Verifique seus respectivos parâmetros para indicar ao RadCORE a estrutura de cada opção que será criada. Estude o código fonte para ver o que cada opção faz e assim compreender melhor o recurso.
O resultado final ficará da seguin forma:
Vejamos a configuração de algumas opções( de acordo com a lista de parâmetros de "rc_BuildMenuItem" e o padrão de prefixos visto em "Padrões e Convenções" ):
Prefixos padrões:
FRM_CLASS_PREFIX: Será usado quando o parâmetro "table" não for informado( Padrão: TFrm )
FRM_CLASS_CRUD_PREFIX: Será usado sempre que o parâmetro "table" for informado( Padrão: TFrmCad )
Chamada CRUD padrao. O nome do FORM é igual ao da sua tabela respectiva( com prefixo padrão TFrmCad )
rc_BuildMenuItem( '', 0, 'Cidades tbl:cidades' );
nota:
Quando informado o parâmetro "table( tbl: )", o RadCORE compõe o nome da classe do formulário com o prefixo padrão
( Ex: TFrmCadCIDADES )
Chamada CRUD herdado mas o nome do FORM é diferente do nome da tabela.
rc_BuildMenuItem( 'M', 0, 'PDV tbl:oses frm:PDV' );
nota:
Quando informado o parâmetro "table( tbl: )" e o parâmetro "form( frm: )", o RadCORE compõe o nome da classe do formulário com o prefixo padrão
( Ex: TFrmCadPDV )
Chamada CRUD herdado mas o nome do FORM é diferente do nome da tabela e os prefixos padrões estão branco.
rc_BuildMenuItem( 'M', 0, 'PDV tbl:oses frm:TFrmPDV' );
nota:
Você deve preencher o parâmetro "form ( frm: )" com o nome completo da sua classe.
( Ex: TFrmPDV )
Chamada SEM CRUD herdado. Não herda de frmBaseCRUD( com prefixo padrão TFrm )
rc_BuildMenuItem( '', 0, 'Buttons frm:Demo_Buttons ico:fas-dot-circle' );
nota:
Quando não informado o parâmetro "table( tbl: )", o RadCORE compõe o nome da classe do formulário com o prefixo padrão
( Ex: TFrmDemo_Buttons )
Chamada de opção de RELATÓRIO( herdado de frmBaseMENUREL )
rc_BuildMenuItem( 'R', 0, 'Rel. Clientes frm:reportMenuClientes' );
Chamada de opção com cadastro contínuo e geração direta de sequencial
rc_BuildMenuItem( 'T', 0, mm.MNU_TOOLS_USERS + ' tbl:usuarios ico:fas-user-cog asknew: ' );
Chamada de opção sendo FORMULÁRIO MODAL
rc_BuildMenuItem( '', 0, 'Form ( open MODAL ) frm:DEMOWITHFORMModal ico:fas-dot-circle modal:' );
Exibindo formulários dinamicamente
Outro recurso útils do sistema de menus do RadCORE é a possibilidade de exibir ou até mesmo iniciar um novo cadastro chamando o formulário de qualquer ponto da sua aplicação.
No demo geral( versão BRASIL/GLOBAL) você encontrará o "frmDEMO_FORMS" e nele exemplos de uso das opções abaixo.
1. Exibindo o formulário:
2. Exibindo o formulário e mostrando o conteúdo de um determinado registro:
3. Exibindo o formulário e mostrando o conteúdo de um determinado registro e iniciando sua edição:
4. Exibindo o formulário e iniciando um novo cadastro:
5. Exibindo o formulário dentro de um Container:
6. Exibindo o formulário com passagem de parâmetro( "tag-form:" ) :
7. Exibindo um FRAME como MODAL:
Assita esse vídeo:
https://youtu.be/EDenS2IdSSI
Estude o evento click do Menu Principal e debug para acompanhar o fluxo de execução e compreender melhor todo o processo.
Fechando um Frame
Você pode observar que quando você aciona( abre ) um frame/form( sem ser modal ) ele vai sendo adicionado no controle de abas superior.
Neste tópico( bsTABS e bsPILL ) foi comentado como funciona essa renderização das abas.
Em alguma situação, você pode escolhe em passar o parâmetro "closebtn:" pra esconder o "X" que fecha o frame diretamente na aba e desejar por um botão dentro desse frame para fechar manualmente. Insira o código abaixo para isso.
if mm.oPgGeneral <> nil then
mm.oPgGeneral.ActivePage.Close;
Created with the Personal Edition of HelpNDoc: Easily create Qt Help files