Pular para o conteúdo principal

Lazarus - Criando menus

Aplicação exemplo

Para exemplificarmos a construção de menus vamos criar uma nova aplicação. Nossa aplicação será um editor de textos usando o componente TMemo. Após iniciar a nova aplicação defina a propriedade Name do  form como  frmEditor, o Caption como Editor e salve tudo atribuindo à unit o nome u_editor e ao projeto o nome Editor.
Selecione um componente Memo na aba Standard e insira-o no  form. Defina a propriedade Name  como  mmEditor. Na propriedade  Align selecione  alClient, dessa forma o Memo ocupará toda a área do form. Acesse a propriedade Lines e exclua a linha que lá aparece. Na propriedade ScrollBars selecione ssAutoVertical. Assim, quando for digitado um texto maior do que o pode caber no Memo, a barra de rolagem vertical irá aparecer automaticamente.

O Editor de Menus

Vamos criar um menu com a seguinte estrutura:

Arquivo
    Sair
Visualizar
    Barra de ferramentas
Opções
    Cor do texto
    Cor do fundo
    Alinhamento
        Esquerda
        Centro
        Direita
Ajuda
    Sobre 

Para utilizar o Editor de Menus do Lazarus precisamos de um componente TMainMenu. Selecione esse componente na aba Standard e o insira no form em qualquer posição. O Lazarus se encarrega de posicionar
o menu no lugar correto, abaixo da barra de título. 
Para abrir o editor dê um duplo clique no MainMenu. Na propriedade Caption digite &Arquivo e na propriedade Name digite mnuArquivo. Isso define o primeiro item de menu. Clique com o botão direito no item recém-criado. Em seguida clique em Inserir novo item (depois), digite &Visualizar no Caption e mnuVisualizar em Name. Repita esses passos para os itens &Opções e A&juda. Agora clique com o botão direito no item Arquivo e clique em Criar Submenu. Digite Sai&r no Caption, e mnuSair em Name. Faça o mesmo nos itens seguintes. Quando quiser incluir novo item use a opção Inserir novo item (depois) ou Inserir novo item (antes). Clique com o botão direito em Alinhamento e escolha Criar Submenu. Inclua os itens conforme descrito na estrutura do menu acima. Seu form deve estar com esta aparência:

Teclas de atalho e hotkeys

Uma característica dos itens de menu é que eles podem conter uma letra sublinhada, chamada  hotkey. Esta letra é usada para selecionar o menu usando o teclado. Pressionando ALT mais a letra sublinhada seleciona-se o menu. Pressionando outra letra sublinhada envia-se o comando. As letras sublinhadas de cada item dentro de um submenu devem ser diferentes. Observe que durante a criação do nosso menu, definimos as letras sublinhadas inserindo um & antes da letra.
Outra característica padrão dos menus são as teclas de atalho. Quando aparece uma combinação de teclas no lado direito do item de menu, significa que você pode usar essa combinação para executar o comando. Essa  característica oferece a maneira mais rápida de executar um comando.
Para associar teclas de atalho a um item de menu é muito fácil. No Editor de Menus simplesmente escolha uma combinação de teclas na propriedade ShortCut do item. Vamos fazer isso para as opções: Esquerda, Centro e Direita do item de menu Alinhamento. Selecione a opção Esquerda e na propriedade ShortCut selecione a combinação CTRL + E. Para a opção Centro selecione CTRL + C e para a opção Direita selecione CTRL + D. Veja a figura abaixo:

Respondendo aos comandos do menu

Vamos inserir o componente TColorDialog da aba Dialogs na nossa aplicação. Esse componente é uma janela onde podemos selecionar um cor. Mude a propriedade Name desse componente para dlgCores. Usaremos esse componente para mudar as cores do texto e do fundo do nosso editor. Dessa forma quando selecionarmos a opção Cor do texto ou Cor do fundo no menu Opções, a caixa de diálogo de cores será aberta e poderemos selecionar uma nova cor. Clique então em Cor do texto. O editor de código será aberto no método do evento OnClick dessa opção e digite o seguinte código:

dlgCores.Color := mmEditor.Font.Color;
if dlgCores.Execute then
      mmEditor.Font.Color := dlgCores.Color;

