Lazarus - Barras de ferramentas e de status

Vamos continuar usando a aplicação criada no post anterior. Agora vamos acrescentar uma barra de ferramentas e de status e mostrar também como implementar menus locais, chamados de pop-ups.

Barra de Ferramentas

Selecione a aba Common Controls na paleta de componentes. Pegue um TToolBar e coloque no form. Não precisa se preocupar com a posição, o Lazarus sabe exatamente onde fica uma barra de ferramentas e já a posiciona corretamente. Vamos dar o nome (Name) de tbaPrincipal ao componente. Nossa ToolBar terá botões para alterar as cores e o alinhamento do texto. Exatamente as mesmas opções do menu. Para inserir os botões, clique com o botão direito e selecione New Button. Insira dois botões. Em seguida insira um separador, selecionando New Separator. Após isso insira mais três botões.

ImageList

Para definir imagens para os botões devemos usar o componente TImageList. Pegue um desses na própria aba Common Controls e dê a ele o nome imlPrincipal. Depois de por no form - em qualquer posição - clique com o botão direito nele e selecione Editor "Image List". Clique no botão adicionar e selecione um ícone apropriado para cada botão. Depois disso selecione o ToolBar, vá na propriedade Images e selecione imlPrincipal. Clique então em cada botão e defina na propriedade ImageIndex qual o índice do ícone que você deseja para ele. O índice do primeiro botão do ImageList é 0. Nosso form deve estar com a aparência da figura abaixo, dependendo claro dos ícones que você escolheu para os botões.

 

Vamos então programar os eventos OnClick de cada botão. Neste caso iremos simplesmente reutilizar os códigos dos eventos OnClick das opções de menu correspondentes. Para fazer isso clique no primeiro botão e no Inspetor de Objetos selecione a aba Eventos. Em vez de dar um duplo clique no evento, apenas clique na caixa e localize o procedimento mnuCorTextoClick. Selecione-o. Pronto, agora a opção de menu Cor do Texto de o botão da barra de ferramentas têm o mesmo código no evento OnClick. Repita o procedimento para os demais botões.
Observe que no menu foi criada uma opção Visualizar -> Barra de ferramentas. Essa opção permitirá visualizar/ocultar a ToolBar. Dê um clique nessa opção para abrir o editor de código no procedimento OnClick e escreva:

tbaPrincipal.Visible := not tbaPrincipal.Visible;
mnuBarraFerramentas.Checked := tbaPrincipal.Visible;


Dê um duplo clique no MainMenu e selecione Barra de ferramentas. Localize a propriedade Checked e mude-a para True. Como sempre que abrimos o programa a ToolBar está visível, então deixamos a opção de menu marcada. Note que a opção Visualizar -> Barra de ferramentas funciona como um CheckBox.

Barra de Status

A barra de status é usada para apresentar inúmeras informações ao usuário. Pode mostrar mensagens, a data e hora atuais, dicas, etc. O Lazarus possui um componente para essa finalidade. Na paleta de componentes vá até a aba Common Controls, selecione o componente TStatusBar e o insira na nossa aplicação. Não importa onde você insere o StatusBar, o Lazarus sempre o posiciona na base da janela. Mude a propriedade Name do componente para stbPrincipal.
Uma barra de status pode ter vários painéis que agrupam informações relacionadas. Vamos dividir esta barra em dois painéis. Clique no botão elipse ao lado direito da propriedade Panels. Isso irá abrir o editor de painéis. Adicione dois painéis pressionando o botão Adicionar na parte superior do editor.
O Lazarus guarda as informações sobre os painéis do StatusBar em um array. O primeiro painel é chamado stbPrincipal.Panels[0] e o segundo stbPrincipal.Panels[1]. Cada painel é um objeto do tipo TStatusPanel. Portanto possui propriedades e métodos. Mantenha o editor de painéis aberto. Clique no primeiro painel e digite Desenvolvido por João da Silva. Altere a propriedade Width para um valor conveniente, 300 por exemplo.
No segundo painel mostraremos a hora atual. Esta informação deve ser mostrada de forma dinâmica. Para isso será usado o componente TTimer que se encontra na aba System. Esse componente tem um evento chamado OnTimer que ocorre em intervalos de tempo que são definidos pela propriedade Interval. Por padrão o intervalo é de 1000 milissegundos. Coloque esse componente em qualquer posição no form e altere a propriedade Name para timHora. Deixamos Interval como está pois o evento ocorrerá exatamente a cada segundo.

