Вы находитесь на странице: 1из 80

CARLOS ALBERTO PEDROSO ARAJO

Lazarus/Free Pascal para Iniciantes

Santarm 2010

Lazarus/Free Pascal para iniciantes

Lista de Ilustraes
Figura 1 Form novo.........................................................................................................10 Figura 2 Object Inspector................................................................................................11 Figura 3 Paleta de Componentes.....................................................................................12 Figura 4 Janela de Alinhamento......................................................................................13 Figura 5 Mtodo manipulador de evento OnClick de boto...........................................15 Figura 6 Configurao para remoo de mtodos vazios................................................15 Figura 7 Cdigo do procedure.........................................................................................16 Figura 8 Execuo do programa......................................................................................16 Figura 9 Mtodo manipulador do evento OnClick de form............................................16 Figura 10 Opes de Projeto para diminuir o tamanho do executvel............................17 Figura 11 Alterando propriedade em tempo de execuo...............................................18 Figura 12 Cdigo para centralizar o boto em tempo de execuo.................................19 Figura 13 Cdigo fonte de um form................................................................................20 Figura 14 Unit com novo nome.......................................................................................20 Figura 15 Cdigo aps adicionar um boto.....................................................................21 Figura 16 Cdigo aps alterar a propriedade Name do boto.........................................21 Figura 17 Cdigo com manipuladores de eventos...........................................................22 Figura 18 Descrio textual do form...............................................................................23 Figura 19 Cdigo fonte do arquivo de projeto................................................................24 Figura 20 Descrio textual de um boto........................................................................26 Figura 21 Mudanas na descrio textual usando o bloco de notas................................26 Figura 22 Descrio textual do boto aps ser colado no form.......................................27 Figura 23 Comando Find/Replace...................................................................................27 Figura 24 Comando Find in Files....................................................................................28 Figura 25 Opes de projeto............................................................................................29 Figura 26 Opes do Form Editor...................................................................................30 Figura 27 Expandindo propriedades................................................................................32 Figura 28 Linhas guia de alinhamento............................................................................33 Figura 29 Configurao de nmeros de linha no cdigo fonte........................................34 Figura 30 Editor de templates..........................................................................................36 Figura 31 Destaque de begin e end..................................................................................36 Figura 32 Boto recm inserido.......................................................................................39 Figura 33 Cdigo o evento OnClick de btnFechar..........................................................40 Figura 34 Componente TEdit..........................................................................................41 Figura 35 Componente TLabel........................................................................................42 Figura 36 Componente TCheckBox................................................................................43 Figura 37 Componente TRadioGroup.............................................................................44 Figura 38 O Componente ListBox...................................................................................46 Figura 39 Componente ComboBox.................................................................................47 Figura 40 Componente ScrollBar....................................................................................49 Figura 41 Componente GroupBox..................................................................................50 Figura 42 Componente TMemo......................................................................................51 Figura 43 Form com a boto btnSalvar...........................................................................52 Figura 44 Cdigo do evento OnClick do boto btnSalvar...............................................53 2

Lazarus/Free Pascal para iniciantes Figura 45 Caixa de dilogo ShowMessage......................................................................55 Figura 46 Caixa de dilogo MessageDlg.........................................................................57 Figura 47 Caixa de dilogo MessageDlg com caption....................................................57 Figura 48 Caixa de dilogo MessageBox com botes de opes....................................58 Figura 49 MessageBox para informaes ao usurio......................................................59 Figura 50 Caixa de dilogo InputBox..............................................................................60 Figura 51 Aplicao Dialogos com um novo boto e rtulo...........................................61 Figura 52 Cdigo para traduzir caixas de dilogo...........................................................62 Figura 53 Menu com opes agrupadas e sub-menu.......................................................65 Figura 54 Aplicao Menus.............................................................................................66 Figura 55 A caixa ColorDialog.......................................................................................68 Figura 56 Menu Editor....................................................................................................69 Figura 57 Aspecto do menu criado..................................................................................70 Figura 58 Menu com teclas de atalho..............................................................................71 Figura 59 Formulrio Sobre............................................................................................73 Figura 60 A janela Sobre.................................................................................................74 Figura 61 O componente PopupMenu.............................................................................75 Figura 62 Barra de ferramentas.......................................................................................77 Figura 63 rvore de componentes...................................................................................79 Figura 64 Barra de status.................................................................................................80 Figura 65 Interface da aplicao......................................................................................83 Figura 66 Funo que retorna uma string de espaos......................................................84 Figura 67 O mtodo btnSalvarClick................................................................................84 Figura 68 Botes para leitura do arquivo........................................................................86 Figura 69 Cdigo do evento OnClick de btnIniciar........................................................87 Figura 70 Cdigo do evento OnClick de btnProximo.....................................................87 Figura 71 Configurao de acesso a banco de dados......................................................90 Figura 72 Modelo E-R.....................................................................................................91 Figura 73 Janela para definir o tipo da tabela..................................................................92 Figura 74 Janela para definio de campos.....................................................................92 Figura 75 BDE Administrator.........................................................................................93 Figura 76 DataModule.....................................................................................................98 Figura 77 Aparncia parcial da interface.........................................................................99 Figura 78 O controle DBNavigator...............................................................................100 Figura 79 O form de cadastro de clientes......................................................................106 Figura 80 Form de consulta a cidades...........................................................................108 Figura 81 Janela para criar TFields...............................................................................109 Figura 82 Cdigo do evento OnClick do boto btnPesquisar.......................................112 Figura 83 Modelo E-R do banco de dados....................................................................114 Figura 84 Nota fiscal.....................................................................................................120 Figura 85 Tela de definio da ligao entre duas tabelas............................................121 Figura 86 Form de Vendas............................................................................................124 Figura 87 Criao de campo Lookup............................................................................126 Figura 88 Criao de campo calculado..........................................................................126 Figura 89 Cdigo para atualizar o total da venda..........................................................129 Figura 90 Aba de componentes Rave............................................................................130 Figura 91 Rave Visual Designer....................................................................................131 3

Lazarus/Free Pascal para iniciantes Figura 92 Propriedades do objeto Page1.......................................................................132 Figura 93 Janela para criao da conexo a dados........................................................132 Figura 94 rvore de Objetos.........................................................................................133 Figura 95 Componente Region......................................................................................133 Figura 96 rea de impresso.........................................................................................133 Figura 97 Componentes Band e DataBand....................................................................134 Figura 98 Pgina com os objetos Band e DataBand......................................................134 Figura 99 Editor da propriedade BandStyle..................................................................135 Figura 100 Componente Text........................................................................................135 Figura 101 Pgina com os objetos Band e DataBand....................................................135 Figura 102 Editor de Data Text.....................................................................................136 Figura 103 Aparncia do projeto do relatrio...............................................................137 Figura 104 A banda GroupHeader.................................................................................138 Figura 105 A aparncia final do desenho do relatrio...................................................139 Figura 106 Prvia do relatrio.......................................................................................139

Lazarus/Free Pascal para iniciantes

Lista de Quadros
Quadro 1 Propriedades, mtodos e eventos de Form......................................................39 Quadro 2 Propriedades, mtodos e eventos de Button....................................................40 Quadro 3 Propriedades, mtodos e eventos de Edit........................................................42 Quadro 4 Propriedades e eventos de Label.....................................................................43 Quadro 5 Propriedades, mtodos e eventos de CheckBox..............................................44 Quadro 6 Propriedades, mtodos e eventos de RadioGroup...........................................45 Quadro 7 Propriedades, mtodos e eventos de ListBox..................................................46 Quadro 8 Propriedades, mtodos e eventos de ComboBox.............................................48 Quadro 9 Propriedades, mtodos e eventos de ScrollBar................................................49 Quadro 10 Propriedades, mtodos e eventos de Memo...................................................51 Quadro 11 Propriedades e mtodos de TStrings.............................................................54 Quadro 12 Funes de converso de dados.....................................................................54 Quadro 13 Propriedades de BitBtn..................................................................................63 Quadro 14 Propriedades de ToolBar...............................................................................76 Quadro 15 Propriedades de StatusBar.............................................................................78 Quadro 16 Propriedades de TStatusPanel.......................................................................79 Quadro 17 Propriedades de StatusBar.............................................................................80 Quadro 18 Rotinas de Entrada e Sada............................................................................81 Quadro 19 Definio dos campos da tabela Cidade........................................................93 Quadro 20 Definio dos campos da tabela Cliente........................................................93 Quadro 21 Propriedades, mtodos e eventos de Table....................................................97 Quadro 22 Propriedades e eventos de DataSource..........................................................97 Quadro 23 Propriedades, mtodos e eventos de DBEdit.................................................99 Quadro 24 Propriedades e eventos de DBNavigator.....................................................100 Quadro 25 Propriedades, mtodos e eventos de DBLookUpComboBox......................103 Quadro 26 Propriedades, mtodos e eventos de DBComboBox...................................103 Quadro 27 Propriedades, mtodos e eventos de DBRadioGroup..................................104 Quadro 28 Propriedades, mtodos e eventos de DBCheckBox.....................................105 Quadro 29 Propriedades, mtodos e eventos de DBGrid..............................................108 Quadro 30 Propriedades, mtodos e eventos de TField................................................109 Quadro 31 Propriedades e mtodos de TQuery.............................................................112 Quadro 32 Propriedades, mtodos e eventos de IBDatabase........................................116 Quadro 33 Propriedades e mtodos IBTransaction.......................................................117 Quadro 34 Propriedades do componente RvSystem.....................................................130 Quadro 35 Propriedades do componente RvProject......................................................131 Quadro 36 Propriedades do componente RvDataSetConnection..................................131

Lazarus/Free Pascal para iniciantes

Sumrio
Introduo..........................................................................................................................9 Captulo 1 Criando forms................................................................................................10 Criando seu primeiro form..........................................................................................10 Adicionando um ttulo.............................................................................................10 Salvando a aplicao...............................................................................................12 Usando Componentes..................................................................................................12 Alterando Propriedades...........................................................................................13 Respondendo a Eventos...........................................................................................14 Compilando e Executando um Programa................................................................17 Alterando Propriedades em Tempo de Execuo....................................................17 Adicionando Cdigo ao Programa..........................................................................18 Uma Ferramenta de Mo Dupla (Two-Way)..........................................................19 Analisando o cdigo fonte.......................................................................................19 A descrio textual do form....................................................................................22 O arquivo de projeto................................................................................................23 Captulo 2 O Ambiente Lazarus......................................................................................25 Menus e Comandos do Lazarus...............................................................................25 O menu File.............................................................................................................25 O menu Edit.............................................................................................................25 O menu Search........................................................................................................27 O menu View...........................................................................................................28 O menu Project........................................................................................................28 O menu Run.............................................................................................................29 Trabalhando com o Form Editor.............................................................................30 A Paleta de Componentes........................................................................................31 O Object Inspector...................................................................................................31 A janela de Alinhamento.........................................................................................33 Escrevendo cdigo no Editor...................................................................................33 Usando marcadores de pgina.................................................................................34 Code Insight.............................................................................................................34 Complementao de cdigo....................................................................................35 Modelos de cdigo..................................................................................................35 Captulo 3 Explorando os Componentes Bsicos............................................................37 Componentes do prprio Windows.........................................................................37 Propriedades, eventos e mtodos.............................................................................37 Iniciando uma nova Aplicao................................................................................38 Propriedades de Form (TForm)...............................................................................38 Utilizando um Boto (TButton)...............................................................................39 Aceitando entrada de dados do Usurio (TEdit).....................................................40 Identificando Componentes (TLabel)......................................................................42 Fazendo escolhas (TCheckBox, TRadioButton e TRadioGroup)...........................43 Uma Lista com muitas escolhas (TListBox)...........................................................45 Muitas opes em pouco espao (TComboBox).....................................................47 Escolhendo um valor em um intervalo (TScrollBar)..............................................48 6

Lazarus/Free Pascal para iniciantes Agrupando componentes relacionados (TGroupBox).............................................50 Entrando mltiplas linhas (TMemo).......................................................................50 Juntando tudo...........................................................................................................52 Captulo 4 Caixas de Dilogo..........................................................................................55 ShowMessage..........................................................................................................55 MessageDlg.............................................................................................................56 Application.MessageBox.........................................................................................57 InputBox..................................................................................................................59 InputQuery...............................................................................................................60 Traduzindo as Caixas de Dilogo............................................................................61 Boto com cone (TBitBtn).....................................................................................63 Captulo 5 Criando Menus...............................................................................................64 Estrutura do Menu Principal....................................................................................64 Diferentes funes dos itens de menu.....................................................................65 Aplicao Exemplo.................................................................................................66 A Caixa de Dilogo ColorDialog............................................................................67 Criando um Menu com o Menu Editor....................................................................68 Teclas de atalho e hotkeys.......................................................................................70 Respondendo aos comandos do menu.....................................................................71 Chamadas a forms...................................................................................................72 Menus locais (Pop-up).............................................................................................74 Captulo 6 Barras de ferramentas e de status...................................................................76 Barra de ferramentas (TToolBar)............................................................................76 Barra de status (TStatusBar)....................................................................................78 Captulo 7 Tratamento de arquivos.................................................................................81 Escrevendo dados no arquivo......................................................................................83 Lendo dados do arquivo..............................................................................................85 Melhorando a interface................................................................................................87 Captulo 8 Aplicaes usando Banco de Dados Local....................................................90 Acesso a Banco de Dados............................................................................................90 Aplicao de banco de dados.......................................................................................91 Database Desktop....................................................................................................91 BDE - Criao do Alias...........................................................................................93 Iniciando a aplicao...............................................................................................94 Data Module............................................................................................................95 A interface de entrada de dados da tabela Cidade...................................................98 A interface de entrada de dados da tabela Cliente.................................................101 Consultas a banco de dados.......................................................................................106 Componente para o resultado da consulta (TDBGrid)..........................................107 Pesquisa em tabelas usando Locate.......................................................................109 Pesquisa em tabelas usando TQuery.....................................................................111 Captulo 9 Aplicaes usando Banco de Dados Cliente/Servidor.................................114 Iniciando a aplicao.................................................................................................115 DataModule...........................................................................................................115 As interfaces de entrada de dados.........................................................................118 Form mestre-detalhe..............................................................................................119 Relatrios...................................................................................................................130 7

Lazarus/Free Pascal para iniciantes Relatrio de Cidades..............................................................................................130 Relatrio de Clientes.............................................................................................137

Lazarus/Free Pascal para iniciantes

Introduo

Lazarus considerada uma ferramenta RAD (Rapid Application Development). E realmente podemos desenvolver aplicaes com bastante rapidez nesse ambiente. Lazarus um IDE open source baseado na linguagem Free Pascal e desde sua origem tem evoludo consideravelmente. Com este IDE pode-se criar tanto aplicaes para desktop quanto para web. Junta-se a essa caracterstica o fato de Lazarus ser orientado a objetos, mas no totalmente, pois mantm o paradigma procedural e, possibilitar o desenvolvimento visual de aplicaes para os ambientes Windows, Linux, Mac OS X, WinCE, entre outros. Este texto tenta apresentar Lazarus de forma didtica. Sem nenhuma pretenso de cobrir toda a extenso desta poderosa ferramenta, mas oferecendo informaes suficientes para o estudante ou futuro desenvolvedor que deseje adotar o Lazarus como uma de suas ferramentas de trabalho. Como objeto do estudo foi usada a verso 0.9.29. Tentou-se organizar o texto de forma a privilegiar o auto-estudo. Ao fim da leitura, o estudante estar apto a desenvolver pequenas aplicaes usando bancos de dados, e capaz de prosseguir de forma autnoma, pois a base e o conceito do ambiente so apresentados com o objetivo de facilitar isso. Para atingir seu objetivo, este trabalho est organizado da seguinte forma: no Captulo 1 apresentado o conceito de form no Lazarus e criada a primeira aplicao para introduzir o leitor no ambiente. No Captulo 2 tem-se uma viso do ambiente do Lazarus, configuraes e recursos do editor de cdigo. No Captulo 3 so apresentados os componentes bsicos atravs da estratgia de se construir uma aplicao passo a passo. As caixas de dilogo so estudadas no Captulo 4. Menus e barras de ferramentas e de status so mostradas nos Captulos 5 e 6. Aps isso comea-se o estudo da persistncia de dados no Lazarus, iniciando com os arquivos de texto no Captulo 7. Aplicaes de bancos de dados locais so estudadas no Captulo 8. Finalmente, no Captulo 9, criada uma aplicao usando banco de dados cliente/servidor e faz-se uma introduo a relatrios.

