Você está na página 1de 50

Sistemas de Informao

MIEEC

Introduo ferramenta Lazarus

3 ano

asousa@fe.up.pt Verso de 2010 / Maio / 12

Introduo
A 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 Teclas
e funcionalidades" , na pg. 50.
Bom Trabalho!
Armando Sousa

ndice
Introduo..............................................................................................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 cdigo


Button1.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 programa que vem sendo executado

do canto superior direito da janela

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 denominase 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 1.4)

Arranje as janelas a seu gosto (por exemplo, tal como mostrado em

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 aconselhase 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


point de debugger

vermelho para definir um break

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 Finais
Este 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
2+Width
Canvas.Line
(
Width
9+Width

div
div
div
div

2, -2+Height div 2,
2, 2+Height div 2);
2,
Height div 2,
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
fim

Projecte uma aplicao que calcula

soma1= i

em que ini e fim so

i=ini

valores inteiros provenientes de caixas de texto

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


fim

radio group)

soma2= i3
i=ini

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

PQConnection

SQLdb

SQLQuery

SQLdb

SQLTransaction

SQLdb

DataSource

DataAccess

DBGrid

DataControls

Introduo ao Lazarus

FEUP - DEEC

cone

Pg 40

DatabaseName
HostName
UserName
Password

SQL

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

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

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

preencher DataSet como SQLQuery

FEUP - DEEC

Pg 41

Execuo directa de cdigo SQL (ExecuteDirect)


DatabaseName
HostName
UserName
Password

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

PQConnection. ExecuteDirect
ex.: update tabela set column=1

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

Utilizar Perguntas SQL (Fields)


DatabaseName
HostName
UserName
Password

SQL

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

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

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_name
SET column_name_1 = new_value_1, column_name_2 = new_value_2
WHERE column_name = some_value

DELETE FROM table_name


WHERE column_name = some_value

Introduo ao Lazarus

FEUP - DEEC

Pg 45

Perguntas de dados (Queries)

SELECT column_name(s)
FROM table_name
WHERE column operator value
AND column operator value
OR column operator value
AND (... OR ...)
...

Operator =, <>, >, <, >=, <=, between, like, like %wildcard%wildcard%

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...)

SELECT column_name(s)
FROM table_name
ORDER BY row_1, row_2 DESC, row_3 ASC, ...

SELECT column_1, ..., SUM(group_column_name)


FROM table_name
GROUP BY group_column_name

Aggregate: avg, count, max, min, sum

SELECT column_1, ..., SUM(group_column_name)


FROM table_name
GROUP BY group_column_name
HAVING SUM(group_column_name) condition value

- Fim do tutorial de Lazarus a ligar a PostgreSQL -

Introduo ao Lazarus

FEUP - DEEC

Pg 46

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 & POE


O 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 esquisitos


O 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 ficar com a string:

s: = ' 1 2 3 '' 4 5 6 '' 7 8 9 '' ';


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_reduzir
O 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 apagados


O 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

Você também pode gostar