Selecione a aba Eventos e dê um duplo clique o evento OnTimer. Escreva o seguinte código:

stbPrincipal.Panels[1].Text := TimeToStr(Time);

Esse código converte para string a hora atual devolvida por Time e a atribui à propriedade Text do segundo painel. Lembre que esse código é executado a cada segundo, mantendo a hora no painel sempre atualizada.

Menu local

Nas aplicações Windows é comum haver menus locais ativados com um clique no botão direito do mouse. O menu que é mostrado geralmente depende do local onde o mouse é clicado. Esses menus agrupam opções relacionadas com o elemento da interface que está selecionado. São mais rápidos que o menu estudado anteriormente porque não necessita que o mouse seja movimentado para ativá-lo.
Para adicionar um menu local a um form, selecione o componente TPopupMenu na aba Standard e o insira no  form em qualquer posição. Altere a propriedade Name para popAlinhamento. Dê um duplo clique no componente e insira as opções: Esquerda, Centro e Direita. A maneira de inserira as opções é semelhante ao que fizemos para o MainMenu. Ou seja, queremos um menu local com as mesmas opções referentes ao alinhamento do texto do MainMenu que criamos.
Ainda com o editor de menus aberto, clique na opção Esquerda. Selecione a aba Eventos e no evento OnClick selecione o procedimento mnuEsquerdaClick. Proceda de forma semelhante para as outras duas opções. Ou seja, reutilize o código, visto que é exatamente o mesmo.
Selecione o Memo e na propriedade  PopupMenu selecione popAlinhamento. Esta é a maneira de associar o menu local a um componente. Execute o programa, teste todas as funcionalidades implementadas.

A partir do próximo artigo falaremos de aplicações de banco de dados usando o Lazarus. Até lá.

20 comentários:

Anônimo disse...

Boa tarde professor.
Sou iniciante em lazarus e gostei muito do seus topicos.
gostaria de saber se tem um link para baixar o lazarus em portugues, um que nao seje corropdo , achei varios na net mas todos corrompdo.
parabens pelo blog.

Professor Carlos disse...

Oi Waldony

Obrigado pelo comentário. Você não consegue baixar o lazarus em português. Leia o post http://professorcarlos.blogspot.com/2009/12/lazarus-primeiros-passos.html e lá você encontra o link para o site oficial e pode baixar a versão para o sistema operacional que você usa. Nesse mesmo post tem uma dica de como mudar o idioma da interface para português. Qualquer dúvida me mande um e-mail para stonefull.stm@gmail.com

Anônimo disse...

Obrigada professor, pena não haver trabalhos direcionados ao lazarus, não que eu conheça, porque mesmo que o delphi seja a linguagem de base do lazarus e object pascal o lazarus tem muitas ferramentas que não conhecia.
Obrigada pela ajuda.

Professor Carlos disse...

Waldony

Não entendi o que você quis dizer sobre não haver trabalhos direcionados ao lazarus. A comunidade de desenvolvedores está criando aplicações em lazarus. É por isso que o produto está crescendo. Estou aberto a discussões sobre a ferramenta. São pessoas como você, que se dispõem a experimentar, e correr um risco enorme de gostar, que ajudam no desenvolvimento de uma ferramenta assim. Grande abraço.

Unknown disse...

Boa tarde Prof. Carlos

Inatalei Lazarus no pc e ee fica travando. Estou com Windows 7. Existe uma versão para wndows 7?

Ele trava quando vou desenvolver a barra de Menu postada por você.

Evaristo Rodrigues, graduando do quarto semestre do curso de Análise e Desenvolvimento de software

Professor Carlos disse...

Evaristo