A primeira linha do código define que a cor selecionada no ColorDialog será a mesma do texto do Memo. Na linha seguinte definine-se que, se o usuário clicar OK no ColorDialog, a cor selecionada será atribuída à propriedade Color de Font do Memo. Compile e execute o programa. Digite um texto e mude sua cor usando a opção Cor do texto.
No evento OnClick da opção Cor do fundo digite o seguinte código:


dlgCores.Color := mmEditor.Color;
if dlgCores.Execute then
      mmEditor.Color := dlgCores.Color;

Este código é semelhante ao código de Cor do texto, mas neste caso mudamos a propriedade Color do Memo, que significa mudar a cor do fundo.

No grupo de Alinhamento, usaremos as opções para alinhar o texto à esquerda, à direita ou centralizar. Além disso queremos que a opção de menu que estiver selecionada fique marcada. Clique então na opção Esquerda. Digite o seguinte código no método que foi aberto:

mmEditor.Alignment := taLeftJustify;
mnuEsquerda.Checked := True;
mnuCentro.Checked := False;
mnuDireita.Checked := False;

A primeira linha define o alinhamento do texto no Memo. As três linhas seguintes definem qual opção de menu está selecionada. Vamos definir o código para OnClick de Centro:

mmEditor.Alignment := taCenter;
mnuEsquerda.Checked := False;
mnuCentro.Checked := True;
mnuDireita.Checked := False;

E para o evento OnClick de Direita:

mmEditor.Alignment := taRightJustify;
mnuEsquerda.Checked := False;
mnuCentro.Checked := False;
mnuDireita.Checked := True;

Chamadas a forms

Com certeza suas aplicações sempre terão muitos forms. Existe um form principal (main) que faz chamadas a outros forms. A maneira de fazer chamadas a outros forms será estudada agora. Vamos criar um novo form na nossa aplicação. Esta nova janela será o nosso Sobre (About). Para incluir um novo form selecione no menu Arquivo -> Novo formulário. Ou utilize o botão correspondente na barra de ferramentas. Neste novo form defina Caption como Sobre. Na propriedade Name informe frmSobre. Salve-o e escolha u_sobre para nome da unit. Você é livre para criar o Sobre da maneira que preferir. Mas no nosso exemplo vamos inserir um rótulo (TLabel) onde definimos o Caption como Programa desenvolvido por Carlos Araújo apenas para fins didáticos. Deixe a propriedade Width como 220 e WordWrap como True. A propriedade WordWrap define se o Caption permite quebra de linha. Inclua mais um rótulo e defina o Caption como Versão 1.0. Inclua um botão do tipo TBitBtn da paleta Additional e defina Name como btnFechar e Kind como bkClose.

 

Este botão não precisa de código no evento OnClick. A propridade Kind define a função do botão.
Agora que Sobre estrá pronto queremos que nossa aplicação mostre-o quando o usuário selecionar o menu Ajuda -> Sobre. Para efetivarmos isso precisamos primeiramente informar à unit u_editor que ela usará a unit u_sobre. Isto é feito digitando o seguinte código logo abaixo da seção implementation de u_editor:

uses u_sobre;

Agora u_editor tem acesso a tudo que é público em u_sobre. Há duas maneiras de fazer chamadas a forms:
  • Modal - o foco fica preso ao form e não é liberado até que este seja fechado. O usuário pode ativar qualquer outra aplicação, mas não pode ativar outra janela da aplicação cuja janela foi aberta como modal. Para ativar esse modo chame o form usando o método ShowModal.
  • Não modal  - o foco pode ser transferido para outra janela sem que esta precise ser fechada. Para ativar esse modo chame o  form usando o método Show.

Agora selecione o evento OnClick do comando Ajuda -> Sobre e digite o seguinte código:

frmSobre.ShowModal;

Selecione o evento OnClick do comando Arquivo -> Sair e digite Close no editor. Execute o programa e clique em Ajuda -> Sobre. Observe que você não pode fazer nada no programa sem que o form Sobre seja fechado. Confirme o funcionamento correto das outras opções do menu. Digite um texto no Memo e teste alterações de cores e alinhamento.
No próximo post mostraremos como criar barras de ferramentas, de status e menus locais (pop-ups).

Comentários

Anônimo disse…
To migrando do delphi para o lazarus, mas estou tendo dificuldades em mudar a cor do tabsheet, os codigos que encontrei so servem para delphi...

Se vc puder me ajudar...

Fabio Filo
obreiro_fabiofilo@hotmail.com
Professor Carlos disse…
Fábio

