Lazarus Tutorial

50
Sistemas de Informação Introdução à ferramenta Lazarus [email protected] – Versão de 2010 / Maio / 12 MIEEC 3º ano Introdução A ferramenta “Lazarus” é uma ferramenta de programação potente e complexa, que vai ser utilizada como ambiente de desenvolvimento integrado (IDE) para a linguagem Free Pascal (FPC). A ferramenta em causa é totalmente “cross platform” e está instalada nas máquinas do CICA, na FEUP nos Sistemas Operativos S.O. Windows e em Linux. Este tutorial introdutório abordará apenas o IDE do Lazarus e a introdução à “Programação Visual”, Programação Orientada a Eventos (POE). Neste tutorial será apresentado o IDE e as principais ideias chave que permitirão ao aluno posteriormente continuar a aprendizagem com autonomia superior. Na leitura inicial deste tutorial, não salte passos nem se afaste demasiado dos passos mencionados. O aluno pode e deve repetir o guião já depois de ter uma percepção mais completa do funcionamento de conjunto de todos os elementos envolvidos e nessa fase dedicar-se a uma exploração mais abrangente. Não se esqueça de consultar sempre que necessário o capítulo final "Listagem de Teclas e funcionalidades" , na pág. 50. Bom Trabalho! Armando Sousa Índice Introdução .............................................................................................. 1 Tutorial ................................................................................................. 2 Exercícios de Lazarus ................................................................................ 35 Ligação do Lazarus à Base de Dados PGSQL ..................................................... 39 Alguns Comandos SQL (micro resumo) ............................................................ 45 FAQ Lazarus Sistemas de informação ............................................................. 47 Listagem de Teclas e funcionalidades ............................................................. 50 Introdução ao Lazarus FEUP - DEEC Pág 1

