Sistemas de Informao
MIEEC
Introduo ferramenta Lazarus
3 ano
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