Lazarus/Free Pascal para iniciantes

Captulo 1 Criando forms


Aplicaes GUI so geralmente baseadas em janelas. Ento, como vamos criar nossa primeira janela? Bem, usando um form. Nos ambientes GUI, tais como Windows e Linux, um form realmente uma janela. No h diferena entre os dois conceitos, pelo menos de um ponto de vista geral.

Criando seu primeiro form


Embora voc provavelmente j tenha criado algumas aplicaes simples no Lazarus, nesta seo ser mostrado o processo de novo, para esclarecer alguns pontos interessantes. Criar um form uma das operaes mais fceis no sistema: voc s precisa abrir o Lazarus, e ele automaticamente ir criar um form novo, como se pode ver na figura abaixo.

Figura 1 Form novo Mas, se voc j tem um projeto aberto, escolha File | New | Application para fechar o projeto antigo e abrir um novo. Acredite, voc j tem uma aplicao ) na barra de ferramentas, funcionando. Voc pode execut-la, usando o boto Run ( escolhendo Run | Run no menu, ou ainda teclando F9. Aps alguns segundos voc ver uma janela na tela do seu computador. Certamente no uma aplicao muito til, pois apenas uma janela vazia, mas tem o comportamento padro de qualquer janela de Interface Grfica do Usurio (GUI).

Adicionando um ttulo
No entanto, antes de executar a aplicao, vamos fazer uma rpida alterao. O ttulo do form Form1. Para um usurio, o ttulo da janela torna-se o nome da aplicao. Vamos mudar Form1 para algo mais significativo. Quando voc abre o 10

Lazarus/Free Pascal para iniciantes Lazarus, a janela Object Inspector deve aparecer ao lado esquerdo do form (se no aparecer pressione a tecla F11).

Figura 2 Object Inspector O Object Inspector mostra as propriedades do componente selecionado. A janela contm quatro abas. A primeira est rotulada como Properties. A prxima rotulada Events e mostra a lista de eventos que podem acontecer no form ou no componente selecionado. Estas so as que mais interessam no momento. As propriedades so listadas em ordem alfabtica, assim fica fcil encontrar aquela que se quer modificar. Podemos mudar o ttulo do form simplesmente mudando 11

Lazarus/Free Pascal para iniciantes a propriedade Caption. Enquanto voc digita um novo Caption o ttulo do form se modifica. Se voc digitar Alo o ttulo muda imediatamente aps se teclar ENTER. Como uma alternativa, voc pode modificar o nome do form mudando a propriedade Name. Se Caption ainda no tiver sido modificada ainda, o valor de Name tambm ser usado por Caption. No entanto para a propriedade Name do form digite frmPrincipal (frm significa form e Principal indica a funo do form). Nem todas as propriedades de um componente mudam enquanto um novo valor digitado. Muitas so aplicadas quando voc termina de digitar e teclar ENTER, ou quando muda o foco de entrada para outra propriedade. Execute a aplicao. Sem muito trabalho ns construmos uma aplicao com um menu de sistema (aquele que aparece quando voc clica o canto superior esquerdo da janela) e os botes padro das janelas: Minimizar, Maximizar e Fechar. Se voc observar a barra de tarefas voc ver que algo no est certo. Em vez de mostrar o caption do form como caption do cone, ele mostra o nome do projeto, algo como Project1. Podemos corrigir isso dando um novo nome ao projeto quando o salvarmos no disco.

Salvando a aplicao
Selecione Save ou Save As no menu File, e o Lazarus ir lhe perguntar o nome do arquivo do projeto e depois o nome do arquivo do cdigo fonte (unit) associado ao form. Para o nome da unit digite o nome u_principal. Para que o nome do projeto seja o mesmo do caption do form d a ele o nome Alo. O Lazarus vai salvar uma unit com o nome u_principal.pas e um projeto com o nome Alo.lpr. Sempre que salvar uma nova unit, tenha o cuidado de selecionar o diretrio da sua aplicao. Se esse cuidado no for tomado, corre-se o risco de ter mdulos do programa espalhados pelo disco e depois difcil localiz-los.

Usando Componentes
Agora hora de comear a inserir algo til em nosso form. Forms podem ser pensados como contineres de componentes. Cada form pode hospedar componentes e controles. Voc pode escolher um componente da paleta de componentes do ambiente do Lazarus, como mostra a Figura 3.

Figura 3 Paleta de Componentes H quatro maneiras de colocar componentes em um form. Selecione o componente Button da aba Standard. Voc pode inseri-lo e geralmente qualquer outro componente no form de uma das seguintes formas: Clique no componente, mova o cursor do mouse para o form, pressione o boto esquerdo na posio onde ficar o canto superior esquerdo do boto e arraste o mouse para ajustar o tamanho. 12

Lazarus/Free Pascal para iniciantes Selecione o componente e simplesmente clique no form na posio onde quer inserir o boto com tamanho padro. D um duplo clique no componente e o mesmo ser inserido no quanto superior esquerdo do form. Pressione a tecla Shift e clique ao mesmo tempo no componente, e coloque vrios componentes do mesmo tipo no form, procedendo de uma das duas primeiras maneiras acima. Para desativar esse recurso, clique no boto Selection Tool esquerda na paleta.

Queremos apenas um boto no form. Vamos centraliz-lo manualmente. Selecione o boto inserido no form e depois clique com o boto direito do mouse sobre ele. Clique na opo Align e uma janela com opes de alinhamento ir aparecer:

Figura 4 Janela de Alinhamento Clique nos botes Center in window tanto na caixa Horizontal quanto na Vertical e o boto ficar posicionado no centro do form.

Alterando Propriedades
Assim como o form, o boto tem uma propriedade Caption que ns podemos usar para alterar o seu rtulo (o texto mostrado dentro dele). Altere ento a propriedade Caption para Diga Al. Na propriedade Name digite btnAlo. bastante comum definir uma conveno de nomes para cada tipo de componente. Sugiro usar um nome curto tal como btn para Button para o prefixo do nome do componente. Desta forma seu cdigo ficar mais organizado e facilitar a manuteno no futuro. Name uma propriedade interna e usada como nome de uma varivel que se refere ao componente no cdigo da aplicao. Portanto, a propriedade Name segue as regras de nomeao de identificadores da linguagem Free Pascal: 13

Lazarus/Free Pascal para iniciantes Um identificador uma sequencia de letras, dgitos ou underscore de qualquer tamanho, embora apenas os primeiros 63 caracteres sejam significativos. O primeiro caractere de um identificador no pode ser um nmero, deve ser uma letra ou underscore. Identificadores no so case-sensitive, mas geralmente cada palavra em um identificador comea com uma letra maiscula, como em BtnHello. Normalmente inicia o prefixo com letra minscula. Mas btnhello, btnHello ou BTNHello referem-se ao mesmo identificador.

Se voc executar esse programa agora, ver que o boto funciona adequadamente. Se voc clicar nele, ele ser pressionado, e quando libera o boto do mouse o boto tambm liberado. O problema que quando voc pressiona o boto, espera-se que algo acontea, mas nada acontece porque no definimos qualquer ao para o clique do mouse ainda.

Respondendo a Eventos
Quando voc pressiona o boto do mouse em um form ou componente, o sistema operacional informa do evento sua aplicao, enviando uma mensagem a ela. O Lazarus responde ao receber uma notificao de evento chamando um mtodo manipulador de evento apropriado. Como programador voc pode prover vrios desses mtodos, tanto para form quanto para os componentes colocados nele. O Lazarus prev um certo nmero de eventos para cada tipo de componente. A lista de eventos para o form diferente da lista de eventos para um boto, como se pode ver clicando nesses dois componentes com a aba Events selecionada no Object Inspector. Alguns eventos so comuns a ambos os componentes. H vrias tcnicas que voc pode usar para definir um mtodo manipulador para o evento OnClick do boto: Selecione o boto e a aba Events no Object Inspector. D um duplo clique na rea branca ao lado direito do evento OnClick. Um novo nome de mtodo ir aparecer no editor de cdigo, btnAloClick. Selecione o boto e a aba Events no Object Inspector. Digite o nome de um novo mtodo na rea branca ao lado direito do evento OnClick. Pressione Enter para aceit-lo. D um duplo clique no boto e o Lazarus ir executar a ao padro para esse componente, que adicionar um mtodo manipulador para o evento OnClick.

Com qualquer uma dessas abordagens o Lazarus cria um procedure chamado btnAloClick (ou o nome que voc escolheu) no cdigo do form e abre o arquivo do cdigo fonte nesta posio:

14

Lazarus/Free Pascal para iniciantes

Figura 5 Mtodo manipulador de evento OnClick de boto Como vimos, a ao padro para um boto adicionar um manipulador para responder ao evento OnClick. Mesmo que voc no tenha certeza do efeito da ao padro de um componente, voc ainda pode dar um duplo clique nele. Se voc adicionar um procedure que no precisa, apenas deixe-o vazio. Mtodos vazios gerados pelo Lazarus podem ser removidos assim que o arquivo for salvo ou o projeto for compilado. Mas para que isso acontea necessrio fazer uma configurao. Clique na opo de menu Environment | Options. Na janela que ser mostrada, selecione Completion and Hints do grupo Editor e marque a opo Auto remove empty methods conforme aparece destacado na Figura 6.

Figura 6 Configurao para remoo de mtodos vazios Agora podemos digitar algumas instrues entre as palavras chaves begin e end que delimitam o procedure. O cdigo simples. Apenas uma chamada ao procedure ShowMessage, para mostrar uma mensagem.

15

Lazarus/Free Pascal para iniciantes

Figura 7 Cdigo do procedure Digite ento dentro dos parnteses a string 'Al pessoal'. Execute o programa agora e clique no boto. Voc ver o seguinte na sua tela:

Figura 8 Execuo do programa A cada vez que voc clica no boto a caixa de mensagem mostrada. E se voc clicar fora do boto? Nada acontece. Naturalmente, podemos adicionar um novo cdigo para manipular esse evento. S precisamos adicionar um evento OnClick para o prprio form. Selecione o form e a aba Events do Object Inspector. D um duplo clique no lado direito do evento OnClick, conforme o destaque na Figura 9. Agora adicione o seguinte cdigo no editor:

Figura 9 Mtodo manipulador do evento OnClick de form

16

Lazarus/Free Pascal para iniciantes

Compilando e Executando um Programa


Antes de prosseguir com a implementao do nosso programa Alo, vamos analisar o que acontece quando executamos uma aplicao. Quando voc clica no boto Run, seleciona Run | Run no menu, ou pressiona a tecla F9, o Lazarus faz o seguinte: 1. 2. 3. 4. Compila o cdigo fonte em Free Pascal que descreve o form. Compila o arquivo do projeto. Constri o arquivo executvel (EXE), ligando as bibliotecas apropriadas. Executa o arquivo executvel, geralmente em modo depurao (debug).

O ponto principal que quando voc pede para o Lazarus executar uma aplicao, ele a compila em um arquivo executvel. Compilar este programa como se faz comumente, ligando todos os cdigos de bibliotecas necessrios, produz um executvel de alguns Mbytes. Para reduzir o tamanho do executvel selecione Project | Project Options no menu. Em Compiler Options, selecione Linking e desmarque Display Line Numbers in Run-time Error Backtraces e marque Strip Symbols from Executable. Observe os itens em destaque na Figura 10. Sendo esta configurao uma opo de projeto, ela deve ser feita para toda aplicao. Note que essas so opes de Debug, portanto sugere-se que esta configurao seja feita apenas no momento de gerar o executvel de produo. Enquanto voc estiver em desenvolvimento deixe tudo como definido no padro.

Figura 10 Opes de Projeto para diminuir o tamanho do executvel

Alterando Propriedades em Tempo de Execuo


Vamos retornar nossa aplicao Alo. Queremos agora tentar mudar algumas propriedades em tempo de execuo. Por exemplo, ns podemos mudar o Caption de 17

Lazarus/Free Pascal para iniciantes btnAlo para Diga al de novo depois que o usurio clica nele pela primeira vez. Ser necessrio tambm mudar a largura do boto, pois o Caption fica maior. Isso muito simples de fazer. S precisa mudar o cdigo do procedure btnAloClick como mostrado

Figura 11 Alterando propriedade em tempo de execuo Portanto, para mudar uma propriedade como Caption ou Width em tempo de execuo, usa-se apenas um comando de atribuio. As propriedades que aparecem no Object Inspector podem ser alteradas em tempo de execuo. Mas existem outras que s podem ser alteradas em tempo de execuo. Aquelas que s podem ser alteradas em tempo de execuo no so listadas no Object Inspector.

Adicionando Cdigo ao Programa


Nosso programa est quase finalizado, mas ainda temos um problema a resolver, que ir exigir alguma codificao. O boto inicia no centro do form mas no permanece l quando voc redimensiona o form. Este problema pode ser resolvido de duas formas diferentes. Uma soluo mudar o estilo da borda do form de modo que ele no possa ser redimensionado em tempo de execuo. V para a propriedade BorderStyle do form, e selecione bsSingle em vez de bsSizeable. A outra abordagem escrever algum cdigo para mover o boto para o centro a cada vez que o form for redimensionado. Embora parea que grande parte do seu trabalho em programar no Lazarus seja selecionar opes e elementos visuais, tem um momento que necessrio escrever cdigo. Quanto mais experiente voc fica, mais cdigo voc vai precisar escrever. Quando voc quer adicionar cdigo ao programa, a primeira pergunta a ser respondida : Onde? Em um ambiente orientado a eventos como o Lazarus, o cdigo sempre executado em resposta a um evento. Quando um form redimensionado ocorre um evento OnResize. Selecione o form e a aba Events no Object Inpector. Procure o evento OnResize e d um duplo clique direita dele. Um novo procedure adicionado ao arquivo fonte do form. Agora digite o seguinte cdigo:

18

Lazarus/Free Pascal para iniciantes

Figura 12 Cdigo para centralizar o boto em tempo de execuo Para determinar as propriedades Top e Left do boto - isto , a posio do seu canto superior esquerdo - o programa calcula o centro da pgina, dividindo a altura e a largura da rea interna ou rea cliente da pgina por 2, e ento subtrai metade da altura (Height) e largura (Width) do boto. Se voc usar as propriedades Height e Width do form, em vez das propriedades Client Height e ClientWidth, voc estar se referindo ao centro da janela incluindo a barra do Caption.

Uma Ferramenta de Mo Dupla (Two-Way)


No exemplo anterior ns escrevemos trs pequenas pores de cdigo, para responder a trs eventos diferentes. Cada poro de cdigo era parte de um procedure diferente. Mas onde termina o cdigo que ns escrevemos? O cdigo fonte de um form escrito em um nico arquivo fonte Free Pascal, aquele que chamamos u_principal.pas. O arquivo cresce no apenas quando escrevemos cdigo para responder a eventos, mas tambm quando adicionamos componentes ao form. As propriedades desses componentes juntamente com as propriedades do form so armazenadas em um segundo arquivo chamado u_principal.lfm. O Lazarus pode ser definido como uma ferramenta de mo dupla, pois tudo que voc faz no ambiente visual leva a algum cdigo. Nada oculto e inacessvel. Voc tem acesso ao cdigo completo, e embora alguns deles sejam bastante complexos, voc pode editar tudo. Naturalmente, voc pode usar apenas as ferramentas visuais, no mnimo at voc se tornar um programador Lazarus mais experiente. O termo ferramenta de mo dupla tambm significa que voc livre para alterar o cdigo produzido por voc e ento voltar s ferramentas visuais. No entanto voc precisa seguir algumas regras.

Analisando o cdigo fonte


Vamos dar uma olhada no que o Lazarus gerou de nossas operaes anteriores. Toda ao tem um efeito - no cdigo Free Pascal, no cdigo do form, ou em ambos. Quando voc inicia um novo form, ele tem um cdigo fonte associado como mostrado na Figura 13. O arquivo chamado Unit1, usa (uses) algumas units e define um novo tipo de dado (uma classe) e uma nova varivel (um objeto desta classe). A classe chamada TForm1 e derivada de TForm. O objeto Form1, do novo tipo TForm1. Units so mdulos nos quais um programa Free Pascal dividido. Quando voc inicia um novo projeto, o Lazarus gera um mdulo program e uma unit que define o form principal. A cada vez que voc adiciona um form ao programa, uma unit 19

Lazarus/Free Pascal para iniciantes adicionada. Por padro, arquivos units tm extenso .PAS e arquivos program tem extenso .LPR.

Figura 13 Cdigo fonte de um form Se voc renomeou os arquivos como sugerimos no exemplo anterior, o cdigo muda um pouco, pois o nome da unit deve refletir o nome do arquivo. Se voc chamou o arquivo de u_principal.pas o cdigo ir comear assim:

Figura 14 Unit com novo nome Assim que voc comea a adicionar novos componentes, a declarao da classe form muda. Por exemplo, quando voc adiciona um boto ao form, a parte do cdigo fonte que define novos tipos de dados torna-se o seguinte:

20

Lazarus/Free Pascal para iniciantes

Figura 15 Cdigo aps adicionar um boto Agora se a propriedade Name do boto for alterada para btnAlo, o cdigo muda para:

Figura 16 Cdigo aps alterar a propriedade Name do boto A alterao de outras propriedades no afeta o cdigo fonte. As propriedades de form e seus componentes so armazenadas em um arquivo de descrio de form separado (com extenso .LFM). Adicionar novos manipuladores de eventos tem maior impacto no cdigo. A cada vez que um novo manipulador de evento definido, uma nova linha adicionada definio de tipo de dado do form, um corpo de mtodo vazio inserido na implementation, e alguma informao armazenada no arquivo de descrio do form tambm como pode ser observado na Figura 17. Vale observar que h um nico arquivo para o cdigo inteiro do form, no apenas pequenos fragmentos. Naturalmente, o cdigo apenas uma descrio parcial do form. O cdigo fonte determina como o form e seus componentes reagem aos eventos. A descrio do form (o arquivo LFM) armazena os valores das propriedades do form e de seus componentes. Em geral, o cdigo fonte define as aes do sistema, e os arquivos form definem o estado inicial do sistema.

21

Lazarus/Free Pascal para iniciantes

Figura 17 Cdigo com manipuladores de eventos

A descrio textual do form


Como j falamos, junto com o arquivo PAS contendo o cdigo fonte, h outro arquivo descrevendo o form e suas propriedades, seus componentes e as propriedades dos componentes. Este o arquivo LFM, um arquivo texto. Voc pode abrir a descrio textual de um form simplesmente clicando com o boto direito no form em tempo de desenvolvimento e selecionado o comando View source (.lfm). Isto fecha o form, solicitando que seja salvo se for necessrio, e abre o arquivo LFM no editor. Depois podemos fechar o arquivo selecionando o comando Close page no menu local, ou pressionando CTRL + F4. Para entender o que armazenado no arquivo LFM, vamos dar uma olhada na listagem seguinte, que mostra a descrio textual do form do nosso programa exemplo.

22

Lazarus/Free Pascal para iniciantes

Figura 18 Descrio textual do form Como se pode ver nesta listagem, a descrio textual de um form contm objetos (neste caso, dois) em diferentes nveis. O objeto frmPrincipal contm o objeto btnAlo, como possvel ver pela identao do texto. Cada objeto tem suas propriedades e alguns mtodos conectados a eventos (neste caso, OnClick).

O arquivo de projeto
Alm dos dois arquivos que descrevem um form (PAS e LFM), um terceiro arquivo vital para construir a aplicao. o arquivo de projeto Lazarus (LPR). Este arquivo construdo automaticamente, e raramente voc precisa alter-lo, principalmente para pequenos programas. O arquivo de projeto na verdade um arquivo fonte Free Pascal, descrevendo a estrutura geral do programa e seu cdigo de execuo.

23

Lazarus/Free Pascal para iniciantes

Figura 19 Cdigo fonte do arquivo de projeto Podemos visualizar esse arquivo atravs do comando de menu Project | View Source. Ou clicar no boto View units (CTRL + F12) na barra de ferramentas ou o comando de menu View | Units. Em qualquer das duas ltimas opes o Lazarus mostra uma caixa de dilogo com uma lista de arquivos fonte do projeto. Escolha o arquivo do projeto ou qualquer outro que lhe interesse visualizar.

24

Lazarus/Free Pascal para iniciantes

Captulo 2 O Ambiente Lazarus


Em uma ferramenta de programao visual como o Lazarus, o papel do ambiente muito importante, algumas vezes mais importante que a linguagem usada pelo compilador. Esta uma boa razo para explorarmos um pouco o ambiente Lazarus. No discutiremos todas as caractersticas do Lazarus nem todas as opes de menu. Em vez disso daremos uma viso geral e ajudaremos voc a explorar algumas partes do ambiente que no so bvias, e tambm daremos algumas dicas que podem ser teis.

Menus e Comandos do Lazarus


H basicamente trs maneiras de executar um comando no ambiente do Lazarus: Usar o menu. Usar a barra de ferramentas. Usar os menus locais pressionando o boto direito do mouse.

A seguir algumas sugestes para usar alguns comandos de menu. Algumas opes possuem botes na barra de ferramentas.

O menu File
New Form e New Unit: criam um novo form e uma nova unit no projeto, respectivamente. New: abre uma caixa de dilogo com novos itens que podem ser adicionados ao projeto em desenvolvimento. Open: responsvel pela abertura dos projetos. Tambm abre units, forms, pacotes (lpk), projetos (lpr) e texto no Editor de Cdigo. Open recent: atalho para a abertura dos ltimos projetos e arquivos abertos anteriormente. Save: salva o arquivo aberto no Editor de Cdigo. Save All: salva todas as alteraes ainda no salvas. Close: fecha o arquivo aberto no Editor de Cdigo. Close All: fecha a aplicao inteira. Clean Directory: faz uma limpeza no diretrio selecionado. til para excluir os arquivos de backup gerados durante as modificaes da aplicao.

O menu Edit
Este menu tem algumas operaes que so tpicas, tais como Undo, Redo e os comandos Cut, Copy e Paste, mais alguns comandos especficos para as janelas do editor e de form. importante dizer que os comandos padro do menu Edit (e os atalhos Crtl + Z, Ctrl + X, Ctrl + C e Ctrl + V) funcionam tanto para texto quanto para componentes. 25

Lazarus/Free Pascal para iniciantes Voc deve ter observado que possvel copiar componentes do form para o editor e vice versa. O Lazarus coloca componentes no Clipboard na sua descrio textual. Voc pode at editar a verso textual do componente, copiar o texto para o Clipboard, e ento col-lo de volta no form como um novo componente. Por exemplo, se voc colocar um boto em um form, copi-lo e col-lo em um editor, voc obter a seguinte descrio:

Figura 20 Descrio textual de um boto Agora se voc alterar o nome (Name) do objeto, rtulo (Caption) ou posio (Left e Top), ou ainda adicionar uma nova propriedade, essas mudanas podem ser copiadas e coladas de volta em um form. Exemplo de mudanas:

Figura 21 Mudanas na descrio textual usando o bloco de notas Copiando a descrio acima e colando-a em um form ir criar um boto na posio especificada por Top e Left, com rtulo Meu boto. Para usar esta tcnica, voc precisa saber editar a descrio textual de um componente, que propriedades so vlidas, e como definir os valores das propriedades, principalmente o tipo de dado. Quando o Lazarus interpreta a descrio textual de um componente, ele tambm pode mudar os valores de outras propriedades relacionadas quelas que voc alterou, e pode tambm mudar a posio do componente no form, para que ele no fique sobreposto a outro. Voc pode ver como o Lazarus modifica as propriedades do componente visualizando o form como texto: 26

Lazarus/Free Pascal para iniciantes

Figura 22 Descrio textual do boto aps ser colado no form

O menu Search
eo

Figura 23 Comando Find/Replace O comando Find procura um texto especificado no arquivo ativo no editor de cdigo. Se a caixa Replace With estiver marcada o texto informado substituir o texto procurado.

27

Lazarus/Free Pascal para iniciantes

Figura 24 Comando Find in Files O comando Find in Files permite procurar uma string em todos os arquivos fonte de um projeto, todos os arquivos abertos ou todos os arquivos em um diretrio dependendo do boto marcado. O resultado da busca ser mostrado em uma nova janela. Voc pode selecionar uma entrada para abrir o arquivo correspondente e saltar para a linha que contm o texto encontrado.

O menu View
Muitos dos comandos View podem ser usados para mostrar janelas do ambiente Lazarus, tais como Object Inspector, Components e Component Palette. Algumas dessas janelas so usadas durante a depurao e outras quando se est escrevendo cdigo. Os comandos da segunda parte do View tambm esto disponveis na barra de ferramentas. O comando Toggle form/unit view (ou F12) usado para alternar entre o form que voc est trabalhando e seu cdigo fonte. Se voc usar uma janela de cdigo fonte grande o suficiente para conter bastante texto, voc usar com freqncia esse comando.

O menu Project
Este menu tem comandos para gerenciar um projeto. Add editor file to Project e Remove from Project so usados para adicionar ou remover forms ou arquivos fonte em Free Pascal ao projeto. 28

Lazarus/Free Pascal para iniciantes Open Project abre um projeto e Open Recent Project um atalho para os ltimos arquivos de projeto que foram abertos. Save Project e Save Project As so comandos para salvar o arquivo de projeto.

Figura 25 Opes de projeto Project Options usado para alterar opes do compilador e do ligador, opes da aplicao, e assim por diante. Uma dessas opes a alterao do cone padro da aplicao conforme pode ser visto na Figura 25.

O menu Run
O menu Run tem opes de compilao/execuo e depurao (debug). Muitos de seus comandos so relacionados depurao, inclusive o prprio comando Run. Quando voc executa um programa no ambiente Lazarus, ele executado sob o depurador integrado, a menos que esta opo esteja desabilitada. O comando Run um dos mais executados, pois o Lazarus automaticamente recompila um programa antes de execut-lo, se o cdigo fonte tiver sido modificado. Voc pode optar por teclar F9 para compilar e executar um programa. CTRL + F9 ou o comando Build compila/linka o programa sem execut-lo. Quick Compile apenas compila o cdigo sem gerar um executvel. bom para verificar a sintaxe o cdigo. No comando Run Parameters pode-se especificar parmetros a serem passados na linha de comando do programa que vai ser executado. Os comandos restantes so usados durante a depurao, para executar um programa passo a passo, definir breakpoints, observar valores de variveis e objetos e assim por diante. O comando Stop ou CTRL + F2 para a execuo de um programa, opo que til quando o programa responde incorretamente impedindo que seja encerrado normalmente. 29

Lazarus/Free Pascal para iniciantes O Lazarus possui outros menus e os menus locais que podem ser acionados atravs do boto direito do mouse. Quase todas as janelas do Lazarus possuem seus menus locais com seus comandos relacionados.

Trabalhando com o Form Editor


Desenhar forms a parte central do desenvolvimento visual no ambiente Lazarus. Cada componente colocado no form e cada propriedade definida so armazenadas em um arquivo que descreve o form (arquivo LFM) e tem algum efeito no cdigo fonte associado ao form (arquivo PAS). Quando voc inicia uma nova aplicao, o Lazarus cria um form vazio, e voc pode comear a trabalhar com ele. Um projeto pode ter qualquer quantidade de forms. Quando voc trabalha com um form em tempo de projeto, voc est na verdade usando o Form Editor. Quando voc est trabalhando com um form, voc pode alterar suas propriedades, as propriedades de um de seus componentes, ou as propriedades de vrios componentes de uma vez. Para selecionar um form ou um de seus componentes voc simplesmente clica nele ou usa a rvore de objetos na parte superior do Object Inspector onde se pode ver o nome e tipo do objeto selecionado. Voc pode selecionar mais de um componente, mantendo a tecla Shift pressionada enquanto clica o mouse, ou arrastando um retngulo de seleo em volta dos componentes no form. Quando voc seleciona mais de um componente no form, voc pode alinh-los ou dimension-los em grupo. Voc pode tambm abrir a caixa Tab Order, acessvel no menu local do form, para ajustar a ordem que os componentes visuais sero alcanados pela tecla Tab e a ordem de criao dos componentes no visuais. O alinhamento dos objetos pode ser feito atravs da caixa Align no mesmo menu.

Figura 26 Opes do Form Editor

30

Lazarus/Free Pascal para iniciantes Alm de comandos especficos de menus locais, possvel ajustar algumas opes de form usando o comando Environment | Options e escolhendo a opo Form Editor, conforme mostra a Figura 26. As opes relacionadas a form referem-se, por exemplo, a ativao e dimensionamento da grade (Grid). A grade torna mais fcil colocar componentes exatamente onde se quer no form, ajustando depois seu tamanho e posio. Sem a grade torna-se difcil alinhar dois componentes manualmente. Existem tambm configuraes para as linhas guia (Guide lines) que facilitam o alinhamento dos componentes no formulrio. H duas alternativas para ajustar a posio de um componente: ou voc pode ajustar os valores das propriedades Left e Top, ou voc usar as setas enquanto mantm a tecla CTRL pressionada. O uso das setas possibilita o ajuste fino da posio. Similarmente, voc pode usar as setas juntamente com a tecla Shift para fazer o ajuste fino do tamanho do componente. SHIFT + CTRL + setas faz o componente se mover em intervalos da grade.

A Paleta de Componentes
Para adicionar um componente ao form, voc pode clicar no componente em uma das pginas da paleta de Componentes e ento clicar no form para colocar o novo componente. No form voc pode pressionar o boto esquerdo e arrastar o mouse para ajustar a posio e o tamanho do componente ao mesmo tempo, ou apenas clique para deixar o Lazarus usar o tamanho padro. Cada aba da paleta tem um grupo de componentes, cada componente tem um cone e um nome que aparece em uma dica (hint). Para ver a dica apenas passe o mouse pelo boto e espere um segundo. As dicas mostram o nome oficial do componente. So formados pelos nomes das classes que definem os componentes sem o T inicial (por exemplo, se a classe TButton, o nome Button). Para inserir mais de um componente de um mesmo tipo no form, clique no componente na paleta com a tecla SHIFT pressionada. Assim, cada vez que voc clica no form o Lazarus adiciona um novo componente deste tipo. Para encerrar a operao clique o boto com a seta (seletor padro) esquerda da paleta de componentes.

O Object Inspector
Quando voc est desenhando um form, voc usa o Object Inspector para ajustar valores de propriedades de form ou componentes. Suas abas listam propriedades e seus valores, e eventos do componente selecionado, em duas janelas que podem ser redimensionadas. Uma rvore de objetos no topo do Object Inspector indica o componente corrente e seu tipo de dado, e pode ser usado para mudar o componente selecionado. O Object Inspector no lista todas as propriedades de um componente. Inclui apenas as propriedades que podem ser alteradas em tempo de desenvolvimento. A coluna da direita do Object Inspector permite apenas a edio apropriada para o tipo de dado da propriedade. Dependendo da propriedade, voc poder inserir uma string ou nmero, escolher de uma lista de opes, ou chamar um editor especfico pressionando um boto elipse. Quando uma propriedade admite dois valores, como 31

Lazarus/Free Pascal para iniciantes True ou False, voc pode alternar entre um valor e outro apenas com um duplo clique. Se h mais de dois valores, o duplo clique ir selecionar o prximo da lista. Para algumas propriedades, tais como Color, voc pode entrar um valor, selecionar um valor de uma lista ou chamar um editor especfico. Outras propriedades, tal como Font, podem ser customizadas ou expandindo suas subpropriedades (usando um pequeno cone prximo ao seu nome, conforme Figura 27) ou invocando um editor. Em outros casos, tais como em listas de strings, os editores especiais so a nica maneira de alterar uma propriedade.

Figura 27 Expandindo propriedades Se por algum motivo o Object Inspector desaparecer, pressione F11 e ele ficar visvel de novo.

32

Lazarus/Free Pascal para iniciantes

A janela de Alinhamento
A ltima ferramenta relacionada ao desenho de form a janela Alignment. Voc pode abrir esta janela escolhendo o componente que deseja alinhar e ento selecionar o comando Align no menu local do form. A janela de alinhamento apresenta comandos para posicionar controles, centraliz-los, espa-los igualmente, e assim por diante. Esta janela j foi apresentada na Figura 4. O alinhamento de componentes pode ser feito manualmente. O Lazarus facilita essa tarefa, apresentando linhas coloridas, chamadas linhas guia, que mostram quando

Figura 28 Linhas guia de alinhamento

Escrevendo cdigo no Editor


Depois que o form estiver desenhado, voc geralmente precisa escrever algum cdigo para responder a alguns de seus eventos. A cada vez que voc trabalha com um evento, o Lazarus abre o editor com o arquivo relacionado ao form. Voc pode facilmente alternar entre o Form Editor e o editor de cdigo clicando no boto Toggle Form/Unit na barra de ferramentas, clicando na janela correspondente, ou pressionando a tecla F12. O Lazarus permite que voc trabalhe com vrios arquivos fonte de uma nica vez, usando a metfora do bloco de notas com abas. Cada aba do bloco de notas corresponde a um arquivo diferente. Voc pode trabalhar com units relacionadas a forms, units independentes e arquivos de projetos; abrir arquivos de descrio de form no formato textual; e at trabalhar com arquivos texto quaisquer. Voc pode ir para a prxima aba do editor pressionando CTRL + TAB, ou pressionando SHIFT + CTRL + TAB para se mover no sentido contrrio. H vrias opes do ambiente que afetam o editor, muitas delas localizadas nas opes do Editor no menu Environment | Options, como foi visto na Figura 6 e na Figura 29 a seguir. Em Display, conforme o destaque, deixaremos marcada Show line numbers e definiremos Every n-th line number como 1, para que todas as linhas do cdigo fonte sejam numeradas. 33

Lazarus/Free Pascal para iniciantes

Figura 29 Configurao de nmeros de linha no cdigo fonte

Usando marcadores de pgina


O editor tambm permite usar marcadores de pgina. Quando voc estiver em uma linha do editor, voc pode pressionar CTRL + SHIFT mais uma tecla numrica de 0 a 9 para definir um novo marcador de pgina, que aparece como um pequeno crculo numerado na margem esquerda. A partir da voc pode teclar CTRL mais a tecla numrica para retornar a essa linha. Para retirar a marca, posicione o editor na mesma linha marcada e pressione CTRL + SHIFT + tecla numrica. Esses marcadores tm uma limitao que pode tornar seu uso um pouco difcil. Se voc criar um novo marcador usando um nmero j existente, o marcador anterior ser removido e inserido na nova linha. Outro comportamento desagradvel que voc pode adicionar mltiplos marcadores em uma mesma linha, mas apenas um deles ser visvel. Os marcadores no so salvos junto com o arquivo, s so vlidos enquanto o arquivo estiver aberto.

Code Insight
O editor tem vrias caractersticas conhecidas coletivamente como Code Insight. A idia principal desta tecnologia tornar mais fcil a escrita de cdigo tanto por programadores iniciantes quanto por programadores experientes. Duas dessas funcionalidades so: O assistente de complementao de cdigo permite que voc escolha a propriedade ou mtodo de um objeto simplesmente procurando-o numa lista, ou digitando suas letras iniciais. Permite tambm que voc procure um valor apropriado para um comando de atribuio.

34

Lazarus/Free Pascal para iniciantes O assistente de modelos de cdigo permite voc inserir um dos modelos predefinidos de cdigo, tal como um comando complexo com um bloco begin-end interno. possvel tambm definir novos modelos.

Complementao de cdigo
H duas maneiras de ativar esse assistente. Voc pode digitar o nome de um objeto, tal como Button1, adicionar um ponto, e esperar. O Lazarus ir mostrar uma lista de propriedades e mtodos vlidos que podem ser aplicados a esse objeto. O tempo que voc precisa esperar para aparecer a janela com a lista de opes depende da opo Delay for hints and completion box, que pode ser configurada na pgina Completion and Hints da janela de configuraes do Editor em Environment | Options. A segunda maneira de ativar o assistente consiste em digitar o nome do objeto seguido de ponto, as letras iniciais da propriedade ou mtodo e pressione CTRL + ESPAO. A lista ser mostrada imediatamente, mas agora, o assistente tentar adivinhar que propriedade ou mtodo voc est procurando atravs das letras iniciais digitadas. Esta combinao de teclas pode ser usada em um comando de atribuio. Se voc digitar x := e pressionar CTRL + ESPAO o Lazarus mostrar uma lista de possveis objetos, variveis ou constantes que podem ser usados neste ponto do programa. As opes mostradas nessa lista so dinmicas. O Lazarus est constantemente validando o cdigo digitado. Assim, se voc adicionar uma nova varivel ela ser mostrada na lista.

Modelos de cdigo
Diferente do assistente de complementao de cdigo, o assistente de modelos de cdigo deve ser ativado manualmente. Voc pode fazer isso teclando CTRL + J para mostrar todos os modelos. Geralmente voc digita uma palavra chave, como if ou array, e ento pressiona CTRL + J, para ativar apenas os modelos que iniciam com aquela palavra. Para algumas palavras chave existem vrios modelos, todos iniciando com a mesma palavra chave (tais como ifs ou ifb). Assim, se voc pressionar CTRL + J voc ver todos os modelos relacionados quela palavra chave. Voc pode usar esse assistente para dar um nome a uma expresso comum usando a pgina Environment | Code Template. Por exemplo, se voc usa com freqncia a funo MessageDlg, voc pode entrar um novo modelo pressionando o boto Add conforme mostra a Figura. Informe um nome, por exemplo mess, digite uma descrio, marque a caixa Enable Macros e ento adicione o texto abaixo e confirme. Existem outras opes de macros. Para v-las clique em Insert Macro. MessageDlg('$Param(Msg)', mtInformation, [mbOk], 0);

35

Lazarus/Free Pascal para iniciantes

Figura 30 Editor de templates Agora toda vez que voc precisar criar uma caixa de mensagem, voc apenas digita mess e pressiona CTRL + J, e o texto completo ser mostrado. A linha vertical indica a posio para onde o cursor ser movido depois que o Lazarus mostrar o texto. Como pudemos ver, esse assistente no est relacionado a palavras chave da linguagem, mas um mecanismo geral. Alguns outros recursos do editor so: Inserir um end; automaticamente logo que digitado um begin; Destacar abre e fecha parnteses correspondentes em expresses; Destacar begin e end correspondentes conforme mostra a Figura 29.

Figura 31 Destaque de begin e end

36

Lazarus/Free Pascal para iniciantes

Captulo 3 Explorando os Componentes Bsicos


Agora que j conhecemos um pouco o ambiente Lazarus, j entendemos a estrutura de uma aplicao, j criamos um pequeno programa, estamos prontos para ir para a parte principal do ambiente de programao: o uso de componentes. Esta a caracterstica chave deste ambiente: programao visual usando componentes. O IDE Lazarus vem com uma srie de componentes prontos para uso. No sero descritos aqui todos os componentes em detalhes com suas propriedades, mtodos e eventos. Neste captulo usaremos exemplos bastante simples para focar em apenas algumas caractersticas mais importantes. Iniciaremos dando destaque a um grupo de componentes bsicos, tais como botes, rtulos, caixas de listas, campos de edio e outros controles relacionados. A maioria dos componentes que so discutidos neste captulo est presente na aba Standard da paleta de componentes.

Componentes do prprio Windows


De onde vem a idia de programar para Windows usando componentes? A resposta simples: o prprio Windows possui alguns componentes, geralmente chamados controles. Um controle tecnicamente uma janela predefinida com um comportamento especfico, algumas propriedades e alguns mtodos. Esses controles foram o primeiro passo em direo ao desenvolvimento por componentes. O segundo passo foi provavelmente os controles do VisualBasic e o terceiro passo so os componentes do Lazarus. Os controles de sistema padro so os componentes bsicos de cada aplicao Windows, independente da linguagem de programao usada para escrev-la, e so bem conhecidos por todos os usurios do Windows. O Lazarus literalmente empacota esses controles predefinidos do Windows em alguns de seus componentes bsicos, inclusive os que sero discutidos neste captulo. TWinControl a classe base de todos os componentes ajanelados do Lazarus. Esses componentes podem receber foco, podem conter outros controles e tm um manipulador de janela.

Propriedades, eventos e mtodos


Propriedades so um tipo especial de campo de um componente, que definem suas caractersticas. Valores de algumas propriedades podem ser alterados pelo Object Inspector em tempo de desenvolvimento. Outras propriedades s podem ser modificadas em tempo de execuo. Eventos acontecem em resposta a uma ao do usurio ou do prprio sistema. Ao programar um mtodo de evento devemos levar em considerao que este s ser executado quando o evento acontecer. Uma das tarefas mais importantes da programao orientada a eventos determinar quais eventos sero usados e qual a ordem que esses eventos acontecem. 37

Lazarus/Free Pascal para iniciantes Os mtodos realizam aes definidas pelo componente, representam o comportamento do componente. So procedimentos e funes definidos dentro da classe, e por isso podem acessar diretamente as propriedades do componente sem que necessitem ser passados como parmetros.

Iniciando uma nova Aplicao


J vimos no Captulo 1 que, quando o Lazarus aberto, automaticamente, iniciada uma nova aplicao. Vejamos outra maneira de criar uma nova aplicao. Vamos usar o menu File. Clique depois em New e a seguir selecione Application no grupo Project. Confirme em OK e se houver uma aplicao aberta, nesse momento, o Lazarus perguntar se voc deseja salvar o projeto. Confirme se for o caso, e uma nova aplicao ser iniciada, com um form pronto para ser desenhado. A primeira ao a ser feita salvar nosso projeto para nomear os arquivos. Para isso vamos usar o comando File | Save All. Esse comando ir salvar os arquivos de unit e de projeto (LPR). Inicialmente ele pede que seja informado o nome do projeto. Tenha o cuidado de escolher uma pasta para o seu programa e salvar cada nova unit nesta mesma pasta. Vamos digitar Exemplo1 e pressionar o boto Salvar. Em seguida ele pede o nome da unit. Digite u_exemplo1 e pressione o boto Salvar. Nosso programa ser um cadastro de dados pessoais. Os dados a serem cadastrados so: nome, idade, profisso, escolaridade, sexo e situao cadastral.

Propriedades de Form (TForm)


Antes de inserir qualquer componente no novo form, vamos modificar algumas de suas propriedades usando o Object Inspector. Lembre que o Object Inspector mostra propriedades e eventos do componente que estiver selecionado. O quadro abaixo apresenta as propriedades que sero modificadas, os valores a serem definidos e a descrio de cada uma. So mostrados tambm os mtodos e eventos mais importantes. H muitas outras propriedades, mas essas so as bsicas. Propriedade +BorderIcons biMaximize BorderStyle Caption Color Height Icon Name Position Width WindowState Mtodo Close Show ShowModal Contedo False bsSingle Exemplo 1 clDefault 480 frmExemplo1 poScreenCenter 640 wsNormal Descrio Desabilita o boto maximizar Borda simples, tamanho fixo Legenda da barra de ttulos Cor padro de fundo da tela Altura da tela em pixels cone da barra de ttulos da janela Identificador da janela Posiciona a janela no centro da tela Largura da tela em pixels Abre a tela no tamanho original Descrio Fecha a janela Abre a janela Abre a janela, mas usurio precisa fech-la para continuar a aplicao 38

Lazarus/Free Pascal para iniciantes Evento OnActivate OnClose OnCloseQuery OnCreate OnShow Descrio Quando a janela recebe o foco Quando a janela fechada Quando a janela fechada, mas o usurio pode impedir o seu fechamento Quando o form criado Quando a janela aberta Quadro 1 Propriedades, mtodos e eventos de Form

Para modificar a propriedade biMaximize, clique no cone ao lado de BorderIcons, conforme mostra a Figura 27, para expandir suas subpropriedades e defina o novo valor. Para carregar um cone na propriedade Icon, clique no boto elipse (aquele com os trs pontos) e depois no boto Load para escolher o cone desejado. Por enquanto no programaremos nenhum evento.

Utilizando um Boto (TButton)


O Lazarus disponibiliza alguns tipos de boto. Vamos selecionar o boto do tipo TButton da paleta Standard e inseri-lo no form recm criado.

Figura 32 Boto recm inserido Iremos alterar as propriedades do boto que foi inserido. O quadro abaixo mostra as propriedades e os valores a serem definidos, alm de mtodos e eventos mais usados. Note que na propriedade Caption ns inserimos um & (ampersand) antes da letra F. Este recurso define uma tecla de atalho sublinhada. Desta forma o boto pode ser pressionado usando apenas o teclado. Durante a execuo da aplicao, simplesmente pressione a letra F e o boto ser pressionado. 39

Lazarus/Free Pascal para iniciantes Propriedade Caption Default Enabled Height ModalResult Name Width Mtodo Click Evento OnClick OnEnter Legenda do boto Evento OnClick no executado se Enter for pressionado True Habilita o boto 25 Altura do boto mrNone Determina se e como o form ser fechado btnFechar Identificador do boto 75 Largura do boto Descrio Simula um clique de mouse como se o usurio tivesse pressionado o boto Descrio Quando o usurio clica no boto Quando o boto recebe o foco Quadro 2 Propriedades, mtodos e eventos de Button Contedo &Fechar False Descrio

Aps definirmos as propriedades precisamos escrever o cdigo para que o boto tenha o comportamento que desejamos. Quando pressionarmos o boto Fechar, queremos que o form seja fechado. Para definir o comportamento do boto, vamos dar um duplo clique nele. O editor de cdigo ser aberto e vamos digitar o cdigo que realizar a ao.

Figura 33 Cdigo o evento OnClick de btnFechar Como desejamos que o form seja fechado quando clicarmos no boto, isso representa uma ao a ser realizada pelo form. Portanto devemos usar um mtodo que tenha esse comportamento, por isso escolhemos o mtodo Close, de acordo com o Quadro 1. Voc pode compilar seu programa e agora ele pode ser fechado usando o boto padro no canto superior direito ou o boto btnFechar que foi programado.

Aceitando entrada de dados do Usurio (TEdit)


J vimos que o usurio pode interagir com uma aplicao usando o mouse, ou o teclado em vez do mouse para selecionar um boto pressionando a tecla correspondente letra sublinhada no Caption. Alm desses casos, o Windows pode manipular entrada do teclado diretamente. O Lazarus prov uma srie de controles para construir campos de edio e editores de texto. Dentre esses vamos utilizar o componente campo de edio (TEdit) da paleta 40

Lazarus/Free Pascal para iniciantes Standard. Este componente permite que o usurio digite apenas uma linha de texto. Mais adiante usaremos um componente que possibilita a entrada de mais de uma linha. Selecione ento esse componente e insira-o no form. Esse primeiro campo de edio que estamos inserindo ser utilizado para entrada do nome da pessoa em nosso cadastro de dados pessoais.

Figura 34 Componente TEdit Da mesma forma que procedemos com os outros componentes iremos alterar algumas propriedades desse componente. A seguir apresentamos um quadro com propriedades, eventos e mtodos de TEdit. Propriedade CharCase Contedo ecNormal 21 edNome #0 Descrio No faz nenhum tipo de converso no que digitado. ecUpperCase converte tudo para maisculas Altura da caixa de texto Identificador da caixa de texto Define qual caractere ser usado para ocultar o texto digitado. #0 no oculta o texto digitado Retorna o que foi digitado pelo usurio. Seu contedo deve ser apagado Largura da caixa de texto Descrio Limpa o contedo de Text Muda o foco para o controle Descrio Quando o texto modificado 41

Height Name PasswordChar Text Width Mtodo Clear SetFocus Evento OnChange

400

Lazarus/Free Pascal para iniciantes OnEnter OnExit Quando o controle recebe o foco Quando o foco sai do controle e vai para outro Quadro 3 Propriedades, mtodos e eventos de Edit

Identificando Componentes (TLabel)


Rtulos so apenas texto, ou comentrios, escritos em um form. Geralmente o usurio no interage com rtulos - pelo menos no diretamente. No faz muito sentido clicar em um rtulo, embora no Lazarus isso seja tecnicamente possvel. Nem todo texto que vemos em um form corresponde a um rtulo. O mtodo TextOut de form pode apresentar um texto. Usamos rtulos para descrever outros componentes, tais como campos de edio e caixas de lista ou combo, pois eles no tm ttulo. O Lazarus implementa rtulos como componentes grficos, no ajanelados. Vamos ento inserir um rtulo no nosso form. Selecione o rtulo na paleta Standard e insira-o ao lado esquerdo do campo de edio conforme mostrado na figura seguinte. Altere suas propriedades de acordo com o Quadro 4:

Figura 35 Componente TLabel Propriedade Alignment AutoSize Caption FocusControl Contedo taLeftJustify True &Nome edNome Descrio Texto justificado esquerda Define se o controle ser automaticamente redimensionado para acomodar o texto Legenda do rtulo Define qual componente receber o foco quando for selecionada a tecla de atalho sublinhada da legenda 42

Lazarus/Free Pascal para iniciantes Name WordWrap lblNome False Identificador do rtulo Se AutoSize estiver False, define se o texto poder utilizar retorno automtico (quebra de linha) no caso de ultrapassar a largura definida Descrio Quando o usurio clica no rtulo Quadro 4 Propriedades e eventos de Label

Evento OnClick

Observe que na legenda do componente, a exemplo da legenda do boto, foi inserido um & para definir uma tecla de atalho sublinhada. No caso do rtulo quando pressionamos esta tecla o foco ser mudado para o controle definido na propriedade FocusControl.

Fazendo escolhas (TCheckBox, TRadioButton e TRadioGroup)


H dois controles do Windows que permitem ao usurio escolher diferentes opes. O primeiro a caixa de verificao (TCheckBox), que corresponde a uma opo que pode ser selecionada livremente. O segundo controle o boto de rdio (TRadioButton), que corresponde a uma seleo exclusiva. Por exemplo, se voc tiver dois botes de rdio com rtulos A e B, voc pode selecionar um dos dois, mas no ambos ao mesmo tempo. A outra caracterstica que a escolha de uma das opes obrigatria. Selecione uma caixa de verificao na paleta Standard e insira-o no form. Usaremos a caixa de verificao para definir a situao cadastral da pessoa - pode assumir a situao Ativo se a caixa estiver marcada e No ativo, caso contrrio. No Quadro 5 abaixo podemos ver as propriedades, mtodos e eventos de TCheckBox.

Figura 36 Componente TCheckBox 43

Lazarus/Free Pascal para iniciantes

Propriedade Caption Checked Name State Evento OnClick OnEnter

Descrio Legenda da caixa de verificao Especifica se o controle est marcado Identificador da caixa de verificao Indica se o controle est selecionado, no selecionado ou parcial Descrio Quando o usurio clica no controle Quando o controle recebe o foco Quadro 5 Propriedades, mtodos e eventos de CheckBox

Contedo Ativo False chxSituacao cbUnchecked

Vamos inserir um componente para selecionarmos o sexo da pessoa que est sendo cadastrada. Nesse caso precisamos de um componente que possibilite mais opes. Usaremos ento o grupo de botes de rdio (TRadioGroup). Grupo de botes de rdio permite que sejam inseridos vrios botes, cada um com uma opo. Selecione o grupo de botes de rdio da paleta Standard e o insira no form.

Figura 37 Componente TRadioGroup Vamos alterar algumas propriedades deste componente. No quadro a seguir so apresentadas algumas propriedades, mtodos e eventos de TRadioGroup. Propriedade Caption Columns Contedo Sexo 1 Descrio Legenda do grupo de botes de rdio Nmero de colunas em que as opes do grupo 44

Lazarus/Free Pascal para iniciantes 90 0 Masculino Feminino rgSexo 185 de botes so apresentadas Altura do controle Define o item selecionado (primeiro item 0) Lista de opes

Height ItemIndex Items Name Width Mtodo SetFocus Evento OnClick OnEnter OnExit

Identificador do grupo de botes de rdio Largura do grupo de botes de rdio Descrio Muda o foco para o controle Descrio Quando o controle clicado Quando o controle recebe o foco Quando o foco sai do controle e vai para outro Quadro 6 Propriedades, mtodos e eventos de RadioGroup

Para definir a lista de opes, clique no boto elipse no lado direito da propriedade Items no Object Inspector. Ser aberto o editor de String List. Digite uma opo em cada linha e confirme pressionando o boto OK. A propriedade Items do tipo TStrings e ser utilizada em outros componentes, com o mesmo nome ou no.

Uma Lista com muitas escolhas (TListBox)


Se voc precisar de muitas opes os botes de rdio no so apropriados, a menos que voc tenha um form realmente grande. No se deve usar mais que 5 ou 6 botes de rdio. A soluo usar caixas de lista (TListBox). Uma caixa de lista pode manter um grande nmero de opes em um pequeno espao, pois ela tem uma barra de rolagem para mostrar na tela apenas uma pequena parte da lista completa. Outra vantagem que podemos facilmente adicionar ou remover elementos da lista. Caixas de lista tambm podem permitir uma nica escolha ou mltiplas escolhas. A caixa de lista usada em nossa aplicao servir para a definio da profisso do cadastro de dados pessoais. Selecione a caixa de lista da paleta Standard e o insira no form conforme a figura mostrada a seguir. Insira um rtulo tambm.

45

Lazarus/Free Pascal para iniciantes

Figura 38 O Componente ListBox Vamos alterar algumas propriedades do controle. No quadro abaixo mostramos algumas propriedades, mtodos e eventos de TListBox. Propriedade Columns Height ItemIndex Items MultiSelect Name Sorted Width Mtodo Clear SetFocus Evento OnClick OnEnter OnExit Descrio Nmero de colunas mostradas sem precisar rolar horizontalmente 80 Altura do controle 0 Define o item selecionado (primeiro item 0) Lista de opes False Define se o usurio pode selecionar mais de um item lbxProfissao Identificador da caixa de lista True Define se os elementos sero ordenados 121 Largura da caixa de lista Descrio Deleta os itens da caixa de lista Muda o foco para o controle Descrio Quando o controle clicado Quando o controle recebe o foco Quando o foco sai do controle e vai para outro Quadro 7 Propriedades, mtodos e eventos de ListBox 0 Contedo

46

Lazarus/Free Pascal para iniciantes Na propriedade Items insira os seguintes elementos: Carpinteiro, Analista de Sistemas, Arquiteto, Enfermeiro, Engenheiro, Pedreiro e Professor. No rtulo que foi inserido defina Name com lblProfissao e Caption com Profisso.

Muitas opes em pouco espao (TComboBox)


Caixas de lista ocupam muito espao na tela e suas opes so fixas, no dando ao usurio a oportunidade de escolher uma opo diferente daquelas previamente programadas. Podemos solucionar essas dificuldades usando caixas combinadas (TComboBox). Uma caixa combinada rene em um mesmo controle uma caixa de edio, onde se pode digitar algum texto, e uma caixa de lista que aberta quando pressionamos a seta. O prprio nome do controle sugere que ele a combinao de dois componentes, um Edit e um ListBox. No entanto, o comportamento do ComboBox pode mudar, dependendo do valor da propriedade Style. Veremos um pouco mais adiante como definir corretamente esta propriedade para que o componente tenha o comportamento desejado. Vamos usar uma caixa combinada para definir a escolaridade no cadastro de dados pessoais. Selecione o componente na paleta Standard e o posicione no form conforme a figura a seguir. Coloque um rtulo tambm para identificar a caixa.

Figura 39 Componente ComboBox Vamos ento modificar algumas propriedades deste componente. No quadro a seguir so apresentadas algumas de suas propriedades, mtodos e eventos. A propriedade Style pode assumir os seguintes valores:

47

Lazarus/Free Pascal para iniciantes csDropDown define uma caixa combinada tpica que permite edio e mostra uma caixa de lista para escolha de opo; csDropDownList define uma caixa combinada que no permite edio. Se for pressionada uma letra, o controle mostra a primeira opo que ele encontra iniciando com essa letra; csSimple define um controle que permite edio e sempre mostra a caixa de lista. A altura da caixa depende da propriedade Height.

Existem outros valores para essa propriedade, mas apenas essas so de nosso interesse. Propriedade ItemIndex Descrio Define o item selecionado (primeiro item 0). No pode ser alterado em tempo de desenvolvimento Lista de opes cbxEscolaridade Identificador da caixa combinada True Define se os elementos sero ordenados csDropDown Define o estilo de apresentao da caixa Retorna o que foi selecionado ou digitado Descrio Deleta os itens da caixa combinada Muda o foco para o controle Descrio Quando o contedo do controle modificado Quando o controle clicado Quando o controle recebe o foco Quando o foco sai do controle e vai para outro Quadro 8 Propriedades, mtodos e eventos de ComboBox Contedo

Items Name Sorted Style Text Mtodo Clear SetFocus Evento OnChange OnClick OnEnter OnExit

Na propriedade Items inclua os seguintes elementos: Analfabeto, Fundamental, Mdio, Superior e Ps-graduao. Para o rtulo que foi inserido defina Name como lblEscolaridade e Caption como Escolaridade.

Escolhendo um valor em um intervalo (TScrollBar)


Vamos explorar agora o controle chamado barra de rolagem (TScrollBar). Barras de rolagem so normalmente associados com outros componentes, tais como caixas de lista. Nesses casos a barra de rolagem parte do componente, uma propriedade sua. O uso de barras de rolagem muito raro, exceto quando a faixa de valores a ser escolhida muito grande, pois existe o TTrackBar para intervalos menores. Iremos usar a barra de rolagem para definir a idade da pessoa no cadastro. Selecione ento uma barra de rolagem na paleta Standard e o insira no form conforme mostrado na figura abaixo. Coloque um rtulo para identificar o componente. 48

Lazarus/Free Pascal para iniciantes

Figura 40 Componente ScrollBar Vejamos as propriedades deste componente que sero modificadas. No quadro seguinte so apresentadas propriedades, mtodos e eventos de ScrollBar. Descrio Especifica se o controle ser horizontal ou vertical LargeChange 10 Especifica quanto Position varia quando o usurio clica nos lados da barra Max 100 Especifica a posio mxima Min 1 Especifica a posio mnima Name sbIdade Identificador da barra de rolagem Position 1 Indica a posio atual da barra SmallChange 1 Especifica quanto Position varia quando o usurio clica nas setas Mtodo Descrio SetFocus Muda o foco para o controle Evento Descrio OnChange Quando posio da barra modificada OnScroll Quando a barra rolada OnEnter Quando o controle recebe o foco OnExit Quando o foco sai do controle e vai para outro Quadro 9 Propriedades, mtodos e eventos de ScrollBar No rtulo que foi inserido, modifique a propriedade Name para lblIdade e a propriedade Caption para Idade. 49 Propriedade Kind Contedo sbHorizontal

Lazarus/Free Pascal para iniciantes

Agrupando componentes relacionados (TGroupBox)


TGroupBox usado para agrupar componentes que se relacionam. Usaremos este componente para colocar dentro um componente do tipo TMemo. Selecione o GroupBox na paleta Standard e insira-o no form.

Figura 41 Componente GroupBox Basicamente alteraremos a as propriedades Name e Caption. Defina Name como gbDados e Caption como Dados Pessoais.

Entrando mltiplas linhas (TMemo)


Vimos antes, que o componente TEdit permite a entrada de uma nica linha de texto. Para possibilitar a entrada de mais de uma linha de texto usaremos o componente memorando (TMemo). Selecione o componente Memo da paleta Standard e o insira no form dentro do GroupBox, como mostrado na figura abaixo.

50

Lazarus/Free Pascal para iniciantes

Figura 42 Componente TMemo Usaremos este componente para mostrar todos os dados pessoais cadastrados quando for pressionado o boto correspondente. Assim, precisamos modificar algumas propriedades de Memo. No quadro a seguir so apresentadas propriedades, mtodos e eventos de Memo. Propriedade Align Lines Name ReadOnly Mtodo Clear SetFocus Evento OnChange OnEnter OnExit Descrio Determina como o controle se alinha dentro do seu continer Contm as linhas de texto do controle memDados Identificador do memorando True Define se o usurio pode editar o texto do controle Descrio Deleta as linhas de texto do memorando Muda o foco para o controle Descrio Quando o texto no controle modificado Quando o controle recebe o foco Quando o foco sai do controle e vai para outro Quadro 10 Propriedades, mtodos e eventos de Memo Contedo alClient

O continer do controle Memo o GroupBox. Dessa forma, quando definimos a propriedade Align como alClient, o memorando se ajusta para caber dentro de seu controle pai. A propriedade Lines do tipo TStrings, portanto possui propriedades e mtodos particulares que sero abordados posteriormente. Por enquanto entre no editor 51

Lazarus/Free Pascal para iniciantes da propriedade Lines e delete a linha existente. Memorandos podem ser usados para entrada de dados atravs do teclado, mas no nosso caso ele ser usado para receber os dados programaticamente. Por isso definimos a propriedade ReadOnly como True, para que o usurio no possa alterar o texto.

Juntando tudo
Insira um novo boto no form. Esse boto, quando pressionado, mostrar os dados pessoais no campo Memo. Defina a propriedade Caption como Salvar, Default como True e Name como btnSalvar. Observe na Figura 43 a seguir como deve ficar o form aps a incluso de um novo boto. A definio da propriedade Default como True indica que, se o usurio pressionar a tecla Enter, o evento OnClick ser executado. Agora iremos escrever o cdigo que far todo o trabalho para ns. Como vimos no nosso primeiro programa, se queremos que a ao acontea quando pressionarmos o boto, ento deveremos programar o evento OnClick do boto. D um duplo clique no boto e o editor de cdigo ser aberto para inserirmos o cdigo. Vamos analisar cada linha do cdigo mostrado na Figura 44. Iniciaremos pela linha 54. Esta linha responsvel por deletar as linhas do memorando, conforme descrio do mtodo Clear no Quadro 10. Dessa forma toda vez que inserirmos os dados de uma nova pessoa e pressionarmos o boto btnSalvar, os dados anteriores so apagados. Observe que, para chamar um mtodo de um componente, informamos o nome do componente seguido do nome do mtodo separados por ponto. A propriedade Lines do componente Memo um objeto do tipo TStrings, portanto possui propriedades e mtodos. Dos mtodos disponveis de Lines usaremos Add, para adicionar novas linhas ao texto do controle.

Figura 43 Form com a boto btnSalvar 52

Lazarus/Free Pascal para iniciantes Na linha 55 do cdigo da Figura 44 o nome da pessoa adicionada ao texto. Note a forma de invocarmos o mtodo Add. Add um mtodo de Lines, e Lines uma propriedade de mmDados. O argumento do mtodo deve ser uma string. Como argumento usamos um literal, que identifica o dado da linha de texto, concatenado ao nome da pessoa, que dado pela propriedade Text do componente edNome. A linha 56 semelhante 55, no merece maiores comentrios.

Figura 44 Cdigo do evento OnClick do boto btnSalvar A profisso da pessoa adicionada na linha 57. As profisses esto na propriedade Items de lbxProfissao. O ndice do elemento selecionado no ListBox dado pela propriedade ItemIndex. Items pode ser tratado como um vetor indexado por ItemIndex. Por isso a linha 57 escrita dessa forma. Na linha 58 adicionamos a idade da pessoa, definida pela propriedade Position de ScrollBar. Position uma propriedade numrica do tipo integer. Antes de concatenar seu valor necessrio convert-lo para string. Por isso usamos a funo IntToStr(), para converter um nmero inteiro para string. A linha 59 pode ser analisada de forma semelhante linha 57. Portanto no ser necessrio acrescentar nenhum comentrio a respeito. No caso das linhas 60 a 63, o que se faz necessrio para mostrar o sexo da pessoa. Como a propriedade Checked do componente CheckBox boolean, usamos isso para implementar uma estrutura de deciso. Se Checked estiver marcado (True) ento ser mostrado sexo masculino, caso contrrio ser mostrado sexo feminino. TStrings, sendo uma classe, como j foi comentado, possui atributos e mtodos tambm. A seguir mostramos os membros mais usados. Note que a propriedade Items dos componentes TComboBox e TListBox, assim como Lines, de TMemo, tambm so do tipo TStrings. Propriedade Count Strings Text Contedo Descrio Informa quantas linhas existem na lista Referencia as strings na lista atravs de sua posio. Sempre baseada em 0 Retorna as strings da lista como uma nica string onde cada linha finalizada com um Enter (LF) e um retorno de carro (CR) Descrio 53

Mtodo

Lazarus/Free Pascal para iniciantes Add AddStrings Clear Delete IndexOf Insert LoadFromFile SaveToFile Adiciona uma string no final da lista Adiciona um TStrings na lista Deleta as linhas de texto da lista Deleta uma linha da lista usando sua posio Procura uma string na lista Insere uma string em uma posio especfica Preenche a lista com as linhas de um arquivo texto Salva a lista em um arquivo texto Quadro 11 Propriedades e mtodos de TStrings

O Lazarus, alm da funo IntToStr() que usamos no cdigo da Figura 44, tem outras funes para converso de tipos que so mostradas no quadro a seguir: Funo Descrio StrToInt(const S: String) Converte um String para Inteiro IntToStr(value: Integer) Converte um Inteiro para String StrToFloat(const S: String) Converte um String para Ponto Flutuante FloatToStr(value: Extended) Converte um Ponto Flutuante para String DateToStr(date: TDateTime) Converte um TDateTime para String DateTimeToStr(date: TDateTime) Converte um TDateTime para String StrToDate(const S: String) Converte um String para TDateTime StrToDateTime(const S: String) Converte um String para TDateTime TimeToStr(time: TDateTime) Converte um TDateTime para String FormatFloat(const format: String; value: Formata um Ponto Flutuante retornando um Extended) String de acordo com o formato Quadro 12 Funes de converso de dados

54

Lazarus/Free Pascal para iniciantes

Captulo 4 Caixas de Dilogo


O Lazarus oferece algumas caixas de dilogo pr-definidas que facilitam muito o desenvolvimento de aplicaes.

ShowMessage
Declarada internamente pelo Lazarus da seguinte forma: procedure ShowMessage(const Msg: string); Onde o argumento uma string. Para experimentar a utilizao das caixas de dilogo vamos criar uma nova aplicao. Depois de iniciar a nova aplicao vamos modificar Name do form para frmDialogos, e Caption para Dilogos. Depois vamos salv-la. Vamos dar unit o nome de u_dialogos e ao projeto o nome Dialogos. Insira um boto, d a ele o nome de btnMensagem1 e em Caption coloque ShowMessage. Aumente a largura do boto, deixando a propriedade Width com o valor 100. Agora d um duplo clique no boto e quando abrir o editor de cdigo escreva: ShowMessage('Este texto ser mostrado'); Execute a aplicao e pressione o boto. A caixa de dilogo ser mostrada:

Figura 45 Caixa de dilogo ShowMessage Essa a caixa mais simples que existe no Lazarus. Sua barra de ttulo sempre mostra o nome do projeto e apresenta apenas o boto OK. possvel criar mensagens em mltiplas linhas usando qualquer um dos seguintes separadores: sLineBreak; LineEnding; ou #13#10. Por exemplo, esta mensagem ser mostrada em duas linhas: ShowMessage('Primeira linha' + sLineBreak + 'segunda linha'); 55

Lazarus/Free Pascal para iniciantes

MessageDlg
ShowMessage apenas mostra uma mensagem, no permite interao com o usurio. MessageDlg permite vrios tipos de dilogos e oferece recurso de resposta do usurio. Essa caixa de dilogo declarada pelo Lazarus de duas formas: function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word; function MessageDlg(const aCaption, Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word; Na primeira verso aCaption opcional e ser mostrado um texto correspondente ao DlgType informado. Onde: const Msg: string uma constante ou varivel do tipo string que contm a mensagem que ser mostrada na caixa de dilogo. DlgType: TMsgDlgType so cones que indicam o tipo da caixa de dilogo. Pode ser mtWarning (cone 'exclamao' amarelo), mtError (cone 'pare' vermelho), mtInformation (cone 'i' azul), mtConfirmation (cone 'interrogao' verde) e mtCustom (no tem cone). Buttons: TMsgDlgButtons um array de botes que aparecem na caixa. Pode ser mbYes, mbNo, mbOk, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNotToAll, mbYesToAll e mbHelp. HelpCtx: Longint define o nmero do help de contexto. Por padro 0. O retorno da funo a informao do boto pressionado pelo usurio. Assim, apenas troque mb por mr nos nomes dos botes, para verificar o boto que foi clicado. Os possveis valores de retorno so mrYes, mrNo, mrOk, mrCancel, mrAbrot, mrRetry, mrIgnore, mrAll, mrNotToAll, mrYesToAll e mrHelp. Vamos ento programar o evento OnCloseQuery do form da nossa aplicao Dialogos. Esse evento acontece quando a janela fechada, mas d ao usurio a chance de confirmar ou no o fechamento. Selecione o evento na aba Events do ObjectInpector, d um duplo clique na sua direita para abrir o editor de cdigo e digite o seguinte cdigo if MessageDlg('Deseja sair?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then CanClose := False; CanClose uma varivel boolean, declarada pelo mtodo que estamos programando. Seu valor padro True, e neste caso a janela fechada. Se quisermos impedir seu fechamento mudamos a varivel para False. Execute o programa e clique o boto para fechar a janela. A seguinte caixa ser mostrada:

56

Lazarus/Free Pascal para iniciantes

Figura 46 Caixa de dilogo MessageDlg Se voc pressionar o boto Yes a janela ser fechada. Observe que na barra ttulo apareceu o texto Confirmation, pois usamos a verso de ShowMessage onde aCaption opcional. Mas podemos usar a segunda verso, onde podemos informar um texto como caption assim: if MessageDlg('Confirmao', 'Deseja mtConfirmation, [mbYes, mbNo], 0) = mrNo then CanClose := False; Desta forma a caixa ser mostrada assim: sair?',

Figura 47 Caixa de dilogo MessageDlg com caption Os textos dos botes esto em ingls porque a API (Interface de Programao de Aplicativos) do Lazarus toda em ingls. Mais adiante veremos uma soluo para esse problema.

Application.MessageBox
Esta caixa de dilogo a mais completa do ambiente Lazarus, a que apresenta maior flexibilidade para o programador e est definida da seguinte forma: function Application.MessageBox(const PChar; Flags: Longint): Integer; Text, Caption:

Onde: const Text uma constante ou varivel do tipo PChar que contm o texto da mensagem. PChar um ponteiro para uma string. Caption: PChar define um ttulo para a janela. do tipo PChar. 57

Lazarus/Free Pascal para iniciantes Flags: Longint define botes, cones e a possibilidade de focar um determinado boto. Os valores de boto so MB_ABORTRETRYIGNORE, MB_OK, MB_OKCANCEL, MB_RETRYCANCEL, MB_YESNO e MB_YESNOCANCEL. Os cones podem ser MB_ICONEXCLAMATION, MB_ICONWARNING, MB_ICONINFORMATION, MB_ICONASTERISK, MB_ICONQUESTION, MB_ICONSTOP, MB_ICONERROR e MB_ICONHAND. Os valores para definio de boto default so MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3 e MB_DEFBUTTON4. Para utilizao correta desse parmetro necessrio declarar a unit LCLType na clusula uses. O retorno da funo o boto que foi pressionado. Os possveis valores de retorno so IDABORT, IDCANCEL, IDIGNORE, IDNO, IDOK, IDRETRY e IDYES. Insira um novo boto no form do projeto Dialogos. Na propriedade Name informe btnMensagem2, na propriedade Caption defina MessageBox. Altere a propriedade Width para 100. Declare LCLType na clusula uses. D um duplo clique no boto para programar o evento OnClick de btnMensagem2. No editor de cdigo digite ento o seguinte: if Application.MessageBox('Deseja salvar o arquivo?', 'Confirmao', MB_YESNOCANCEL + MB_ICONQUESTION + MB_DEFBUTTON2) = idYes then ShowMessage('Voc pressionou o boto SIM'); Este no um cdigo muito funcional, apenas exemplifica a utilizao de MessageBox. Observe como so informados os botes, o cone e o boto default. Como definimos que MB_DEFBUTTON2 o boto default, ento o default ser o boto No. Execute o programa e pressione o boto MessageBox. A caixa ir parecer com a figura.

Figura 48 Caixa de dilogo MessageBox com botes de opes Tanto MessageDlg quanto MessageBox podem ser usadas apenas para apresentar informaes ao usurio, sem necessidade de checar o boto pressionado. Por exemplo, se for inserido o cdigo abaixo no evento OnClick do boto btnMensagem2: Application.MessageBox('Arquivo no pode ser salvo', 'Informao', MB_OK + MB_ICONEXCLAMATION); A seguinte caixa de dilogo ser mostrada. 58

Lazarus/Free Pascal para iniciantes

Figura 49 MessageBox para informaes ao usurio Note que apresentamos apenas o boto OK. Sendo uma informao sobre uma ocorrncia, podendo ser inclusive uma mensagem de erro, no precisamos verificar o boto pressionado pelo usurio. Em certas situaes pode ser que o programador deseje construir caixas de dilogo dinmicas, ou seja, onde as mensagens de texto dependem de determinadas condies durante a execuo do programa. Nesses casos deve-se observar que os argumentos de MessageBox no so do tipo string e sim PChar. Analisemos o cdigo a seguir: var Msg: string; begin Msg := 'Arquivo no pode ser salvo'; Application.MessageBox(PChar(Msg), 'Informao', MB_OK + MB_ICONEXCLAMATION); end; Para podermos usar uma string como argumento de MessageBox necessrio convertermos para PChar. Por isso usamos a chamada funo PChar().

InputBox
O ambiente Lazarus oferece tambm caixas de dilogo para entrada de dados do usurio. Uma dessas caixas InputBox, que retorna um tipo string com o texto digitado pelo usurio. A definio interna dessa funo : function InputBox(const ACaption, APrompt, ADefault: string): string; Onde: const ACaption define o ttulo da janela. APrompt define a orientao ao usurio dentro da caixa. ADefault define um valor default para a caixa. Ser retornado se o usurio pressionar a tecla Cancel.

59

Lazarus/Free Pascal para iniciantes Para exemplificar o funcionamento dessa caixa de entrada vamos inserir um boto no form do programa Dialogos. Na propriedade Name digite btnEntrada1, em Caption escreva InputBox. Altere a largura do boto modificando a propriedade Width para 100. Para programarmos o evento OnClick do boto d um duplo clique nele. No editor de cdigo faa as alteraes para que o procedimento do evento fique assim: var Cidade: string; begin Cidade := InputBox('Entrada', 'Digite o nome da cidade', 'Santarm'); end; Execute o programa e clique no boto InputBox. A seguinte caixa de dilogo ser mostrada na tela:

Figura 50 Caixa de dilogo InputBox Se voc clicar no boto Cancel, a funo retornar o texto default, no nosso caso, Santarm. Ou podemos digitar uma nova cidade no campo e pressionar OK.

InputQuery
InputQuery retorna um tipo boolean, o texto digitado pelo usurio ser atribudo a uma varivel string previamente declarada. A funo retornar True se o usurio pressionar OK ou retornar False, caso o usurio pressione o boto Cancel. Internamente a funo assim definida, em duas verses: function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean; function InputQuery(const ACaption, APrompt: string; MaskInput: Boolean; var Value: string): Boolean; A segunda verso inclui o parmetro MaskInput do tipo boolean que determina se a entrada do usurio ser mascarada com asteriscos, como em uma senha. Os parmetros so semelhantes aos de InputBox, no entanto Value deve ser declarada e inicializada antes, pois passada por referncia funo e retorna o texto digitado pelo usurio. 60

Lazarus/Free Pascal para iniciantes Para exemplificar o funcionamento da funo InputBox vamos inserir um novo boto e um rtulo na nossa aplicao Dialogos. Na propriedade Name do boto informe btnEntrada2, na propriedade Caption informe InputQuery e na propriedade Width modifique o valor para 100. No rtulo defina Name como lblCidade e Caption como Santarm. Clique no cone ao lado da propriedade Font no Object Inspector para expandi-la. Defina Size como 16. O form deve ficar com aparncia semelhante da Figura 51 a seguir. Queremos que o usurio digite o nome de uma cidade e que esse nome seja mostrado no rtulo lblCidade, apenas se for pressionado o boto OK. Para programar o evento OnClick desse boto d um duplo clique nele e digite o seguinte cdigo no editor: var Cidade: string; begin Cidade := 'Santarm'; if InputQuery('Cidade', 'Digite o nome da cidade', Cidade) then lblCidade.Caption := Cidade; end;

Figura 51 Aplicao Dialogos com um novo boto e rtulo Execute o programa e clique no boto InputQuery. Digite o nome de uma cidade e pressione OK. O nome digitado ser mostrado no rtulo.

Traduzindo as Caixas de Dilogo


Foi visto at agora que as interfaces das caixas de dilogo esto em ingls. Vejamos ento uma dica para traduzir tudo para portugus. 61

Lazarus/Free Pascal para iniciantes Inicialmente selecione a opo de menu Project | View Source, para abrir o cdigo do arquivo de projeto da aplicao. Digite o cdigo destacado na Figura 52 e compile o programa. Pressione os botes correspondentes s caixas de dilogo e verifique que as interfaces agora esto em portugus.

Figura 52 Cdigo para traduzir caixas de dilogo Observe que o cdigo deve funcionar em Windows e Linux, de acordo com as diretivas de compilao. Os diretrios que constam no cdigo so o padro. Se sua instalao foi feita em diretrio diferente altere o cdigo.

62

Lazarus/Free Pascal para iniciantes

Boto com cone (TBitBtn)


Para finalizar nosso programa Dialogos, vamos inserir um boto para fechar a janela. Mas vamos usar um boto diferente. Selecione a aba de componentes Additional. Selecione o boto BitBtn e o insira no form. BitBtn um boto que, alm de um Caption, aceita tambm um cone e possui alguns comportamentos pr-definidos. Voc pode adicionar botes tais como OK, Cancel, Close, etc. sem necessidade de escrever nenhum cdigo. Vamos descrever algumas propriedades de BitBtn. Propriedade Caption Default Enabled Glyph Kind Name Contedo &Fechar False Descrio Legenda do boto Evento OnClick no executado se Enter for pressionado True Habilita o boto Define um cone para o boto bkClose Seleciona o tipo do boto e seu comportamento btnFechar Identificador do boto Quadro 13 Propriedades de BitBtn

Demais propriedades, mtodos e eventos so os mesmos de TButton. Observe que alteramos a propriedade Caption para Fechar. Quando voc escolhe o tipo em Kind, o Lazarus atribui a Caption um texto com o mesmo nome do tipo. Podemos alter-lo sem com isso mudar seu comportamento. No entanto no podemos alterar o cone, pois isso implicaria na mudana de Kind para bkCustom, que significa um boto onde o programador define seu comportamento e seria necessrio inserir cdigo para isso. Note que no inserimos cdigo para o evento OnClick, mas se executarmos o programa e pressionarmos o boto Fechar a janela ser fechada.

63

Lazarus/Free Pascal para iniciantes

Captulo 5 Criando Menus


As aplicaes que criamos at o momento no possuem um dos elementos de interface mais importantes de uma aplicao Windows: a barra de menus. Mesmo nossas aplicaes tendo um menu de sistema (aquele do canto superior esquerdo), muitas tarefas so acessadas atravs de comandos de menu. Uma aplicao possui vrios menus que podem inclusive mudar em tempo de execuo e vrios menus locais (normalmente acessados atravs de um clique no boto direito do mouse). Os componentes para criar menus esto localizados na aba Standard da paleta de Componentes.

Estrutura do Menu Principal


Geralmente os menus tm dois nveis. Uma barra de menu, abaixo do ttulo da janela, contm os nomes dos sub-menus (pull-down), que por sua vez tm uma srie de itens. No entanto a estrutura de menu muito flexvel. possvel colocar um item de menu diretamente na barra de menu e colocar um sub-menu de segundo nvel dentro de outro sub-menu. Voc deve evitar colocar comandos diretamente na barra de menu. Isso no muito comum. Se realmente isso for necessrio, acrescente um menu com um nico item de menu. Um exemplo tpico o menu Ajuda com o item Sobre. Colocar sub-menus dentro de outro sub-menu - um sub-menu de segundo nvel mais comum, e neste caso o Windows oferece uma indicao visual, um pequeno tringulo direita do menu. De qualquer maneira, menus de segundo nvel podem se tornar o uso do programa uma coisa chata. Pense na possibilidade de agrupar as opes separando os grupos por barras separadoras. Veja a figura 53.

64

Lazarus/Free Pascal para iniciantes

Figura 53 Menu com opes agrupadas e sub-menu

Diferentes funes dos itens de menu


H trs tipos fundamentais de itens de menu: Comandos so itens de menu usados para executar uma ao. No tm indicao visual de sua funo. Modificadores de estado so itens usados para alternar uma opo entre ligado e desligado, para mudar o estado de um elemento particular. Esses comandos geralmente possuem uma marca no lado esquerdo para indicar que esto ativos. Neste caso, selecionar a opo produz a ao oposta. Dilogo so itens que invocam uma caixa de dilogo quando so selecionados. Isso inclui qualquer janela onde o usurio precise interagir. Estes comandos deveriam ter uma indicao visual que consiste de trs pontos aps o texto. 65

Lazarus/Free Pascal para iniciantes

Aplicao Exemplo
Para exemplificarmos a construo de menus vamos criar uma nova aplicao. Defina a propriedade Name do form como frmMenus, o Caption como Menus e salve tudo atribuindo unit o nome u_menus e ao projeto o nome AplicacaoMenu. Selecione um rtulo na aba Standard e insira-o no form. Defina a propriedade Name como lblTexto. Na propriedade Align selecione alClient. Escreva algum texto bastante longo na propriedade Caption. Mude a propriedade WordWrap para True, para ter vrias linhas de texto. Mude AutoSize para False para permitir o redimensionamento do rtulo. Clique no cone ao lado da propriedade Font, para expandi-la, e altere Name para Arial e Size para 38. Selecione um componente TPanel na aba Standard e o insira no form. Panel usado para agrupar outros controles. Muito usado para criar barras de ferramentas. exatamente isso que vamos implementar na nossa aplicao. Mude a propriedade Name do Panel para panBarra, e delete o texto da propriedade Caption. Defina sua propriedade Align como alTop.

Figura 54 Aplicao Menus Insira cinco botes (TButton) e os posicione adequadamente no Panel. No primeiro defina Name como btnFonte e Caption como Cor &Texto... No segundo defina Name como btnFundo e Caption como Cor &Fundo... No terceiro defina Name como btnEsquerda e Caption como &Esquerda. No quarto defina Name como btnCentro e Caption como &Centro. No ltimo defina Name como btnDireita e Caption como &Direita. A janela deve ficar como a Figura 54. Os trs ltimos botes mudam o alinhamento (Alignment) do rtulo. Ento vamos escrever o cdigo para os eventos OnClick desses botes. D um duplo clique em cada um deles. Para btnEsquerda digite no editor de cdigo: lblTexto.Alignment := taLeftJustify; 66

Lazarus/Free Pascal para iniciantes Para btnCentro digite: lblTexto.Alignment := taCenter; E para btnDireita digite: lblTexto.Alignment := taRightJustify; Voc pode verificar a funcionalidade dos botes executando a aplicao e pressionando cada um deles e observando seus efeitos sobre o texto do rtulo.

A Caixa de Dilogo ColorDialog


Vamos inserir na nossa aplicao um componente denominado ColorDialog. Esse componente serve para apresentar a caixa de dilogo para seleo de cores padro do ambiente Windows. Localize-o na aba Dialogs. Pode ser colocado em qualquer lugar da janela, pois no um componente visual, ou seja, no ser visvel quando o programa for executado. Ser invocado em tempo de execuo pelos dois primeiros botes, por isso eles tm os trs pontos no Caption, para indicar a chamada a uma caixa de dilogo. Vamos mudar a propriedade Name do componente. Defina-a como dlgCores. Queremos que, quando pressionados, os dois primeiros botes chamem a caixa de dilogo dlgCores. Nessa caixa selecionamos a cor desejada e quando pressionarmos o boto OK, a cor ser atribuda propriedade Color do rtulo ou propriedade Color de Font. D um duplo clique no boto btnFonte e digite o seguinte cdigo no editor: dlgCores.Color := lblTexto.Font.Color; if dlgCores.Execute then lblTexto.Font.Color := dlgCores.Color; Na primeira linha fazemos com que a caixa de dilogo seja mostrada com a cor do texto. Depois executamos a caixa de dilogo e, se o usurio pressionar o boto OK, a cor do texto do rtulo modificada. O mtodo Execute de ColorDialog retorna True se for pressionado o boto OK ou False se for pressionado o boto Cancel. Vamos fazer o mesmo com o boto btnFundo e digitar o seguinte cdigo no editor: dlgCores.Color := lblTexto.Color; if dlgCores.Execute then lblTexto.Color := dlgCores.Color; Execute o programa e clique no boto btnFonte. Voc ter a caixa de dilogo de cores como na figura:

67

Lazarus/Free Pascal para iniciantes

Figura 55 A caixa ColorDialog

Criando um Menu com o Menu Editor


Vamos criar um menu com a seguinte estrutura: Arquivo Sair Exibir Barra de ferramentas Opes Cor do texto Cor do fundo Esquerda Centro Direita Ajuda Sobre O Lazarus possui um editor de menus chamado Menu Editor. Para utiliz-lo precisamos de um componente TMainMenu. Selecione esse componente na aba Standard e o insira no form em qualquer posio. O Lazarus se encarrega de posicionar o menu no lugar correto, abaixo da barra de ttulo. O Menu Editor uma ferramenta poderosa: voc cria um menu simplesmente escrevendo o texto dos comandos, para mover os itens simplesmente use o menu local conforme ser mostrado em seguida e as propriedades podem ser modificadas facilmente. Para comprovar isso vamos dar um duplo clique no componente MainMenu. A janela do Menu Editor ser mostrada, apresentando a primeira opo de menu. Digite &Arquivo na propriedade Caption e tecle ENTER, e na propriedade Name digite 68

Lazarus/Free Pascal para iniciantes mnuArquivo. O Menu Editor define a primeira opo. Clique com o boto direito sobre a opo Arquivo para visualizar o menu local, conforme pode ser visto na figura:

Figura 56 Menu Editor Neste menu local podemos: Insert New Item (after) inserir novo item de menu depois do atual; Insert New Item (before) inserir novo item de menu antes do atual; Delete Item deletar o item atual; Create Submenu criar um submenu sob o item de menu atual; Handle OnClick Event manipular o evento OnClick; Move Up (or left) mover o item atual para cima ou para esquerda; Move Down (or right) mover o item atual para baixo ou para direita. Clique na opo Create Submenu para criar o submenu sob a opo Arquivo. Estando a opo do submenu selecionado digite Sai&r na propriedade Caption. Na propriedade Name digite mitSair. Clique novamente com o boto direito sobre a opo Arquivo e escolha a opo Insert New Item (after). No retngulo identificado como novo item, digite E&xibir na propriedade Caption e tecle ENTER, e na propriedade Name digite mnuExibir. Crie um submenu abaixo de Exibir e digite Barra de &ferramentas na propriedade Caption, na propriedade Checked desse item defina True, e na propriedade Name digite mitBarraFerramentas. No prximo menu digite &Opes na propriedade Caption, na propriedade Name digite mnuOpcoes. No submenu digite Cor do &texto... no Caption primeiro item e mitCorTexto em Name. Digite Cor de &fundo... no Caption segundo item e mitCorFundo em Name. No terceiro item digite um hfen (-). Isso cria um separador no submenu. No quarto item digite &Esquerda no Caption e mitEsquerda em Name. No quinto item digite &Centro no Caption e mitCentro em Name. No ltimo item digite &Direita no Caption e mitDireita em Name. Finalmente no ltimo menu digite Aj&uda na propriedade Caption e mnuAjuda em Name, e no submenu digite &Sobre... no Caption e mitSobre em Name.

69

Lazarus/Free Pascal para iniciantes

Figura 57 Aspecto do menu criado

Teclas de atalho e hotkeys


Uma caracterstica 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 criao do nosso menu, definimos as letras sublinhadas inserindo um & antes da letra. Outra caracterstica padro dos menus so as teclas de atalho. Quando aparece uma combinao de teclas no lado direito do item de menu, significa que voc pode usar essa combinao para executar o comando. Essa caracterstica oferece a maneira mais rpida de executar um comando. Para associar teclas de atalho a um item de menu muito fcil. Ainda no Menu Editor simplesmente escolha uma combinao de teclas na propriedade ShortCut do item. Vamos fazer isso para as opes: Esquerda, Centro e Direita. Selecione a opo Esquerda e na propriedade ShortCut selecione a combinao CTRL + E. Para a opo Centro selecione CTRL + C e para a opo Direita selecione CTRL + D. As teclas de atalho no so visveis no Menu Editor. Feche o Menu Editor e clique em Opes como mostra a figura abaixo:

70

Lazarus/Free Pascal para iniciantes

Figura 58 Menu com teclas de atalho

Respondendo aos comandos do menu


Para responder aos comandos de menu, voc deveria definir um mtodo para o evento OnClick de cada item de menu. No Menu Editor, selecione o item de menu Sair. Selecione a aba Events do Object Inspector e d um duplo clique no evento OnClick. Queremos que janela seja fechada quando o usurio selecionar este comando. Portanto, quando abrir o editor de cdigo digite o comando: Close; O comando Exibir | Barra de ferramentas tem uma marca de verificao, fica marcada quando a barra de ferramentas est visvel. Aqui est o cdigo para o evento OnClick desse comando: panBarra.Visible := not panBarra.Visible; mitBarraFerramentas.Checked := panBarra.Visible; A primeira linha muda a visibilidade da barra de ferramentas que foi criada usando o componente Panel. A segunda linha marca/desmarca o item de menu de acordo com a visibilidade do painel. No comando Opes | Cor do texto digite o seguinte cdigo para o evento OnClick: dlgCores.Color := lblTexto.Font.Color; if dlgCores.Execute then lblTexto.Font.Color := dlgCores.Color;

71

Lazarus/Free Pascal para iniciantes Note que este cdigo exatamente o mesmo programado para o evento OnClick do boto btnFonte. Na verdade no precisamos replicar esse cdigo aqui. Mostraremos ento como reutilizar o cdigo do evento de um componente em outro. Observe que o cdigo do comando Opes | Cor de fundo o mesmo do evento OnClick do boto btnFundo. Ento selecione esta opo no Menu Editor e v para a aba Events no Object Inspector. Clique no boto do ComboBox do evento OnClick para ver todos os eventos disponveis. Selecione btnFundoClick. Pronto, agora o comando do menu chamar o mesmo cdigo do evento OnClick do boto btnFundo. Os outros trs itens do menu Opes tm basicamente o mesmo cdigo dos botes de alinhamento. Portanto repita o procedimento anterior para as opes Esquerda, Centro e Direita, de forma que seus eventos OnClick sejam os mesmos dos trs botes correspondentes da barra de ferramentas. No entanto devemos acrescentar uma marca de verificao ao lado do item que estiver habilitado, desmarcando os demais. Inicialmente, no Menu Editor, selecione Opes | Esquerda e altere a propriedade Checked para True. Essa a nossa situao padro. Sempre que a aplicao iniciar, o texto estar alinhado esquerda. Em seguida vamos modificar o cdigo para o comando em questo. Selecione o evento OnClick do item de menu e d um duplo clique nele. Acrescente ento o seguinte cdigo: mitEsquerda.Checked := True; mitCentro.Checked := False; mitDireita.Checked := False; Este cdigo, alm de definir o alinhamento esquerda do texto, marca e desmarca adequadamente as opes do menu. Vamos agora modificar o evento OnClick de Opes | Centro. Digite o seguinte cdigo: mitEsquerda.Checked := False; mitCentro.Checked := True; mitDireita.Checked := False; Em Opes | Direita digite o seguinte cdigo: mitEsquerda.Checked := False; mitCentro.Checked := False; mitDireita.Checked := True;

Chamadas a forms
Com certeza suas aplicaes sempre tero muitos forms. Existe um form principal (main) que faz chamadas a outros forms. A maneira de chamarmos forms ser estudada agora. Vamos criar um novo form na nossa aplicao. Esta janela ser nosso Sobre (About). Selecione File | New Form. Isso inclui um novo form ao nosso programa. Altere o Caption para Sobre e a propriedade Name para frmSobre. Salve a unit e d a ela o nome u_sobre. Inclua um TLabel em frmSobre. Altere a propriedade WordWrap para True e AutoSize para False. Na propriedade Caption digite Programa Menus desenvolvido por 72

Lazarus/Free Pascal para iniciantes Carlos Arajo apenas para fins didticos. Na propriedade Alignment informe taCenter. Ajuste o rtulo no form para que ele fique como na figura abaixo.

Figura 59 Formulrio Sobre Coloque outro rtulo no frmSobre e defina o Caption como Verso 1.0. Coloque um TBitBtn no form. Defina Name como btnFechar, em Kind informe bkClose e modifique Caption para &Fechar. Queremos chamar frmSobre quando o usurio selecionar o comando Ajuda | Sobre. No entanto, apesar de frmSobre fazer parte do nosso projeto, frmMenus no sabe da sua existncia. necessrio dizermos a frmMenus que frmSobre existe. Para fazer isso precisamos dizer a frmMenus que use a unit u_sobre, correspondente a frmSobre. Logo abaixo da palavra implementation na unit u_menus escreva o seguinte cdigo: uses u_sobre; Isso habilita frmMenus acessar qualquer objeto de frmSobre e o prprio form. H duas maneiras de fazermos chamadas a um form: Modal - o foco fica preso ao form e no liberado at que este seja fechado. O usurio pode ativar qualquer outra aplicao Windows, mas no pode ativar outra janela da aplicao cuja janela foi aberta como modal. Para ativar esse modo chame o form usando o mtodo ShowModal. No modal - o foco pode ser transferido para outra janela sem que esta precise ser fechada. Para ativar esse modo chame o form usando o mtodo Show.

Agora selecione o evento OnClick do comando Ajuda | Sobre e digite o seguinte cdigo: frmSobre.ShowModal; Execute o programa e clique no comando Ajuda | Sobre. A aparncia da aplicao deve ser como a Figura 60. 73

Lazarus/Free Pascal para iniciantes Em tempo de desenvolvimento gerenciar muitos forms pode ser muito trabalhoso, pois apenas um deles pode estar ativo a cada instante. Para selecionar um form a ser modificado, selecione o comando View | Forms, pressione o boto correspondente na barra de ferramentas ou use as teclas de atalho SHIFT + F12. Para selecionar uma unit, selecione o comando View | Units, pressione o boto correspondente na barra de ferramentas ou use as teclas de atalho CRTL + F12.

Figura 60 A janela Sobre

Menus locais (Pop-up)


Nas aplicaes Windows comum haver menus locais ativados com um clique no boto direito do mouse. O menu que mostrado geralmente depende do local onde o mouse clicado. Esses menus agrupam opes relacionadas com o elemento da interface que est selecionado. So mais rpidos que o menu estudado anteriormente porque no necessita que o mouse seja movimentado para ativ-lo. No Lazarus h duas maneiras de tratar menus locais. Podemos deixar o Lazarus manipul-los automaticamente ou escolher a tcnica manual. Vamos apresentar aqui apenas o menu local automtico. Para adicionar um menu local a um form, selecione o componente TPopupMenu na aba Standard e o insira no form em qualquer posio. Altere a propriedade Name para mlAlinhamento. D um duplo clique no componente para abrir o Menu Editor. Insira as opes: Esquerda, Centro e Direita. Na opo Esquerda mude a propriedade Checked para True, e a propriedade Name para mliEsquerda. Mude Name de Centro para mliCentro e da opo Direita para mliDireita. Ou seja, queremos um menu local com as mesmas opes referentes ao alinhamento do texto do rtulo do MainMenu que criamos. Portanto vamos fazer algumas modificaes nos mtodos para reutilizar o cdigo. No mtodo do evento OnClick do boto btnEsquerda vamos incluir cdigo para marcar e desmarcar as opes do menu local: 74

Lazarus/Free Pascal para iniciantes lblTexto.Alignment := taLeftJustify; mitEsquerda.Checked := True; mliEsquerda.Checked := True; mitCentro.Checked := False; mliCentro.Checked := False; mitDireita.Checked := False; mliDireita.Checked := False; Depois selecione a opo Esquerda no menu local, v para a aba Events do Object Inspector, clique no boto do evento OnClick e selecione o mtodo btnEsquerdaClick. Agora quando executarmos o comando Esquerda no menu local estaremos executando o mesmo mtodo do evento OnClick do comando Opes | Esquerda. E o cdigo marcar/desmarcar opes nos dois menus. Vamos repetir o procedimento para as opes Centro e Direita. Selecione o rtulo lblTexto e na propriedade PopupMenu selecione mlAlinhamento. Esta a maneira de associar o menu local a um componente. Execute o programa, clique com o boto direito do mouse no rtulo, selecione uma das trs opes de alinhamento do texto e verifique que a opo escolhida fica marcada nos dois menus.

Figura 61 O componente PopupMenu

75

Lazarus/Free Pascal para iniciantes

Captulo 6 Barras de ferramentas e de status


Barra de ferramentas (TToolBar)
A barra de ferramentas (ToolBar) um componente com botes prprios e recursos personalizados. Os botes so do tipo TToolButton, considerados objetos internos de ToolBar. Para exemplificar sua utilizao vamos substituir o painel de botes do programa Menus por um componente ToolBar. Para isso selecione o componente panBarra e pressione a tecla DEL. Assim o painel e todos os botes inseridos nele so deletados. Note que os mtodos definidos para os botes no foram excludos, porque existe cdigo do programador neles. Agora selecione o componente ToolBar na aba Common Controls e o insira em qualquer posio do form. O componente alinha-se automaticamente no topo do form, abaixo da barra de menu. Algumas propriedades desse componente so apresentadas no quadro a seguir: Propriedade +EdgeBorders ebLeft ebTop ebRight ebBottom EdgeInner EdgeOuter Flat Images Name tbBarra Contedo False True False True esRaised esLowered True Descrio Define bordas para a barra de ferramentas. Nesse caso, definimos que haver bordas no topo e na base

Define o formato interno da borda Define o formato externo da borda Torna a ToolBar transparente e deixa os botes sem bordas Permite definir um objeto ImageList que contm as imagens para os botes Identificador da barra de ferramentas Quadro 14 Propriedades de ToolBar

Altere as propriedades do componente de acordo com a tabela. Experimente vrios formatos de borda e deixe-os da maneira que voc achar mais adequada. Vamos inserir os botes. Para isso clique com o boto direito do mouse no componente ToolBar e selecione a opo New Button. Inclua dois botes. Ao primeiro d o nome de tbuFonte e ao segundo d o nome de tbuFundo. Agora insira um separador clicando com o boto direito do mouse e selecionando New Separator. Insira trs botes em seguida e d a eles os nomes: tbuEsquerda, tbuCentro e tbuDireita. Os botes que compem barras de ferramentas possuem imagens e no captions. Portanto vamos inserir imagens nos nossos botes. Selecione o componente TImageList da aba Common Controls e o coloque no form em qualquer posio. D um duplo clique no ImageList e pressione o boto Add. Selecione um cone para cada boto. Depois de escolher imagens para os botes clique na barra de ferramentas e na propriedade Images selecione ImageList1. Cada uma das imagens escolhidas ser inserida em um boto conforme mostra a Figura 62. 76

Lazarus/Free Pascal para iniciantes

Figura 62 Barra de ferramentas Vamos reutilizar os mtodos programados para os eventos OnClick dos botes que foram excludos. Selecione o primeiro boto da barra de ferramenta, tbuFonte. Selecione a aba Events do Object Inspector e no evento OnClick selecione o mtodo btnFonteClick pressionando o boto ao lado direito do nome do evento. Para o boto tbuFundo selecione o mtodo tbuFundoClick. Execute a aplicao e clique nos dois botes da barra de ferramentas. Os dois devem chamar a caixa de dialogo de cores. Iremos repetir o procedimento para os outros trs botes da nossa barra de ferramentas. Assim, para o boto tbuEsquerda vamos selecionar o mtodo btnEsquerdaClick. Para o boto tbuCentro selecione o mtodo btnCentroClick. E para o boto tbuDireita selecione o mtodo btnDireitaClick. Vamos excluir os mtodos criados para os botes btnEsquerda, btnCentro e btnDireita. Para isso acesse o cdigo de cada mtodo no editor e exclua apenas a linha que voc digitou. Quando o programa for compilado, os mtodos e todas as referncias a eles sero eliminadas. O procedimento adotado para programar os eventos OnClick dos botes se deveu apenas ao reaproveitamento do cdigo que j existia para os botes anteriores. Mas se precisarmos escrever um mtodo novo procedemos da maneira j exposta anteriormente. Um duplo clique no boto e o editor aberto na posio onde o cdigo deve ser inserido. Como os eventos OnClick dos botes foram programados para responder aos mesmos eventos dos comandos de menu, pressionar o boto tem o mesmo efeito de selecionar o comando. S precisamos de uma indicao visual da opo de alinhamento que est selecionada no momento.Vamos configurar os botes de alinhamento para que eles operem como botes de rdio. necessrio formar um grupo com os botes que sero tratados como botes de rdio. Altere a propriedade Grouped dos trs botes de alinhamento para True. Modifique a propriedade Style dos botes para tbsCheck. Definimos que o alinhamento esquerda o padro, portanto vamos alterar a propriedade Down de tbuEsquerda para True. Execute o programa e clique nos botes para ver os efeitos. 77

Lazarus/Free Pascal para iniciantes Note que ao pressionarmos um boto de alinhamento do texto ele permanece pressionado at que selecionemos outro. Mas quando selecionamos o alinhamento do texto a partir de um comando de menu o comportamento dos botes no se alteram. Para solucionar esse problema vamos incluir um comando no mtodo que fora o pressionamento do boto. Inclua ento a seguinte linha no mtodo Esquerda1Click: tbuEsquerda.Down := True; Faa o mesmo nos mtodos Centro1Click e Direita1Click para os botes tbuCentro e tbuDireita. Para finalizar, vamos modificar o cdigo do mtodo correspondente ao comando Exibir | Barra de ferramentas. Altere para o seguinte cdigo: tbBarra.Visible := not tbBarra.Visible; Barradeferramentas1.Checked := tbBarra.Visible; Observe que apenas mudamos o nome do painel panBarra para tbBarra, o componente ToolBar, no cdigo do mtodo.

Barra de status (TStatusBar)


A barra de status usada para apresentar inmeras informaes ao usurio. 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 aplicao Menus. No importa onde voc insere o StatusBar, o Lazarus sempre o posiciona na base da janela. Iremos modificar algumas propriedades da barra de status de acordo com o quadro abaixo: Propriedade Name Panels SimpleText Contedo stbMenu Descrio Identificador da barra de status Define os painis que constituem o componente Define um texto que aparecer na barra de status Quadro 15 Propriedades de StatusBar

Uma barra de status pode ter vrios painis que agrupam informaes relacionadas. Vamos dividir esta barra em dois painis. Clique no boto elipse ao lado direito da propriedade Panels. Isso ir abrir o editor de painis. Adicione dois painis pressionando o boto Add na parte superior do editor ou teclando Insert. O Lazarus guarda as informaes sobre os painis do StatusBar em um array. O primeiro painel chamado stbMenu.Panels[0] e o segundo stbMenu.Panels[1]. Lembre que o Lazarus sempre considera os ndices dos arrays iniciando em 0. Cada painel um objeto do tipo TStatusPanel. Portanto possui propriedades. Altere as propriedades de stbMenu.Panels[0] conforme o quadro: Propriedade Contedo Descrio Alignment taLeftJustify Define o alinhamento do texto mostrado Style psText Define como o texto mostrado no painel Text Desenvolvido por Joo da Define o texto que ir aparecer no painel 78

Lazarus/Free Pascal para iniciantes Silva 400 Define a largura do painel Quadro 16 Propriedades de TStatusPanel

Width

Para alterar as propriedades de um painel, abra o editor de painis dando um duplo clique na barra de status e depois selecione o painel desejado. O Object Inspector mostrar as propriedades desse painel. A propriedade Style permite que as configuraes do texto mostrado no painel sejam definidas pelo programador atravs de um manipulador de evento, mas vamos adotar psText para essa propriedade. Isso indica que o alinhamento do texto dado pela propriedade Alignment e a fonte determinada pela propriedade Font de StatusBar. A propriedade Width define a largura do painel. medida que aumentamos o valor da propriedade Width do painel esquerdo, o painel direito tem sua largura diminuda. No segundo painel mostraremos a hora corrente. O evento mais indicado para isso o OnShow do form. Esse evento acontece quando a janela mostrada. exatamente isso que queremos: apresentar a hora no momento em que a janela for aberta. Note que os componentes adicionados ao form no permitem que ele seja selecionado. Vamos ento mostrar outra maneira de selecionarmos um componente. No Object Inspector existe uma rvore hierrquica de componentes no topo da janela, conforme mostra a Figura 63.

Figura 63 rvore de componentes Clique no nome do form, frmMenus. Note que as propriedades que esto sendo visualizadas so do form. Agora clique na aba Events e d um duplo clique no evento OnShow. No editor de cdigo digite: 79

Lazarus/Free Pascal para iniciantes stbMenu.Panels[1].Text := TimeToStr(Time); Este cdigo converte a hora atual para string e a atribui propriedade Text do segundo painel da barra de status. Execute o programa. Muito bom, mas voc deve ter observado que a hora esttica. Ou seja, a aplicao mostra a hora do instante que a janela aberta, e no se altera dai em diante. Para que a hora seja mostrada a cada segundo necessrio um novo componente: o Ttimer, localizado na aba System. Esse componente tem um evento, chamado OnTimer, que acontece a determinados intervalos de tempo. isso que queremos: mostrar a hora a cada segundo. Vejamos ento as propriedades e evento de Timer. Propriedade Enabled Interval Name Evento OnTimer Contedo True 1000 timHora Descrio Habilita o componente Determina o intervalo de tempo (milissegundos) Nome do componente Descrio Ocorre a cada intervalo definido por Interval Quadro 17 Propriedades de StatusBar

A linha de cdigo anterior, que foi programada para o evento OnShow do form, deve ser executada no evento OnTimer. Para no reescrevermos o cdigo selecione o evento na aba Events, clique no boto da caixa combinada e escolha o mtodo FormShow. Execute o programa. Voc ir observar um relgio digital na barra de status.

Figura 64 Barra de status

80

Вам также может понравиться