Transcript of Lazarus Tutorial

  • Sistemas de InformaoIntroduo ferramenta [email protected] Verso de 2010 / Maio / 12

    MIEEC

    3 ano

    IntroduoA ferramenta Lazarus uma ferramenta de programao potente e complexa, que vai ser utilizada como ambiente de desenvolvimento integrado (IDE) para a linguagem Free Pascal (FPC). A ferramenta em causa totalmente cross platform e est instalada nas mquinas do CICA, na FEUP nos Sistemas Operativos S.O. Windows e em Linux. Este tutorial introdutrio abordar apenas o IDE do Lazarus e a introduo Programao Visual, Programao Orientada a Eventos (POE).

    Neste tutorial ser apresentado o IDE e as principais ideias chave que permitiro ao aluno posteriormente continuar a aprendizagem com autonomia superior.

    Na leitura inicial deste tutorial, no salte passos nem se afaste demasiado dos passos mencionados. O aluno pode e deve repetir o guio j depois de ter uma percepo mais completa do funcionamento de conjunto de todos os elementos envolvidos e nessa fase dedicar-se a uma explorao mais abrangente.

    No se esquea de consultar sempre que necessrio o captulo final "Listagem de Teclase funcionalidades" , na pg. 50.

    Bom Trabalho!

    Armando Sousa

    ndiceIntroduo .............................................................................................. 1

    Tutorial ................................................................................................. 2

    Exerccios de Lazarus ................................................................................ 35

    Ligao do Lazarus Base de Dados PGSQL ..................................................... 39

    Alguns Comandos SQL (micro resumo) ............................................................ 45

    FAQ Lazarus Sistemas de informao ............................................................. 47

    Listagem de Teclas e funcionalidades ............................................................. 50

    Introduo ao Lazarus FEUP - DEEC Pg 1

  • Tutorial

    1 - Criao do projecto inicial Form com 1 boto

    1.1 - Arranque o seu PC com o sistema operativo que preferir, windows ou linux e no sistema operativo, arranque o Lazarus

    Windows -> Departamentos -> DEEC -> Lazarus

    Linux -> Desenvolvimento -> Lazarus

    1.2 - Dentro do Lazarus seleccione, Project -> New Project; aparecer a seguinte caixa de dilogo:

    1.3 - Seleccione Application e prima Create; acabou de criar um novo projecto vazio para desenvolver uma nova aplicao grfica.

    1.4 - O ambiente integrado de desenvolvimento (IDE) do lazarus aparecer; este IDE constitudo por diversas partes, cada uma em sua janela:

    Por cima, a barra de menus e de componentes

    Do lado esquerdo, a listagem da rvore de componentes e das respectivas propriedades (object inspector)

    Ao centro o editor de cdigo Source Editor (onde se escreve o cdigo!)

    Na figura abaixo representa-se direita a form em design-time

    Por baixo aparece a caixa de mensagens (onde vo aparecer erros de compilao, etc)

    Introduo ao Lazarus FEUP - DEEC Pg 2

  • As janelas no tero o aspecto mostrado; altere as posies e dimenses das janelas para reflectir um aspecto similar ao mostrado acima; pode, no entanto, modificar o aspecto de cada uma das janelas ao seu gosto

    1.5 - Insira um boto na form, para isso:

    1.5.1 - Clique no componente TButton, dentro do separador Standard:

    1.5.2 - Clique na form:

    1.6 - O boto que acabou de criar foi automaticamente chamado de Button1; faa duplo clique em cima dele e ser conduzido at ao cdigo a executar quando se carregar no boto (dentro do source editor):

    Introduo ao Lazarus FEUP - DEEC Pg 3

  • 1.7 - Dentro do begin e antes do end, escreva o cdigoButton1.Caption:='Ol Mundo';este cdigo altera o texto associado ao boto para que este passe a ser Ol Mundo; o boto chama-se Button1 e o texto dentro deste boto pertence-lhe e acessvel atravs de Button1.Caption; para atribuir uma cadeia de caracteres (uma string) ao texto dentro deste boto utiliza-se o cdigo mencionado; a atribuio faz-se com o operador := e a string identificada como estando entre 'plicas' (cuidado, 'plicas' no so "aspas" ); pode-se trocar maisculas e minsculas; o aspecto no IDE ser prximo do mostrado de seguida:

    O cdigo que acaba de escrever fica guardado dentro de uma unit do FPC

    1.8 - Escolha no menu File -> Save All e grave todos os ficheiros numa directoria criada para o efeito numa qualquer localizao no disco local (no utilize drives em rede pois a criao do executvel fica muito lenta). Aceite as os nomes por omisso (default) em minsculas.

    1.9 - Execute o programa premindo a tecla F9 ou menu Run -> Run e observe o desenrolar das mensagens na janela de mensagens: primeiro vm a mensagem da invocao do compilador do FPC; se no existirem erros, ento vir a mensagem linking assinalando o processo de construo do executvel e depois a mensagem de sucesso:

    1.10 - O programa que acaba de ser criado ento executado pelo S.O. e aparece a janela do primeiro programa sob Lazarus:

    1.11 - Prima o boto com o rato e observe que o texto associado ao boto se modificou para:

    Introduo ao Lazarus FEUP - DEEC Pg 4

  • 1.12 - Redimensione e mova a janela do programa para se assegurar que esta janela do programa se comporta como qualquer outra aplicao do S.O.

    1.13 - Feche a aplicao premindo o do canto superior direito da janela do programa que vem sendo executado

    1.14 - Ideias a reter: O Lazarus permite fazer aplicaes grficas para S.O. grficos e orientados a

    eventos Este projecto inclui uma parte grfica (a form) e uma parte de cdigo escrito

    FPC (a unit) A programao inclui desenhar a form que depois ser executada e o cdigo que

    ser executado quando se carregar no boto durante a execuo do programa A execuo do programa faz aparecer a janela anteriormente desenhada dentro do

    IDE do lazarus; quando se carrega no boto, chamado cdigo que escrevemos no programa

    A janela que desenhada no IDE do lazarus antes da execuo pelo SO denomina-se de form em tempo de desenho (design-time); esta mesma form aparece em tempo de execuo (em run-time); comparar as figuras 1.5.2 e 1.9

    A aplicao criada uma das muitas que est a ser executada pelo S.O. Relativamente ao cdigo FPC, convm reter:

    Atribuio com o operador := Para aceder a propriedades, utilizar ., por exemplo Button1.Caption O FPC insensvel a maisculas e minsculas Cadeias de caracteres (strings) dentro de 'plicas'; no mudar de linha dentro de

    uma cadeia de caracteres

    1.15 - Exerccio Livre Crie e teste uma nova aplicao que execute o cdigo ShowMessage('Ol Mundo!!!');

    Introduo ao Lazarus FEUP - DEEC Pg 5

  • 2 - Criao de projecto com dois botes

    2.1 - Regresse ao IDE do Lazarus para alterar o projecto anterior

    2.2 - Se a Form1 no estiver visvel, escolha View -> Forms -> Form1 -> OK

    2.3 - Acrescente um outro boto nossa janela:

    2.4 - Observe o Object Inspector e confirme que a nossa janela, a form, tem o nome Form1; o primeiro boto chama-se Button1 e o segundo Button2; naturalmente ambos botes esto dentro da Form1.

    2.5 - Faa duplo clique no boto 2; o cursor aparecer no source editor, dentro do procedimento Button2Click, i.e., o procedimento que ser chamado quando se carregar no boto 2; acrescente o seguinte cdigo: ShowMessage('Ol Mundo');A janela do editor deve-se parecer com:

    2.6 - Prima File -> Save All

    2.7 - Prima F9 para executar o projecto e se no houver erros, este ser executado, aparecendo a form em run-time:

    2.8 - Prima o Button1 e confirme a alterao:

    Introduo ao Lazarus FEUP - DEEC Pg 6

  • 2.9 - Prima o Button2 e veja o aparecimento da seguinte caixa:

    2.10 - Feche a aplicao com

    2.11 - Regresse ao IDE lazarus e prima F12 at ver a form em design time

    2.12 - Faa duplo clique no Button1; o cursor aparecer no source editor, dentro do procedimento Button1Click; prima F12 para alternar source e form e depois faa duplo clique no Button2 para o cursor aparecer dentro do procedimento Button2Click; navegue no source editor at achar o procedimento Button1Click:

    2.13 - Exerccio Livre - Adicione um terceiro boto que quando for carregado mostre uma caixa com a mensagem Bom dia, FEUP!

    2.14 - Ideias a reter: A form do projecto, chamada Form1, passou a ter dois botes, Button1 e Button2 A unit passou a ter, entre outros elementos de cdigo, os procedimentos

    Button1Click e Button2Click

    Os dois botes so instncias de objectos do tipo TButton; diz-se que TButton uma classe; geralmente, classes e tipos so identificados comeando pela letra T

    Cada boto tem o seu respectivo procedimento de resposta ao clique em run-time, Button1Click e Button2Click que so diferentes e no se confundem

    o S.O. que se encarrega de chamar a rotina certa de cada vez que, em run-time, se carrega em determinado boto, isto , o S.O. que gera os eventos e chama rotinas no programa que se vem criando da este tipo de programao se designar Programao Orientada a Eventos

    Introduo ao Lazarus FEUP - DEEC Pg 7

  • 3 - Alterando nomes e propriedades de componentes

    3.1 - No Object Inspector seleccione o Button1 e depois o separador Properties; neste separador que se pode ver e alterar todas as propriedades (atributos) do objecto seleccionado actualmente; estas propriedades so listadas por ordem alfabtica; a figura seguinte mostra algumas propriedades do Button1:

    3.2 - Seleccione agora o separador Events; este separador mostra todos os eventos disponveis para os botes TButton, isto , todos os acontecimentos relacionados com instncias ; o nico campo preenchido Button1Click; Confirme o mesmo para os eventos de Button2 o nico evento listado Button2Click

    3.3 - Seleccione agora o separador Favorites; este separador tem o resumo das propriedades e dos eventos mais visitados e frequentemente mais utilizados

    Introduo ao Lazarus FEUP - DEEC Pg 8

  • 3.4 - O resumo das propriedades dos botes so apresentadas de seguida:

    Mude o nome do Button1 para BChangeCaption e do boto 2 para BShowBox; mude apenas a propriedade Name do Button1 e do Button2; depois das mudanas o Object Inspector mostrar:

    E o cdigo ser automaticamente alterado para:

    Introduo ao Lazarus FEUP - DEEC Pg 9

  • 3.5 - Altere agora as Captions dos botes, tal como nas seguintes figuras:

    Observe como as mudanas nas propriedades dos botes ficam efectivas imediatamente e a Form em Design Time imediatamente alterada para reflectir as mudanas

    3.6 - Seleccione a form no Object Inspector para ver as suas propriedades:

    Modifique texto associado Form, isto , a sua propriedade Caption para FEUP; note que a caption da form nada tem que ver com a caption de cada um dos botes. O Object Inspector reflectir as mudanas e a Form passar a ostentar a nova inscrio:

    3.7 - Escolha File -> Save All

    3.8 - Execute a nova verso do projecto com F9 para verificar as diferenas

    Introduo ao Lazarus FEUP - DEEC Pg 10

  • 3.9 - Ideias a reter: Os nomes dos componentes tal como botes devem ser descritivos Aps mudana do nome dos componentes, o cdigo vem alterado automaticamente Todos as instncias TButton (isto , todos os botes) devem comear pela letra B

    - isto permitir mais tarde que todos os botes sejam facilmente localizaveis Mudanas em propriedades de componentes visuais so visveis desde logo em

    design-time - da esta programao ser Visual Tanto a Form como cada um dos botes tem uma dada Caption - este conceito

    chama-se polimorfismo; h muitos componentes com propriedades iguais para funcionalidades similares repare que Form.Caption e Button.Caption so conceitos similares para classes diferentes

    Introduo ao Lazarus FEUP - DEEC Pg 11

  • 4 - Aplicao com Edit e Check Box

    4.1 - Crie um novo projecto de aplicao (Project -> New project -> Application; para mais detalhes veja 1.2)

    4.2 - Arranje as janelas a seu gosto (por exemplo, tal como mostrado em 1.4)

    4.3 - Escolha no menu File -> Save All e grave todos os ficheiros numa outra directoria diferente da anterior; no utilize drives em rede pois a criao do executvel fica muito lenta; utilize os nomes myunit.pas e project2.lpi (utilize minsculas); deste forma todos os ficheiros deste novo projecto ficam na nova directoria; o Lazarus utiliza e cria diversos ficheiros que so mantidos sem interveno humana

    4.4 - Acrescente um TEdit Form:

    A classe TEdit fornece a funcionalidade de uma caixa de edio de texto standard do S.O. (texto genrico de uma linha apenas).

    4.5 - Acrescente um TCheckBox Form:

    A classe TCheckBox fornece a funcionalidade de uma caixa de escolha Verdadeiro/Falso que uma funcionalidade padro dos S.O..

    4.6 - Altere as propriedades da CheckBox tal como se mostra a seguir:

    Caption: &Alterar - o & define uma tecla de atalho que pode ser utilizada em Run-Time

    Checked: True - Duplo Clique no False muda para True e vice versa)

    Name: CBAllowChange

    Note que a Check Box um controlo standard do S.O. mas a forma exacta da Check Box e a forma exacta do visto ou da cruz que aparece para indicar que esta opo est validada depende de configuraes do S.O..

    Introduo ao Lazarus FEUP - DEEC Pg 12

  • 4.7 - Altere as propriedades da Edit1 tal como se mostra a seguir:

    Name: EditMyText

    Text: FEUP

    4.8 - Verifique na listagem das propriedades que existe uma propriedade chamada ReadOnly, que pode apresentar os valores verdadeiro e falso; esta propriedade permite que em run-time seja possvel alterar o texto deste componente (mantenha ReadOnly igual a False):

    4.9 - Altere a Caption da Form para passar a dizer FEUP

    4.10 - Faa duplo clique em cima da check box para criar e chamar o procedimento CBAllowChangeChange; este procedimento ser chamado sempre que se clicar sobre a check box; escreva edit e prima CTRL+SPACE para activar a funcionalidade de Completion, isto , completar o cdigo automaticamente; esta opo abre uma caixa de seleco das possibilidades de escrita; prima Enter para seleccionar a opo certa (EditMyText) e ver o texto EditMyText aparecer sem ter de escrever mais do que as primeiras letras!

    4.11 - Utilize esta tcnica para ajudar a escrever o texto:

    Introduo ao Lazarus FEUP - DEEC Pg 13

  • 4.12 - Grave todos os ficheiros premindo e de seguida prima para executar a aplicao; ambos os comandos esto situados na barra de atalhos; estes atalhos equivalem a File->Save All e Run->Run

    4.13 - H algum problema com esta aplicao ?

    4.14 - Altere o cdigo de CBAllowChangeChange para

    Repare que CBAllowChange o nome da CheckBox e CBAllowChangeChange o nome do procedimento que chamado no evento OnChange desta check Box

    4.15 - Grave e execute para perceber as alteraes e respectivo motivo.

    4.16 - Qual a aplicao que o utilizador final do nosso programa acharia mais intuitivo de utilizar, a aplicao 4.12 ou a 4.14 ?

    4.17 - Acrescente um boto com o nome BUpdate e a caption Actuali&zar

    4.18 - Faa duplo clique no boto e escreva tal como mostrado de seguida:

    4.19 - Grave todos os ficheiros premindo e execute com

    4.20 - Experimente aceder aos controlos visuais atravs do teclado, utilizando teclas de atalho ALT+A e ALT+Z

    Introduo ao Lazarus FEUP - DEEC Pg 14

  • 4.21 - Ideias a Reter: Foi utilizada uma edit box chamada EditMyText; boa prtica todas as edit boxes

    terem o prefixo Edit Foi utilizado uma CheckBox chamada CBAllowChange; boa prtica todas as

    CheckBox's terem o prefixo CB Quando o programa arranca, possvel alterar o texto do componente EditMyText

    pois a sua propriedade ReadOnly foi definida em design time como False e por esse motivo, ao arrancar o programa esta propriedade continua a False

    O componente CBAllowChange foi definido em design-time como estando seleccionado e por isso no arranque esta caixa apresenta-se seleccionada: Checked a True

    O texto associado caixa de escolha refere Alterar pelo que ser intuitivo que quando esta caixa estiver seleccionada, ser possvel alterar o contedo da caixa de edio de texto; em termos de programao s temos acesso s propriedades EditMyText.ReadOnly e CBAllowChange.Checked o que obriga utilizao da negao booleana: EditMyText.ReadOnly:=not(CBAllowChange.Checked);

    Se o texto associado check box dissesse Impedir alterao, ento j faria sentido o cdigo EditMyText.ReadOnly:=CBPreventChanges.Checked;!

    Lembre-se que o utilizador final no o programador da aplicao e que o utilizador final apenas ler o texto que estiver na form que deve conduzir a uma utilizao fcil, intuitiva e com lgica da aplicao que estamos a criar !

    Note ainda que o nome do procedimento a ser chamado no evento o nome do componente concatenado com o nome do evento, por exemplo: o componente CBAllowChange chama para o evento OnChange o procedimento CBAllowChangeChange

    Introduo ao Lazarus FEUP - DEEC Pg 15

  • 5 - Utilizao do evento OnChange da classe TEdit

    5.1 - Faa duplo clique em cima da caixa de edio de texto (EditMyText) para definir o evento OnChange abrir o procedimento EditMyTextChange e modifique-o tal como indicado:

    5.2 - Escolha File -> Save All e depois Run->Run para executar o projecto

    5.3 - Ideias a reter: O evento TEdit.OnChange chamado sempre que a caixa de texto for modificada,

    por exemplo, a cada tecla premida; o cdigo deste evento muda a form.caption para o texto da EditMyText e desta forma no necessrio carregar no boto para fazer a actualizao que se tornou Automtica!

    No executado nenhum cdigo da aplicao fora dos eventos reconhecidos Seria muito errado por um ciclo infinito a verificar se ocorreram mudanas no texto Neste momento h cdigo repetido no nosso programa (Form1.Caption :=

    EditMyText.Text); cdigo repetido sempre mau e deve ser evitado !

    Introduo ao Lazarus FEUP - DEEC Pg 16

  • 6 - Utilizao de procedimentos e escrita rpida (Code Templates, Completion e Parameter CheckOut)

    6.1 - Procure no cdigo da unidade myunit.pas o procedimento CBAllowChangeChange; logo acima desse cdigo e fora de qualquer procedimento (que comeam por begin e terminam em end), escreva proc

    Prima CTRL+J para activar a funcionalidade de Code Templates:

    Preencha com o restante texto, tal como indicado de seguida:

    Este cdigo define um procedimento (uma funo que no devolve nada) e que recebe como parmetro de entrada uma varivel com o nome StringIn do tipo string

    6.2 - Faa duplo clique em cima da Edit e ser conduzido ao cdigo relativo ao evento EditMyTextChange; escreva actu e prima CTRL+SPACE:

    Prima depois disso CTRL+Shift+Space para ver os argumentos que a funo ou o procedimento esperam (ver texto flutuante directamente por cima do cursor):

    Neste caso o procedimento espera um parmetro com o nome StringIn do tipo String (cadeia de caracteres)

    Introduo ao Lazarus FEUP - DEEC Pg 17

  • 6.3 - Complete tal como mostrado (deve ir utilizando a funcionalidade de completao automtica de cdigo CTRL + SPACE):

    6.4 - Navegue no cdigo at encontrar o procedimento BUpdateClick e altere de acordo com o seguinte:

    6.5 - Neste momento os procedimento EditMyTextChange e BUpdateClick chamam um outro procedimento chamado Actualiza que centraliza o processo de actualizao

    6.6 - Grave e execute para verificar que o conjunto funciona.

    6.7 - Exerccio Livre: Adicione mais outra Check Box com nome e caption adequados; altere a aplicao para implementar a funcionalidade de a actualizao ser automtica apenas quando a caixa de seleco estiver activa; quando inactiva necessrio premir o boto para actualizar a form

    6.8 - Exerccio Livre: Modifique a aplicao de tal forma que a caption da form seja o texto da edit repetido com um espao de permeio; para ter trabalho mnimo, onde deve inserir as modificaes ???

    6.9 - Ideias a reter:

    O evento OnChange do componente TEdit chama o procedimento chamado Actualiza que muda a Form.Caption

    Foi criado um procedimento para evitar repetio de cdigo e o exerccio 6.8 beneficia desse facto

    A escrita de cdigo FPC/Lazarus vm facilitada atravs de diversas tcnicas Code Templates atalho CTRL + J Code Completion atalho CTRL + SPACE Parameter CheckOut atalho CTRL + SHIFT + SPACE

    Introduo ao Lazarus FEUP - DEEC Pg 18

  • 7 - Navegao no cdigo e form/cdigo

    7.1 - Prima CTRL+Home por exemplo para relembrar que o nome da unidade myunit

    7.2 - Prima CTRL+H para regressar ao ponto de edio anterior

    7.3 - Mantenha CTRL premido e clique com o rato em cima do texto TForm1, que aparece sublinhado:

    7.4 - Com este clique, o cursor ser levado at parte superior da unidade myunit, onde se define o tipo da Form1 chamado TForm1; aqui que se lista os componentes que esto dentro da form:

    Este cdigo refere que a Form1 inclui um TButton com nome CBAllowChange

    7.5 - Depois do end que indica o final da declarao do tipo TForm, aparece a instanciao da form propriamente dita com Var Form1 : TForm1 indicando que Form1 da classe TForm1.

    7.6 - Navegue com o cursor at linha onde se declara um qualquer dos procedimentos da form e prima CTRL + Shift + seta_para_baixo para ser levado at implementao desse procedimento ou funo; prima CTRL + Shift + seta_para_cima ou CTRL + H para ir de novo para a declarao; exercite para perceber

    Introduo ao Lazarus FEUP - DEEC Pg 19

  • 7.7 - Encontre o Cdigo seguinte, mantenha CTRL premido e clique em StringIn para ser conduzido declarao respectiva;

    7.8 - Experimente o mesmo com EditMyText, que est dentro da Form

    7.9 - Prima F12 para ser levado at Form

    7.10 - Apague o boto

    7.11 - Prima F12 de novo para ver que na declarao da form deixou de constar o boto

    O cdigo do boto BUpdateClick mantm-se mas no ser nunca chamado.

    Introduo ao Lazarus FEUP - DEEC Pg 20

  • 7.12 - Ideias a reter: As alteraes feitas na Form mudam o cdigo da respectiva unit Existe a possibilidade de ter cdigo que nunca chamado Quem decide que cdigo executado e por que ordem o S.O. que chama a rotina

    dentro da aplicao de acordo os eventos gerados, por incluindo as ordens do utilizador

    A uma Form corresponde um tipo de form (Tform) Uma Form est numa unidade de cdigo (unit); a unidade e a form podem ter nomes

    quaisquer desde que sejam diferentes !!! Geralmente uma unit s tem uma form Uma unit pode ter uma form ou no (unit pode ser visual ou no) Obs: Nem todas as informaes da Form so mantidas dentro da unidade existem

    outras informaes, guardadas noutros ficheiros Por segurana e facilidade de utilizao, criar uma directoria nova para cada projecto

    Lazarus e guardar todos os ficheiros desse projecto nessa mesma directoria Nunca alterar cdigo que no foi feito por ns! Navegao:

    F12 troca entre form e cdigo F11 activa o object inspector CTRL + Clique leva declarao de alguma coisa CTRL + SHIFT + cima e CTRL + SHIFT + baixo trocam entre declarao e

    implementao de procedimentos e funes

    Introduo ao Lazarus FEUP - DEEC Pg 21

  • 8 - Aplicao com RadioGroup e Memo

    8.1 - Crie um novo projecto de aplicao: Project->New Project->Application ->Create

    8.2 - Desenhe a seguinte Form que contm um TRadioGroup e um TMemo, ambos situados no separador Standard:

    8.3 - Encontre a propriedade Lines do Memo, entre dentro desta qudrcula e depois aparecer um boto com ...; prima este boto (mostrado de seguida) no Object Inspector e altere as linhas da Memo para FEUP e na linha seguinte DEEC.

    Tal como pode ver, uma memo box uma caixa de texto que permite mltiplas linhas. A propriedade Lines do tipo TStrings que permite conter um texto com diversas linhas.

    Introduo ao Lazarus FEUP - DEEC Pg 22

  • 8.4 - Encontre a propriedade Items do Radio Group, prima ... e insira Primeiro e Segundo; depois disso modifique Item Index para 0 note que o Item Primeiro passou a estar escolhido; deve ter reparado que este mais um componente padro do S.O.

    8.5 - Faa duplo clique no Radio Group, acrescente tal como mostrado de seguida e depois prima CTRL+Shift+Space para ver as listas parmetros que esta funo aceita:

    Para a funo IntToStr, os argumentos podem ser de diversos tipos (mas sempre inteiros)

    8.6 - Complete como de seguida:

    8.7 - Grave e execute para testar as funcionalidades: quando se muda a seleco no radio group, acrescentada uma linha de texto que descreve o que est seleccionado.

    Introduo ao Lazarus FEUP - DEEC Pg 23

  • 8.8 - Acrescente ainda um Boto com caption Descreve e com nome BDescribe

    8.9 - Faa com que o evento OnClick do Radio Group e o OnClick do boto chamem a funo DescribeRadioGroup que se mostra de seguida; note que como a funo externa Form1, necessrio acrescentar a noo de que todos os controlos visuais que temos vindo a manipular esto dentro da Form1 e por isso necessrio indicar Form1.Memo1.Lines.Append:

    8.10 - Grave e execute para testar todas as funcionalidades

    Introduo ao Lazarus FEUP - DEEC Pg 24

  • 8.11 - Exerccio livre: Modifique a form para que passe a ter a configurao indicada de seguida; utilize o novo boto para acrescentar um item em run time ao RadioGroup (utilize a funo RadioGroup.Items.Append para acrescentar items em run-time)

    8.12 - Ideias a reter: O controlo visual RadioGroup escolhe no mximo uma de diversas opes Cada opo do RadioGroup pertence a um TStrings chamado Items O Item escolhido actualmente indicado pela propiedade ItemIndex (-1 significa

    nada escolhido, 0 o primeiro item, etc) perfeitamente possvel ter items iguais uma vez que os items so numerados Os items podem ser indicados em design time, no object inspector mas tambm

    podem ser acrescentados em run-time Para acrescentar items ao RG, utilizar RadioGroupName.Items.Append(...) As caixas de texto (TMemo) permitem ter diversas linhas de texto; o texto dentro da

    caixa de texto ,isto , as suas linhas, so tambm TStrings com o nome Lines Para acrescentar linhas ao Memo, utilizar MemoName.Lines.Append(...) A funo Append chamada em ambos os casos pertence classe TStrings que est

    tanto no RG.Items como no Tmemo.Lines Quando utiliza uma funo fora da form, para aceder aos controlos visuais da form,

    necessrio escrever explicitamente Form1.ControloVisual

    Introduo ao Lazarus FEUP - DEEC Pg 25

  • 9 - Temporizador

    9.1 - Crie uma nova aplicao

    9.2 - Insira uma caixa de edio de texto TEdit e um boto TButton.

    9.3 - Faa com que o texto inicial no arranque da aplicao seja 0 (zero)

    9.4 - Faa com que a cada presso do boto seja executado o seguinte cdigo:Edit1.Text:= Edit1.Text+'!';

    9.5 - Grave o projecto numa directoria adequada e execute

    9.6 - Confirme que a cada presso do boto um ponto de exclao acrestado

    9.7 - Modifique agora o evento OnClick do boto para: Edit1.Text:=IntToStr(StrToIntDef(Edit1.Text,0)+1);Este cdigo converte o texto do Edit1 para um nmero inteiro, soma 1 e pe o resultado de volta no mesmo texto, sob a forma de string.

    9.8 - Grave e execute para confirmar que a cada presso do boto, o nmero na edit box incrementado

    9.9 - De seguida acrescente um temporizador TTimer (separador System) form:

    9.10 - Faa duplo clique em cima do timer que acabou de colocar na form para ser levado ao evento 'OnTimer' e preencha dentro do procedimento Timer1Timer o seguinte cdigo com a chamada: Button1Click(Sender);Este cdigo ser chamado peridicamente pelo timer e chama a rotina de presso do boto.

    9.11 - Grave e execute - note que a numerao incrementada todos os segundos automaticamente e ainda sempre que se premir o boto; note que o timer desaparece em run-time (mas as funcionalidades esto l!)

    9.12 - Altere agora a propriedade Timer1.interval para 2000

    9.13 - Execute para ver que o nmero incrementado a cada 2 segundos.

    Introduo ao Lazarus FEUP - DEEC Pg 26

  • 9.14 - Exerccio Livre: Adicione uma check box CBEnable que quando seleccionada permite o funcionamento do incremento automtico; a check box deve aparecer inicialmente seleccionada; Dica: Utilize Timer1.Enabled:=...

    9.15 - Ideias a reter: Quando no h eventos, no h cdigo da aplicao a ser executado Os temporizadores normais do Lazarus / Windows so pouco precisos e aconselha-

    se tempos sempre superiores a 0.1 segundos

    10 - Menu da aplicao

    10.1 - Acrescente aplicao anterior um TMainMenu do separador standard

    10.2 - Faa duplo clique em cima dele para abrir o editor de menus:

    10.3 - Clique em cima de New Item1 e altere caption para &File

    10.4 - Em cima de File, clique com rato boto da direita e escolha create sub menu:

    10.5 - Clique em New Item2 e mude este caption para E&xit! e o nome deste menu para MenuFileExit

    Introduo ao Lazarus FEUP - DEEC Pg 27

  • 10.6 - Clique em File com o rato boto esquerda e escolha Insert New Item (After)

    10.7 - Clique no ltimo item de menu e altere-lhe o caption para Help

    10.8 - Acrescente um sub menu Help e ao novo item altere o caption para &About e altere-lhe o nome para MenuHelpAbout

    10.9 - Feche o editor de menus e ainda em tempo de desenho verifique a sua funcionalidade, devemos ter um menu File com a opo Exit! e outro menu Help com a opo About

    10.10 - Seleccione File -> Exit e complete;

    10.11 - Ainda em tempo de desenho, selecione Help About e complete:

    10.12 - Grave e execute para testar as funcionalidades

    Introduo ao Lazarus FEUP - DEEC Pg 28

  • 10.13 - Abra o editor de menus e acrescente um item ao menu File com a caption - e outro com a caption Exi&t... e nome MenuExitQuery.

    10.14 - Feche o editor e seleccione File->Exit... e complete como se mostra de seguida:

    10.15 - Nota: boa prtica o menus com aco imediata terem um ! e os que abrem caixas de confirmao ou dilogo terem ...

    10.16 - Execute e teste as funcionalidades da aplicao

    10.17 - Ideias a reter: Os menus so uma funcionalidade padro do S.O. Os menus devem ter nomes curtos, descritivos e que no dem azo a confuses

    lembre-se que o utilizador no o programador interessante agrupar as aces a executar por temas e assim ter menus e

    submenus (e sub-sub-menus...) de acordo com determinada lgica Boas prticas:

    Definir teclas de atalho para os menus utilizados mais frequentemente Um Comando! d ideia que o comando ser executado imediatamente sem

    mais confirmaes Um Comando... d ideia que ser aparecer um dilogo adicional

    Introduo ao Lazarus FEUP - DEEC Pg 29

  • 11 - Eventos com parmetros

    11.1 - Crie uma nova aplicao apenas com uma TLabel

    11.2 - Na lista de eventos da Form, defina o evento OnKeyPress e complete o respectivo procedimento tal como se mostra de seguida:

    Os eventos recebem sempre a identificao do controlo que gerou esse evento atravs do parmetro de entrada Sender no procedimento de atendimento ao referido evento. O procedimento FormKeyPress atende os eventos OnKeyPress da Form1 e recebe no s o sender, como tambm recebe a tecla premida atravs do parmetro de entrada key; a varivel x do tipo inteiro e local a este procedimento (o seu valor no ser mantido entre chamadas ao procedimento)

    11.3 - Grave e execute premindo as teclas + e - para ver o nmero alterar-se

    11.4 - Ideias a reter: Os procedimentos de atendimento aos eventos recebem parmetros Um parmetro o Sender, isto , qual o objecto que gerou a chamada ao

    procedimento actual Outros eventos recebem informaes especficas do evento em causa, exemplo:

    OnKeyPress recebe qual a tecla premida

    Introduo ao Lazarus FEUP - DEEC Pg 30

  • 12 - Confirmar sada da aplicao - Close Query parmetros de sada no evento

    12.1 - Crie uma nova aplicao

    12.2 - Nos eventos da form, defina OnCloseQuery

    A funo MessageDlg mostra uma caixa de dilogo standard do sistema operativo e pede confirmao de sada com os botes standar OK e Cancel. No procedimento FormCloseQuery entram os parmetros sender e CanClose que um parmetros do tipo var. O valor desta varivel sada do procedimento ser utilizado pelo sistema operativo para validar realmente o pedido de sada do programa (por defeito, CanClose := True que dir ao S.O. para fechar de facto a aplicao).

    12.3 - Atravs deste evento, seja qual for a maneira para pedir a finalizao da aplicao, sempre lanada a caixa de dilogo; muitos programas lanam esta caixa de dilogo apenas existirem alteraes por gravar.

    Introduo ao Lazarus FEUP - DEEC Pg 31

  • 13 - Debugger De seguida utilizar-se- o debugger do IDE do lazarus; o debugger sob windows

    pode funcionar mal e pode, por vezes, obrigar a re-arrancar o lazarus (esta situao muito, muito menos frequente em linux) ou pode ser necessrio e Run->Reset Debugger

    Para terminar a sesso de debugging, utilizar Run->Stop

    13.1 - Crie uma nova aplicao com um boto e complete:

    13.2 - Prima com o rato no stio do vermelho para definir um break point de debugger

    13.3 - Grave a aplicao e execute com F9; verifique que o break point aparece confirmado:

    Introduo ao Lazarus FEUP - DEEC Pg 32

  • 13.4 - Prima o boto da aplicao ser atendido o evento, o procedimento de atendimento ao evento ser chamado e o procedimento Button1Click ser executado desde o incio e prosseguir; a execuo ser interrompida no stio do break point:

    13.5 - Durante este tempo de debugging, possvel ver o valor das variveis passando o cursor do rato por cima dos respectivos nomes das variveis

    13.6 - Prima F7 repetidamente para ver o programa a ser executado passo a passo e pode inspeccionar as variveis em causa

    13.7 - Retire o break point e prima F9 para executar o resto to programa normalmente

    13.8 - Durante o debugging, no possvel ver a form da aplicao

    13.9 - A tecla F7 faz step into e salta para dentro dos procedimentos que forem sendo chamados

    13.10 - A tecla F8 faz step over e entra e sai do procedimento passando para a linha seguinte do procedimento actual

    13.11 - A tecla F9 executa o resto do programa normalmente

    13.12 - Consulte o Menu View->Debug Windows->

    Watches permite acompanhar as variveis que se definir

    Local Variables permite ver o valor de todas as variveis locais desta funo

    Introduo ao Lazarus FEUP - DEEC Pg 33

  • 14 - Comentrios FinaisEste conjunto tutorial serve para dar bases para que os alunos possam explorar por si as funcionalidade do lazarus.

    O lazarus uma ferramenta genrica e imensa de tamanho...

    Fica o desafio de experimentar esta ferramenta em linux

    O lazarus mais rpido a compilar as aplicaes

    O debugger funciona melhor

    possvel portar projectos entre windows e linux

    O sistema operativo Linux livre e todos os drivers so livres

    O sistema operativo Linux no tem virus!

    - fim do tutorial -

    Introduo ao Lazarus FEUP - DEEC Pg 34

  • Exerccios de Lazarus

    1 - Ol Mundo num boto que se move Crie uma aplicao com um boto numa form

    Crie um programa que quando premir o boto altere a caption do boto para Ol Mundo!!!

    Modifique o programa anterior de tal maneira que o boto se mova pela form: de cada vez que se carregue no boto, ele deve mover-se 20 pixeis para a direita e para baixo; antes de qualquer parte do boto sair da form, ele deve ser recolocado obrigatoriamente no centro da form; garanta que o programa funciona quando a form tem qualquer tamanho

    Dicas:

    - A generalidade dos controlos tm propriedades top, left, width e height

    - Utilize o operador div para diviso inteira

    - As posies e dimenses so sempre em pixeis

    - Os eixos do Lazarus tm origem no canto superior esquerdo

    2 - Edit, Boto e Memo Crie uma aplicao que de cada vez que carrega num boto, acrescenta numa

    nova linha da Memo box o texto escrito na Edit box

    Seleccione a opo relativa ao aparecimento automtico de Scroll Bars na memo

    Dica:

    - Utilize Memo.Lines.Append

    3 - Clculo da operao escolhida por Radio Group (resultado em Edit Box) Crie uma aplicao com 3 edit boxes, um radio group e um boto

    Duas das caixas de texto (Edit Boxes) sero operandos para uma operao a escolher pelo Radio Group a terceira caixa de texto ser para o resultado

    O Radio Group pode escolher entre as seguintes operaes: soma, subtraco e multiplicao

    O Clculo ser efectuado quando se premir o boto

    Dicas:

    - Utilize StrToInt, e IntToStr

    - Utilize RadioGroup.ItemIndex

    Introduo ao Lazarus FEUP - DEEC Pg 35

  • 4 - Clculo da operao escolhida por Radio Group descritivo em Memo box Coloque 2 Edits, um Boto, um RadioGroup e um Memo e complete de forma a

    obter um programa que quando carregar no boto seja calculada a operao seleccionada no RadioGroup e o descritivo (Operando1) (operao) (Operando2) = (resultado) aparea na Memo

    Dicas:

    - Utilize StrToInt, StrToIntDef e IntToStr

    - Utilize RadioGroup.ItemIndex

    - Utilize MemoResults.add

    - Utilize soma de strings para concatenao

    Altere o programa para que o resultado seja calculado sempre que houver alteraes em qualquer dos edits

    Dicas:

    - Utilize o evento Edit.OnChange

    - Verifique que o programa pode gerar erros e mesmo assim continua a funcionar depois da situao de erro ter sido corrigida

    Altere o programa para que a conta seja calculada de 5 em 5 segundos

    Dica: Utilize um TTimer (separador System)

    Introduo ao Lazarus FEUP - DEEC Pg 36

  • 5 - Desenho Bsico (canvas) Coloque um Timer que chama o seguinte cdigo todos os segundos

    with Form1 do begin Canvas.Ellipse( -2+Width div 2, -2+Height div 2, 2+Width div 2, 2+Height div 2); Canvas.Line ( Width div 2, Height div 2, 9+Width div 2, Height div 2);end;Estude este cdigo para o compreender.

    Execute e redimensione a Form para ver o efeito;

    Altere o programa para haver uma varivel global rotacao que define o ngulo de rotao do marcador; acrescente um boto que acrescenta PI/10 radianos

    Dicas:

    - As variveis globais so definidas fora de qualquer funo (na zona de interface ou implementao) e so conhecidas da para diante no cdigo

    - Tenha em ateno o sentido de rotao que se pretende obter e os eixos do lazarus

    - Utilize as funes sin e cos que recebem argumentos em radianos

    - O lazarus conhece a constante PI

    - Ter de utilizar round ou trunc para converter de real para inteiro

    Comande a rotao com o teclado: por exemplo '+' e '-' fazem rodar o marcador numa e noutra direco

    Dicas:

    - Ponha a verdadeiro a propriedade Form.KeyPreview

    - Utilize o evento Form.OnKeyPress

    Introduo ao Lazarus FEUP - DEEC Pg 37

  • 6 - Aplicao multi-janela Crie uma aplicao com 3 botes numa form; carregando no primeiro abre uma

    segunda form; carregando no segundo boto fecha a segunda form; carregando no terceiro boto, abre a form no modo modal

    Dicas:

    - Utilizar File -> New Form

    - Ver Project -> Project Options -> forms

    - Utilizar Form.Show, hide, ShowModal

    7 - Clculo de somatrio

    Projecte uma aplicao que calcula soma1=i=ini

    fim

    i2 em que ini e fim so

    valores inteiros provenientes de caixas de texto

    Modifique a aplicao anterior para calcular ou a soma 1 ou a soma 2 (utilize um

    radio group) soma2=i=ini

    fim

    i3

    Modifique a aplicao anterior para calcular ou a soma 1 ou a soma 2 ou ambas (ou nenhuma) - utilize um TCheckBoxGroup

    Impea que todas as check boxes possam ficar no seleccionadas

    8 - TXMLPropStorage e session properties Acrescente aplicao do exerccio anterior um TXMLPropStorage; indique o

    nome do ficheiro config.xml

    Aceda ao editor de Form.SessionProperties e seleccione os valores a guardar em disco, sada do programa e que sero repostos entrada do programa

    Guarde o nmero mnimo de propriedades para que se possa sair da aplicao e voltar a entrar sem perder os valores e as seleces anteriores

    - fim exerccios -

    Introduo ao Lazarus FEUP - DEEC Pg 38

  • Ligao do Lazarus Base de Dados PGSQL fcil aceder a Bases de Dados sob Lazarus. Para aceder a BDs criadas com

    PostGreSQL, utilizar o componente PQConnection que regista todos os dados relativos ao servidor de BD, ao utilizador e respectivas passwords.

    Para aceder aos dados da BD necessrio haver uma proteco contra ordens contraditrias simultneas de diferentes utilizadores e para esse efeito utiliza-se

    um objecto chamado SQLTransaction

    Para fazer perguntas (queries) sob a base de dados necessrio o componente

    SQLQuery

    Um componente DBGrid uma grelha automtica com a forma de uma tabela, tabela essa que pode ser uma tabela temporria proveniente de uma pesquisa SQL; para utilizar este componente ainda necessrio uma forma de

    redireccionar dados, o que conseguido atravs do componente Data Source

    Diferentes utilizaes H 3 formas de aceder a bases de dados sob Lazarus

    Utilizando um componente DBGrid visualizaes simples

    Utilizando PQConnection.ExecuteDirect modificar dados

    Utilizando SQLQuery.Fields recolha de dados pesquisados (resposta a pergunta SQL)

    Preparao Abra o gnomo/phppgadmin no browser, altere a sua password para uma password

    pouco importante

    Crie uma tabela de teste com dados

    Experimente uma pergunta (query) de teste na janela de SQL do gnomo (exemplo: select * from anytable)

    Introduo ao Lazarus FEUP - DEEC Pg 39

  • Acesso utilizando o componente DBGrid Este o teste mais visual, que apresenta dados da ligao BD tanto em tempo

    de desenho como durante a execuo da aplicao; a sua utilizao limita-se a mostrar dados de forma simples e automtica, sem flexibilidade.

    Ateno: diversas configuraes podem evitar o modo de funcionamento aqui descrito mas o procedimento aqui apresentado foi testado com sucesso nas salas de aula do CICA

    Construa a aplicao com aspecto similar ao seguinte. A sequncia de operaes indicada logo de seguida:

    Componente Separador cone

    PQConnection SQLdb

    SQLQuery SQLdb

    SQLTransaction SQLdb

    DataSource DataAccess

    DBGrid DataControls

    Introduo ao Lazarus FEUP - DEEC Pg 40

  • No PQConnection preencher com os respectivos valores :

    - Transaction - SQLTransaction

    - Database nome da BD a utilizar, exemplo sinf0812

    - HostName nome do servidor de BD a utilizar, ex: gnomo.fe.up.pt

    - UserName nome do utilizador na BD, exemplo sinf0812

    - Password password no servidor de BD

    (Confirmar que SQLTransaction aponta para PQConnection)

    No SQLQuery preencher:

    - Transaco - SQLTransaction

    - Database - PQConnection

    - SQL preencher com cdigo SQL, exemplo: select * from anytable

    - (no preencher o campo DataSource)

    No DataSource preencher DataSet como SQLQuery

    No DBGrid preencher DataSource

    Activar todos os elementos e mesmo em tempo de desenho ser possvel ver o resultado da query feita na SQLQuery a aparecer na DBGrid

    Introduo ao Lazarus FEUP - DEEC Pg 41

    Servidor de BD (ex.: Gnomo.fe.up.pt)

    DatabaseNameHostNameUserNamePassword SQL

  • Execuo directa de cdigo SQL (ExecuteDirect)

    Para alterar a BD, utilize cdigo similar ao seguinte:...begin enter:=chr(13)+chr(10); s:='update copias set nalugueres=nalugueres+1 where'+ 'codcopia='+IntToStr(EstaCopia); // string de cdigo SQL try PQConnection.Connected:=True; PQConnection.ExecuteDirect('Begin Work;'); PQConnection.ExecuteDirect(s); PQConnection.ExecuteDirect('Commit Work;'); PQConnection.Connected:=False; except on E : EDatabaseError do MemoLog.Append('ERROBD:'+enter+ E.ClassName+enter+E.Message); on E : Exception do MemoLog.Append('ERRO:'+enter+ E.ClassName+enter+E.Message); end;end;

    Introduo ao Lazarus FEUP - DEEC Pg 42

    Servidor de BD (ex.: Gnomo.fe.up.pt)

    PQConnection.ex.: update tabela set column=1

    ExecuteDirect

    DatabaseNameHostNameUserNamePassword

  • Utilizar Perguntas SQL (Fields)

    Para obter os campos e as linhas de resultado de uma pergunta SQL, utilize cdigo similar ao que se segue:

    procedure TForm1.OpenQueryPrintAllFieldsClose;var ln, col : integer; s : string;begin SQLQuery.SQL.Text := 'select * from anytable'; PQConnection.Open; SQLQuery.Open; for ln := 1 to SQLQuery.RecordCount do begin SQLQuery.RecNo := ln; s:=''; for col:=0 to SQLQuery.FieldCount-1 do begin s:=s+SQLQuery.Fields[col].AsString+'; '; end; MemoLog.Append(s); end; SQLQuery.Close; PQConnection.Close;end;

    A resposta pergunta SQL tem as linhas desde 1 at SQLQuery.RecordCount e as colunas desde 0 at SQLQuery.FieldCount-1

    A Linha actual pode ser obtida e imposta atravs de SQLQuery.RecNo Cada coluna pode ser de um tipo diferente de dados, por exemplo a primeira

    coluna pode ser um inteiro e a segunda uma string pelo que necessrio indicar o tipo de dados em causa: SQLQuery.Fields[0].AsInteger e SQLQuery.Fields[1].AsString

    Introduo ao Lazarus FEUP - DEEC Pg 43

    Servidor de BD (ex.: Gnomo.fe.up.pt) SQLQuery. Fields

    DatabaseNameHostNameUserNamePassword SQL

  • Dicas Consulte o ficheiro das perguntas frequentes (nos contedos da cadeira)

    Por vezes o debugguer pode dar problemas (especialmente sob windows), pelo que pode ser interessante correr o executvel via Sistema Operativo

    Pode ser necessrio dar permisses de acesso rede na firewall tanto ao lazarus como aplicao que se cria em tempo de compilao

    Exerccio Livre

    Este exerccio livre compara uma aplicao baseada em Base de Dados com uma outra que utiliza um ficheiro que lido para memria

    Considere a empresa QuerLista, S.A. que deseja ver implementada uma lista telefnica.

    Uma empresa chamada SLazarus vai desenvolver uma aplicao que utiliza de uma list-box de Lazarus para armazenar os dados que sero gravados em disco atravs do componente TXMLPropStorage; adicionar ListBox.Items nas Session Properties da Form; se o entender como til, utilize o caracter especial # para separar o nome do nmero de telefone guardando a informao na mesma linha de uma nica ListBox

    Uma outra empresa chamada LazGres vai desenvolver uma aplicao rival fazendo uso de PostGreSQL e Lazarus

    Ambas as empresas vo utilizar uma listagem com apenas duas colunas: nome e nmero de telefone: lista_telef(nome, nmero_telefone)

    Para cada uma das aplicaes rivais, crie uma aplicao grfica que permita

    Inserir uma entrada nova

    Apagar uma determinada entrada

    Listar toda a lista telefnica

    Pesquisar atravs de nome e nmero_telefone

    Deve ser possvel fazer perguntas de fragmentos de dados, exemplo listar todos os nomes Sousa registados na base de dados

    Comece por projectar a interface grfica que deve, na medida do possvel ser o mais comum possvel a ambas as aplicaes

    Compare ambas as aplicaes e caracterize a possibilidade de crescimento de cada uma das bases de dados incluindo para o caso de mltiplos acessos em simultneo em diversos computadores diferentes

    Introduo ao Lazarus FEUP - DEEC Pg 44

  • Alguns Comandos SQL (micro resumo)

    Manipulao de Tabelas CREATE TABLE "table_name"

    ("column_1" "data_type_for_column_1","column_2" "data_type_for_column_2",... )

    tipos varchar e int

    obs: utilizar nomes de colunas em minsculas

    DROP TABLE table_name

    Manipulao de dados INSERT INTO Persons

    VALUES('Hussein', 'Saddam', 'White House') INSERT INTO table_name

    VALUES (value_1, value_2,....)

    INSERT INTO table_name (column1, column2,...)VALUES (value_1, value_2,....)

    UPDATE table_nameSET column_name_1 = new_value_1, column_name_2 = new_value_2WHERE column_name = some_value

    DELETE FROM table_nameWHERE column_name = some_value

    Introduo ao Lazarus FEUP - DEEC Pg 45

  • Perguntas de dados (Queries) SELECT column_name(s)

    FROM table_nameWHERE column operator value AND column operator value OR column operator value AND (... OR ...) ...

    Operator =, , >, =,

  • FAQ Lazarus

    1. Porqu Lazarus ?O Lazarus um programa em rpida evoluo, leve e que funciona em diversos sistemas operativos.

    mais rpido sob linux que sob windows.

    Deriva do Pascal que tem mais verificaes em run-time que o C e por isso frequentemente o prprio Pascal assinala erros que doutra forma teriam causado maus funcionamentos difceis de explicar.

    E livre, utiliza a licena LGPL, ver http://www.freepascal.org/faq.html

    O Lazarus uma aplicao normal de FreePascal (FPC) que uma implementao aberta de uma linguagem prxima do Object Pascal proposto pelo Borland Delphi.

    2. Lazarus & POEO Lazarus um IDE e um RAD e permite fazer programao de diversos tipos incluindo Programao Orientada a Eventos (POE)

    3. Lazarus, debugger, instabilidades e erros esquisitosO debugger dentro do Lazarus est em fase de desenvolvimento e por vezes surgem problemas de estabilidade, principalmente sobre Windows.

    Para contornar estes problemas:

    Utilizar sempre a ltima verso do Lazarus

    Testar o programa fora do IDE, executando-o atravs do S.O.

    Desligar o debugger do Lazarus

    Sob Linux e pretendendo obter informao adicional relativamente a algum tipo de erros com falta de informao de debug (exemplo: erros do FPC):

    Executar o Lazarus dentro de uma shell de texto

    Executar a aplicao criada dentro de uma shell

    Introduo ao Lazarus FEUP - DEEC Pg 47

  • 4. Lazarus, PostGreSQL e erros relativos a libpq.xxx Windows:Para o Lazarus se ligar ao servidor de PGSQL necessrio que:

    o Na mquina do lazarus esteja instalado o PGSQL (cliente ou servidor) o As DLLs do PGSQL\bin estejam no path do S.O.

    Para alterar o path, ir ao control panel, system, advanced, environment variables; seleccionar a varivel path (que existe sempre) e acrescentar no final um ponto e vrgula e de seguida o path onde se encontram as DLLs referidas

    Linux:

    o Criar um soft link do liqpq.so para apontar para o ficheiro liqpq.so.* com a extenso mais avanada

    o Acrescentar o path do liqpq.so.* na seco libraries do ficheiro de configurao do FPC que geralmente o /etc/fpc.cfg ; por exemplo: -Fl/usr/local/pgsql/lib

    5. Erro Circular Unit Reference Mover as unidades no necessrias na rea de interface para a rea de implementao, isto , tirar do uses da interface as unidades referentes s forms do utilizador e criar / acrescentar a um uses depois da implementao as nossas unidades

    6. Strings Dinmicas (' plicas dentro de ''plicas'' ') Em lazarus as cadeias de caracteres so delimitadas por 'plicas'

    perfeitamente possvel pr "aspas" dentro de ' plicas '

    Um par de plicas dentro de uma string Lazarus equivale a uma string com uma plica

    Exemplos:

    o Executando o cdigo: s: = ' 1 2 3 '' 4 5 6 '' 7 8 9 '' '; s ficar com a string: 1 2 3 ' 4 5 6 ' 7 8 9 'o Considere a seguinte query de SQL: SELECT nome FROM paciente LIKE 'T%' O cdigo necessrio para produzir esta query : s := 'SELECT nome FROM paciente LIKE 'T%'''; Para utilizar informao de uma edit box: s := 'SELECT nome FROM paciente LIKE '''+ EditBox.text+''''; a edit box teria por exemplo T% notar ainda que o espao depois do LIKE essencial

    Introduo ao Lazarus FEUP - DEEC Pg 48

  • 7. Pesquisas que no funcionam e Esquemas e / ou Relaes (Tabelas) que no se consegue aceder Utilizar tabelas com nomes s em minsculas

    Por o nome da tabela entre aspas, exemplo Tabela Utilizar o esquema pblico ou Esquema.Tabela

    8. Passwords Utilizar a propriedade Edit.PasswordChar

    9. Comando Strip Para reduzir o tamanho de um executvel, utilizar o comando strip, tipicamente no path do S.O. Linux; em windows, utilizar o executvel, tipicamente em (adaptar conforme a directoria de instalao e as verses especficas instaladas): c:\lazarus\fpc\2.2.4\bin\i386-win32\strip.exe nome_do_exe_a_reduzirO comando strip reduz drasticamente o tamanho do executvel (qualquer S.O.) que mantm todas as funcionalidades mas perde informao de debugging.

    10. Ficheiros que podem ser apagadosO lazarus utiliza diversos ficheiros temporrios, alguns dos quais podem ser apagados. Para tal utilizar Menu File/Clean_Directory. Alguns ficheiros que podem ser apagados: *.compiled, *.o, *.ppu.

    - Fim do FAQ -

    Introduo ao Lazarus FEUP - DEEC Pg 49

  • Listagem de Teclas e funcionalidades CTRL + Space completar cdigo

    CTRL + SHIFT + Space Parmetros da chamada ao procedimento/funo

    CTRL + J Code Templates

    CTRL + SHIFT + CIMA / CTRL + SHIFT + BAIXO declarao / implementao

    CTRL + Clique - declarao / definio (de qualquer varivel, etc)

    CTRL + H Leva ao ponto de edio anterior

    CTRL + SHIFT + H Leva ao ponto de edio seguinte

    F12 - troca entre form e cdigo

    F11 - activa o object inspector

    CTRL + SHIFT + C completa classe / implementao de classe

    CTRL + Y Apagar uma linha

    F7 Debugger -> Step Into

    F8 Debugger -> Step Over

    F9 Run

    Introduo ao Lazarus FEUP - DEEC Pg 50

    IntroduoTutorial 1 - Criao do projecto inicial Form com 1 boto2 - Criao de projecto com dois botes3 - Alterando nomes e propriedades de componentes4 - Aplicao com Edit e Check Box5 - Utilizao do evento OnChange da classe TEdit6 - Utilizao de procedimentos e escrita rpida (Code Templates, Completion e Parameter CheckOut)7 - Navegao no cdigo e form/cdigo8 - Aplicao com RadioGroup e Memo9 - Temporizador10 - Menu da aplicao11 - Eventos com parmetros 12 - Confirmar sada da aplicao - Close Query parmetros de sada no evento13 - Debugger 14 - Comentrios Finais

    Exerccios de Lazarus 1 - Ol Mundo num boto que se move 2 - Edit, Boto e Memo 3 - Clculo da operao escolhida por Radio Group (resultado em Edit Box) 4 - Clculo da operao escolhida por Radio Group descritivo em Memo box 5 - Desenho Bsico (canvas) 6 - Aplicao multi-janela 7 - Clculo de somatrio 8 - TXMLPropStorage e session properties

    Ligao do Lazarus Base de Dados PGSQL Diferentes utilizaesPreparaoAcesso utilizando o componente DBGridExecuo directa de cdigo SQL (ExecuteDirect)Utilizar Perguntas SQL (Fields)DicasExerccio Livre

    Alguns Comandos SQL (micro resumo)Manipulao de TabelasManipulao de dadosPerguntas de dados (Queries)

    FAQ Lazarus1. Porqu Lazarus ?2. Lazarus & POE3. Lazarus, debugger, instabilidades e erros esquisitos4. Lazarus, PostGreSQL e erros relativos a libpq.xxx5. Erro Circular Unit Reference6. Strings Dinmicas (' plicas dentro de ''plicas'' ')7. Pesquisas que no funcionam e Esquemas e / ou Relaes (Tabelas) que no se consegue aceder8. Passwords9. Comando Strip10. Ficheiros que podem ser apagados

    Listagem de Teclas e funcionalidades

    unnamed0: Offunnamed1: Offunnamed2: Offunnamed3: Offunnamed4: Offunnamed5: Offunnamed6: Offunnamed7: Offunnamed8: Offunnamed9: Offunnamed10: Offunnamed11: Offunnamed12: Offunnamed13: Offunnamed14: Offunnamed28: Offunnamed15: Offunnamed16: Offunnamed17: Offunnamed18: Offunnamed19: Offunnamed20: Offunnamed21: Offunnamed22: Offunnamed23: Offunnamed24: Offunnamed25: Offunnamed26: Offunnamed27: Offunnamed28_2: Offunnamed29: Offunnamed30: Offunnamed31: Offunnamed32: Offunnamed33: Offunnamed34: Offunnamed35: Offunnamed36: Offunnamed37: Offunnamed38: Offunnamed39: Offunnamed40: Offunnamed41: Offunnamed42: Offunnamed43: Offunnamed44: Offunnamed45: Offunnamed46: Offunnamed47: Offunnamed48: Offunnamed49: Offunnamed50: Offunnamed51: Offunnamed52: Offunnamed53: Offunnamed54: Offunnamed55: Offunnamed56: Offunnamed57: Offunnamed58: Offunnamed59: Offunnamed60: Offunnamed61: Offunnamed62: Offunnamed63: Offunnamed64: Offunnamed65: Offunnamed66: Offunnamed67: Offunnamed68: Offunnamed69: Offunnamed70: Offunnamed71: Offunnamed72: Offunnamed73: Offunnamed74: Offunnamed75: Offunnamed76: Offunnamed77: Offunnamed78: Offunnamed79: Offunnamed80: Offunnamed81: Offunnamed82: Offunnamed83: Offunnamed84: Offunnamed85: Offunnamed86: Offunnamed87: Offunnamed88: Offunnamed89: Offunnamed90: Offunnamed91: Offunnamed92: Offunnamed93: Offunnamed94: Offunnamed95: Offunnamed96: Offunnamed97: Offunnamed98: Offunnamed99: Offunnamed100: Offunnamed101: Offunnamed102: Offunnamed103: Offunnamed104: Offunnamed105: Offunnamed106: Offunnamed107: Offunnamed108: Offunnamed109: Offunnamed110: Offunnamed111: Offunnamed112: Offunnamed113: Offunnamed114: Offunnamed115: Offunnamed116: Offunnamed117: Offunnamed118: Offunnamed119: Offunnamed120: Offunnamed121: Offunnamed122: Offunnamed123: Offunnamed124: Offunnamed125: Offunnamed126: Offunnamed127: Offunnamed128: Offunnamed129: Offunnamed130: Offunnamed131: Offunnamed132: Offunnamed133: Offunnamed134: Offunnamed135: Offunnamed136: Offunnamed137: Offunnamed138: Offunnamed139: Offunnamed140: Offunnamed141: Offunnamed142: Offunnamed143: Offunnamed144: Offunnamed145: Offunnamed146: Offunnamed147: Off