Não tenho essa informação pra lhe dar no momento, mas posso tentar descobrir. Mas seja mais específico. Você deseja mudar a cor de que?
Anônimo disse…
professor carlos ainda sou apenas um curioso no assunto "programar" dentre varia perguntas que eu faria eu escolhi uma, delphi e lázaros fazem o mesmo? alias outra dá pra desenvolver programas de q tipo , pra selular ex, e qual o nivel de estudo tem q se ter pra chegar nesse nivel obg. gostei do seu blog, meu msn josinaldo63@hotmail.com
Professor Carlos disse…
Josinaldo

Delphi e Lazarus fazem quase as mesmas coisas. Delphi roda apenas em Windows. Lazarus é multiplataforma e desenvolve também para smartphones, desde que o sistema seja Windows Mobile. Com Lazarus você cria jogos, programas comerciais, desenvolve para web e muito mais.
Anônimo disse…
josinaldo

ola professor, obrigdo por me esclareser essas duvidas, muito bom o seu blog.
Eu gostaria de mais uma dica se nao for encomodo, eu estou muito interesado em aprender a programar com lazarus ja tenho o programa a algum tempo mas estou naquela do iniciante que nao sabe bem por onde começo eu queria uma sugestão sua. tem apostilas que encina aqueles comandos?
Professor Carlos disse…
Além dos posts deste blog, onde você encontra exemplos, inclusive para todos os bancos de dados que o Lazarus trabalha, você tem os manuais de referência do Free Pascal em
http://www.freepascal.org/docs-html/
E o wiki do Lazarus em
http://wiki.lazarus.freepascal.org/
Anônimo disse…
josinaldo:

professor estou muito feliz, segui seus passos no tutorial para a criação desse editor de texto, fiquei feliz pois consegui corrigir um erro q apareseu na messagem apos eu execultar no final. E que na criaçao da opsao visualizar-barra de ferramentas eu coloquei como nome"barra de ferramentas" e no codigo o senhor postou :
( mnuBarraFerramentas.Checked := tbaPrincipal.Visible;) sem o de e eu como leigo consegui identificar meu erro. rsrs obg vou tentar adicionar outros comando e opsoes.
Professor Carlos disse…
É isso ai Josinaldo. Essa é uma maneira muito boa de aprender usar uma nova ferramenta. Pode escrever para o meu e-mail se preferir.
Paulo Lima disse…
Legal, as explicações são boas e nos levar a pensar melhor sobre o Lázarus. Gostaria de saber de onde vem a aparencia deste botão, formulário, etc. Instalei no Windows a versão 0.9.28.2 e não vejo esta aparencia no TButton. O q tenho q fazer prá conseguir essa aparencia.
Um grande abraço e obrigado!
Paulo Lima disse…
Sou neófito na prática do Lazarus e estou encontrando dificuldades prá jogar campos e nomes do DBEdit do Resevatório da Query para o formulário. Quero arrastar os campos do Data Module para o formulario como fazemos no Delphi. Sabe dizer se isso é possível, existe algum jeito de poupar o trabalho de jogar um a um dos campos no formulário?
Desde já obrigado pelo q possa me orientar. Um grande abraço e parabéns pelo Blog!
Professor Carlos disse…
Olá Paulo

Eu estou usando a versão 0.9.29. E já existe a versão 0.9.31. Você pode baixar aqui http://www.hu.freepascal.org/lazarus/
Quanto aos DBEdits, não existe aquela facilidade do Delphi, por enquanto. Você precisa informar os campo um a um.
Anônimo disse…
Parabéns Professor,
ótimo blog sobre Lazarus! To gostando muito dos posts que estou lendo! Agradeço por esse trabalho que o Sr. está realizando, porque está ajudando muito a nós iniciantes em programação!

Abração, que Deus te abençoe em dobro!
Professor Carlos disse…
Obrigado. Sucesso no seu trabalho.
Unknown disse…
Professor Carlos, estou tentando migrar do Delphi para o Lazarus, mas como não tenho muita experiencia, por não ttrabalhar diretamente com programação, programo apenas nas horas de folga isso dificulta um pouco o aprendizado.
Mas dentre todas as dificuldades que tenho está a quesão de chamar outro form, para adicionar o uses desse novo forme no delphi tem uma tecla de atalho que facilita a tarefe "Alt+F11" eu escolho o form a ser incluido e ele faz isso automático. Não tem uma opção semalhante no Lazarus?