Não existe versão específica para windows 7. Que versão você instalou? Exatamente em que ponto está travando? Melhor instalar a versão do SVN.

Anônimo disse...

ola professor carlos to com lguns probleminhas ainda na programação não to conseguindo resolvr esse problema
que parece ser facil mas ta complicado. o exercicio pede assim:
agora faça um algoritimo em pascal,que receba a idade de tres pesoas e moster a media da idade entre elas.
(o erro que ta dando que eu não to conseguindo resolver indica no sinal do + entre o n2 e o n3.
obrigado des de ja .
program idade
var n1,n2,n3 soma:integer;
begin
writeln('digite a idade');
readln(n1);
writeln('digite a idade');
readln(n2);
writeln('digite a idade');
readln(n3);
soma:=n1+n2+n3 / 3
writeln('soma e:'soma);
readln;
end.

Professor Carlos disse...

O operador de divisão de integer não é /, é div. E você deve usar parênteses para determinar precedência. Assim o cálculo da soma deve ser:
soma := (n1 + n2 + n3) div 3;

Luiz disse...

Boa tarde estou realmente iniciando em programação e utilizando o Lazarus para elaboras um sistema de consultas e lançamentos, e minhas dúvidas são quanto ao menu e submenu, que não consigo fazer o submenu ficar oculto ou seja visible := false. E a outra dúvida é se posso trabalhar com referências e cálculos dentro de banco de dados? EX: numa tabela com dados pessoais que busque numa coluna informações pertinentes ao lançamento na coluna anterior em outro banco de dados ou tabela ou que realize cálculo de diferenças de horas; datas ou simples cálculos matemáticos?

Professor Carlos disse...

Para que o submenu fique oculto você deve ocultar a opção que abre o submenu ou então ocultar cada uma das opções do seu submenu. Quanto as dúvidas sobre banco de dados, apesar de não serem muuito claras, é possível sim. Se você for mais específico, dando um exemplo, eu posso tentar ajudar.

Carolina Suzigan disse...

Como faço para adicionar qualquer componente no LAZARUS?

Professor Carlos disse...

Carolina

Para instalar um componente você deve ter um pacote lpk. Então use a opção de menu Package -> Open package file. Selecione o pacote desejado e confirme. Na janela do pacote clique em Compile e depois em Install. É isso.

Gabriel disse...

Ola professor
estou iniciando em lazarus e estou gostando muito dos seus artigos
queria saber se tem assim como o ttimer a ferramenta para mostrar a data atualizada
gostaria de colocar ela tambem na barra de eventos

Professor Carlos disse...

Oi Gabriel

Pode usar DateToStr(Date)

Luis Carlos disse...

professor eu quero saber para que serve e o que são os objetos do lazarua da paleta de componentes: Label EDIT Button Bitbtn

Professor Carlos disse...

Luis
LabeledEdit é um Edit + Label, os mesmos disponiveis NA ABA standard
BitBtn é um botão USA do em barras de ferramentas, ten apenas imagem pra identificá-lo

Unknown disse...

Muito bom o topico, e cada vez mais estou apredendo a usar novas ferramentas da paleta do lazzarus, ta sendo muio util, porem so tenho um probleminha nesse topico, quando vou digitar o codigo para o procedimento da barra de ferramentas
tbaPrincipal.Visible := not tbaPrincipal.Visible;
mnuBarraFerramentas.Checked := tbaPrincipal.Visible;

ta dando o seguinte erro
editor.pas(114,21) Error: identifier idents no member "Checked"

sua ajuda e muito bem vinda, e seu trabalho e ecelente

Professor Carlos disse...

Rômulo

Não tenho ideia sobre esse erro. Eu fiz um teste aqui e compilou. Se achar conveniente, pode enviar seu programa para eu verificar. Se for mandar exclua o arquivo exe e junte a pasta do programa em um arquivo zip.

Unknown disse...

mando por email?

Professor Carlos disse...

Sim

Django - Composição de queries brutas (raw queries)

Django Rest Framework (DRF) é uma poderosa ferramenta para criar Web APIs. Ele requer o uso de Python e do framework Django. Mesmo o Django...