Escolar Documentos
Profissional Documentos
Cultura Documentos
Lazarus Tutorial
Lazarus Tutorial
MIEEC
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-
Introduo ao Lazarus
FEUP - DEEC
Pg 2
1.5 -
1.5.2 -
Clique na form:
Introduo ao Lazarus
FEUP - DEEC
Pg 3
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
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 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.
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-
2.2 -
Se a Form1 no estiver visvel, escolha View -> Forms -> Form1 -> OK
2.3 -
2.6 -
2.8 -
Introduo ao Lazarus
FEUP - DEEC
Pg 6
2.9 -
2.10 -
2.11 -
A form do projecto, chamada Form1, passou a ter dois botes, Button1 e Button2
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
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-
Introduo ao Lazarus
FEUP - DEEC
Pg 8
3.4 -
Introduo ao Lazarus
FEUP - DEEC
Pg 9
3.5 -
Altere agora as Captions dos botes, tal como nas seguintes figuras:
3.7 -
3.8 -
Introduo ao Lazarus
FEUP - DEEC
Pg 10
Todos as instncias TButton (isto , todos os botes) devem comear pela letra B
- isto permitir mais tarde que todos os botes sejam facilmente localizaveis
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-
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 -
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 -
4.9 -
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 -
Introduo ao Lazarus
FEUP - DEEC
Pg 13
4.14 -
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 -
4.18 -
4.19 -
e execute com
Introduo ao Lazarus
FEUP - DEEC
Pg 14
Foi utilizada uma edit box chamada EditMyText; boa prtica todas as edit boxes
terem o prefixo Edit
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);
Introduo ao Lazarus
FEUP - DEEC
Pg 15
5-
5.2 -
Escolha File -> Save All e depois Run->Run para executar o projecto
Seria muito errado por um ciclo infinito a verificar se ocorreram mudanas no texto
Introduo ao Lazarus
FEUP - DEEC
Pg 16
6-
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:
Introduo ao Lazarus
FEUP - DEEC
Pg 17
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:
Introduo ao Lazarus
FEUP - DEEC
Pg 18
7-
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.8 -
7.9 -
7.10 -
Apague o boto
7.11 Prima F12 de novo para ver que na declarao da form deixou de
constar o boto
Introduo ao Lazarus
FEUP - DEEC
Pg 20
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
Uma Form est numa unidade de cdigo (unit); a unidade e a form podem ter nomes
quaisquer desde que sejam diferentes !!!
Uma unit pode ter uma form ou no (unit pode ser visual ou no)
Por segurana e facilidade de utilizao, criar uma directoria nova para cada projecto
Lazarus e guardar todos os ficheiros desse projecto nessa mesma directoria
Navegao:
Introduo ao Lazarus
FEUP - DEEC
Pg 21
8-
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.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:
Introduo ao Lazarus
FEUP - DEEC
Pg 23
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 -
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)
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
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
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 -
9.2 -
9.3 -
9.4 Faa com que a cada presso do boto seja executado o seguinte
cdigo:
Edit1.Text:= Edit1.Text+'!';
9.5 -
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 -
9.13 -
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:
Os temporizadores normais do Lazarus / Windows so pouco precisos e aconselhase tempos sempre superiores a 0.1 segundos
10 -
Menu da aplicao
10.1 -
10.2 -
10.3 -
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 -
10.8 Acrescente um sub menu Help e ao novo item altere o caption para
&About e altere-lhe o nome para MenuHelpAbout
10.10 -
10.11 -
10.12 -
Introduo ao Lazarus
FEUP - DEEC
Pg 28
Os menus devem ter nomes curtos, descritivos e que no dem azo a confuses
lembre-se que o utilizador no o programador
Boas prticas:
Introduo ao Lazarus
FEUP - DEEC
Pg 29
11 -
11.1 -
Introduo ao Lazarus
FEUP - DEEC
Pg 30
12.2 -
Introduo ao Lazarus
FEUP - DEEC
Pg 31
13 -
Debugger
13.1 -
13.3 Grave a aplicao e execute com F9; verifique que o break point
aparece confirmado:
Introduo ao Lazarus
FEUP - DEEC
Pg 32
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 -
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 -
13.12 -
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
- fim do tutorial -
Introduo ao Lazarus
FEUP - DEEC
Pg 34
Exerccios de Lazarus
1 - Ol Mundo num boto que se move
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
Crie uma aplicao que de cada vez que carrega num boto, acrescenta numa
nova linha da Memo box o texto escrito na Edit box
Dica:
- Utilize Memo.Lines.Append
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
Dicas:
- Utilize StrToInt, e IntToStr
- Utilize RadioGroup.ItemIndex
Introduo ao Lazarus
FEUP - DEEC
Pg 35
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
Introduo ao Lazarus
FEUP - DEEC
Pg 36
div
div
div
div
2, -2+Height div 2,
2, 2+Height div 2);
2,
Height div 2,
2,
Height div 2);
end;
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
soma1= i
i=ini
radio group)
soma2= i3
i=ini
- fim exerccios -
Introduo ao Lazarus
FEUP - DEEC
Pg 38
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
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
Preparao
Introduo ao Lazarus
FEUP - DEEC
Pg 39
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.
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
- 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
No SQLQuery
preencher:
- Transaco - SQLTransaction
- Database - PQConnection
- SQL preencher com cdigo SQL, exemplo: select * from anytable
- (no preencher o campo DataSource)
No DataSource
Introduo ao Lazarus
FEUP - DEEC
Pg 41
Servidor de BD
(ex.: Gnomo.fe.up.pt)
PQConnection. ExecuteDirect
ex.: update tabela set column=1
Introduo ao Lazarus
FEUP - DEEC
Pg 42
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;
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
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
Comece por projectar a interface grfica que deve, na medida do possvel ser o
mais comum possvel a ambas as aplicaes
Introduo ao Lazarus
FEUP - DEEC
Pg 44
Manipulao de dados
UPDATE table_name
SET column_name_1 = new_value_1, column_name_2 = new_value_2
WHERE column_name = some_value
Introduo ao Lazarus
FEUP - DEEC
Pg 45
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, ...
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.
Introduo ao Lazarus
FEUP - DEEC
Pg 47
Introduo ao Lazarus
FEUP - DEEC
Pg 48
8. Passwords
9. Comando Strip
- Fim do FAQ -
Introduo ao Lazarus
FEUP - DEEC
Pg 49
F9 Run
Introduo ao Lazarus
FEUP - DEEC
Pg 50