Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

delphi-vcl-menu-lateral

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

Menu-VCL Estilo Lateral

Este exemplo esta focado na parte de otimização de código contem duas funções

Video explicativo https://youtu.be/gw8XMchEBAg

abrirFormulario:

pascal
//Esta função faz a abertura do form, atraves do nome do botão. 
//Não há necessidade de importar a uses, ou de fazer declaração. 
//Como os form serão chamados sem sua prévia declaraão 	
//sera necessario registrar cada form isso é feito no initialization de cada form.
pascal
procedure TfrmMenuPrincipal.abrirFormulario(Sender: TObject);
var
  Formulario  : TForm;
  FormularioClasse : TFormClass;
  NomeFormulario : string;
begin
pascal
//Chamar a função para que menu seja fechado
abrirSubMenu(Sender);
pascal
NomeFormulario := StringReplace(TSpeedButton(Sender).Name, 'btn', 'Tfrm', [rfReplaceAll]);
try
  FormularioClasse  := TFormClass(FindClass(NomeFormulario));
  Formulario  := FormularioClasse.Create(Application);
pascal
Formulario.ShowModal;
pascal
except
  on E: EClassNotFound do
  begin
    ShowMessage('Não foi possivel encontrar a Tela solicitada!');
  end;
end;
pascal
end;

abrirSubMenu:

pascal
//Esta função Manipula a abertura e fechamento do menu.
procedure TfrmMenuPrincipal.abrirSubMenu(Sender: TObject);
var
  NomePanelMenu, NomePanelSubMenu: string;
  i, dimensao : Integer;
begin
pascal
// Definir qual vai ser o painel manipulado atraves do nome do SpeedButton
NomePanelMenu := StringReplace(TSpeedButton(Sender).Name, 'btn', 'pnl', [rfReplaceAll]);
NomePanelSubMenu := StringReplace(TSpeedButton(Sender).Name, 'btn', 'pnlSub', [rfReplaceAll]);
dimensao := 33;
pascal
//percorre os componentes da tela
for i := ComponentCount - 1 downto 0 do
begin
pascal
//Quando encontrar um Painel Menu diferente do clicado feche
   if (Copy(TPanel(Components[i]).Name, 1, 7) = 'pnlMenu') and
  (TPanel(Components[i]).Height <> 33) and
  (TPanel(Components[i]).Name <> NomePanelMenu) then
    TPanel(Components[i]).Height := 33;
pascal
//Calcular a dimensão que sera necessario para o painel expandir
if Components[i].GetParentComponent = TPanel(FindComponent(NomePanelSubMenu)) then
begin
  dimensao := dimensao + 33;
end;
pascal
end;
pascal
// Setar a dimessão no componente
if TPanel(FindComponent(NomePanelMenu)).Height = 33 then
begin
  TPanel(FindComponent(NomePanelMenu)).Height := dimensao;
end else
    begin
  TPanel(FindComponent(NomePanelMenu)).Height := 33;
    end;
pascal
end;

Ambas as funções são declaradas dentro das procedures do delphi, para que as mesmas sejam chamadas diretamente no evento do componente sem a necessidade de criar eventos para cada componente.