Академический Документы
Профессиональный Документы
Культура Документы
Santarm 2010
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
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
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
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.
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
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
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:
16
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.
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.
18
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.
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
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
22
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
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
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
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
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.
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
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
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
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.
36
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.
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.
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.
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
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.
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
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.
45
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.
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.
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
Figura 41 Componente GroupBox Basicamente alteraremos a as propriedades Name e Caption. Defina Name como gbDados e Caption como Dados Pessoais.
50
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.
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
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
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
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
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.
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
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
64
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.
67
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
70
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.
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.
75
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
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.
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.
80