tenho outra dificuldade, quando aprendi trabalhar com Banco de dados aprendi usando o DBExpress, estou com dificuldade de migrar isso, não consigui ainda nada semelhante ao dbexpress, na internet cada um indica uma coisa mas nada é igual e não se acha muitos manuais que ensinam usar as novas ferramentas. tem alguma dica?

Desde já obrigado.
Jefferson Damian
jefferson.damian@gmail.com
Professor Carlos disse…
Tem Alt+F11 sim. Mas veja que versão você está utilizando. Quando ao dbexpress, não existe algo parecido no lazarus. Alguns costumam usar o Zeos que também é muito bom
DAVID disse…
Ola
Estou com um problemao

Eu compilei um programa com o nome padrao, PROJECT 1

como renomea-lo ?

salvando tudo com o novo nome ?

cliquei em salvar como, e so as units aparecerao para salvar, ai renomeei elas, mas so elas que consegui mudar de nome...
Professor Carlos disse…
David
Entre no menu Projeto > Salvar projeto como ...

Postagens mais visitadas deste blog

Lazarus - Acessando banco de dados com SQLdb - Parte I

Para fazer nossa primeira aplicação usando banco de dados no Lazarus vamos usar o SQLite e o conjunto de componentes nativo SQLdb. Inicialmente vamos apresentar passo como essa aplicação foi criada. Essa foi a maneira que eu fiz, e eu agradeço sugestões e questionamentos que pessoas que já passaram por essa experiência. Depois irei fazer algumas considerações sobre o uso do SQLdb. SQLite SQLite é uma biblioteca que implementa um motor de banco de dados SQL. É livre para qualquer finalidade, seja uso particular ou comercial. Lê e escreve em um único arquivo que pode ter além de tabelas, índices, gatilhos e visões. Executa em várias plataformas e é indicado para aplicações embarcadas. Maiores detalhes podem ser encontrados no site oficial. Para usá-lo, baixe-o do site e faça a instalação adequada para o seu sistema operacional. No Windows isso é muito simples, apenas copie sqlite3.dll para o system32 da pasta do sistema operacional. Existe uma ferramenta de linha de comando chamada

Tipos de dados no SQLite

Em SQLite, diferente de outros motores de banco de dados, o tipo de dado de um valor está associado com o valor propriamente dito, e não com o seu contêiner. É um sistema de tipo dinâmico. Um campo de uma tabela em SQLite pode receber qualquer tipo de dado. Assim, o SQLite simplesmente ignora o tipo informado no comando CREATE TABLE. Então, dizemos que no SQLite existem classes de armazenamento. E essas classes são: NULL - como em qualquer outro banco de dados. INTEGER - inteiro com sinal, armazenado em 1, 2, 3, 4, 6 ou 8 bytes dependendo da grandeza do valor. REAL - valor de ponto flutuante armazenado em 8 bytes. TEXT - uma string armazenada usando UTF-8, UTF-16BE ou UTF-16LE. BLOB - armazena um blob, como indica o nome. Uma coluna INTEGER PRIMARY é uma exceção. Só aceita números inteiros. Qualquer valor em um comando SQL tem uma classe de armazenamento implícita. Durante a execução do comando SQL, o SQLite pode converter valores entre classes numéricas (INTEGER e REAL)

Lazarus - Criando relatórios com FortesReport (Parte I)

Para a criação de relatórios, o Lazarus já trás o componente LazReport, no entanto ele precisa ser instalado no IDE. Para fazer a instalação do pacote, acesse o menu Package -> Open package file (.lpk) . Localize o diretório de instalação do Lazarus e na pasta components abra lazreport e depois source . Abra o pacote lazreport.lpk , clique em Compile e depois em Install . Como já sabemos isso irá recompilar o IDE. Depois de inicializado novamente estará disponível a aba LazReport . Leia aqui um tutorial básico sobre o LazReport. No entanto queremos mostrar uma alternativa ao LazReport . Por essa razão, vamos apresentar neste artigo o FortesReport . Para quem conhece o QuickReport, que fazia parte do Delphi, não terá dificuldade de desenvolver com esse componente. Baixe o pacote aqui e instale. Os procedimentos são semelhantes aos que mostramos acima. Você terá uma nova aba chamada Fortes Report . Conectando o banco de dados O primeiro passo para criar a aplicação é fazer