Páginas

domingo, 24 de janeiro de 2010

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).

17 comentários:

obreiro_fabiofilo 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.

Jefferson Damian 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 ...

 
Creative Commons License
This work by Carlos Alberto P. Araújo is licensed under a Creative Commons Atribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil License.