Escolar Documentos
Profissional Documentos
Cultura Documentos
Alex Manual Lazarus
Alex Manual Lazarus
Introdu��o ........................................................................
...................... 1
Tutorial ..........................................................................
....................... 2
Exerc�cios de
Lazarus ...........................................................................
..... 35
Liga��o do Lazarus � Base de Dados
PGSQL ..................................................... 39
Alguns Comandos SQL (micro
resumo) ............................................................ 45
FAQ Lazarus Sistemas de
informa��o ............................................................. 47
Listagem de Teclas e
funcionalidades ............................................................. 50
Introdu��o ao Lazarus FEUP - DEEC P�g 1
Tutorial
1 - Cria��o do projecto inicial � Form com 1 bot�o
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 di�logo:
1.3 - Seleccione Application e prima Create; acabou de criar um novo
projecto vazio para desenvolver uma nova aplica��o gr�fica.
1.4 - O ambiente integrado de desenvolvimento (IDE) do lazarus aparecer�;
este IDE � constitu�do 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 c�digo Source Editor (onde se escreve o c�digo!)
? Na figura abaixo representa-se � direita a �form� em �design-time�
? Por baixo aparece a caixa de mensagens (onde v�o aparecer erros de
compila��o, etc)
Introdu��o ao Lazarus FEUP - DEEC P�g 2
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 poss�vel alterar o texto deste
componente (mantenha ReadOnly igual a False):
4.9 - Altere a Caption da Form para passar a dizer �FEUP�
4.10 - Fa�a 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 c�digo
automaticamente; esta op��o abre uma caixa de selec��o das possibilidades
de escrita; prima Enter para seleccionar a op��o certa (EditMyText) e ver o
texto EditMyText aparecer sem ter de escrever mais do que as primeiras
letras!
4.11 - Utilize esta t�cnica para ajudar a escrever o texto:
Introdu��o ao Lazarus FEUP - DEEC P�g 13
4.12 - Grave todos os ficheiros premindo e de seguida prima para
executar a aplica��o; ambos os comandos est�o situados na barra de atalhos;
estes atalhos equivalem a File->Save All e Run->Run
4.13 - H� algum problema com esta aplica��o ?
4.14 - Altere o c�digo 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 altera��es e respectivo motivo.
4.16 - Qual a aplica��o que o utilizador final do nosso programa acharia mais
intuitivo de utilizar, a aplica��o 4.12 ou a 4.14 ?
4.17 - Acrescente um bot�o com o nome BUpdate e a caption �Actuali&zar�
4.18 - Fa�a duplo clique no bot�o e escreva tal como mostrado de seguida:
4.19 - Grave todos os ficheiros premindo e execute com
4.20 - Experimente aceder aos controlos visuais atrav�s do teclado,
utilizando teclas de atalho ALT+A e ALT+Z
Introdu��o ao Lazarus FEUP - DEEC P�g 14
4.21 - Ideias a Reter:
? Foi utilizada uma edit box chamada EditMyText; � boa pr�tica todas as edit boxes
terem o prefixo �Edit�
? Foi utilizado uma CheckBox chamada CBAllowChange; � boa pr�tica todas as
CheckBox's terem o prefixo �CB�
? Quando o programa arranca, � poss�vel 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� poss�vel alterar o conte�do da caixa
de
edi��o de texto; em termos de programa��o s� temos acesso �s propriedades
�EditMyText.ReadOnly� e CBAllowChange.Checked o que obriga � utiliza��o da
nega��o booleana: EditMyText.ReadOnly:=not(CBAllowChange.Checked);
? Se o texto associado � check box dissesse �Impedir altera��o�, ent�o j� faria
sentido o c�digo EditMyText.ReadOnly:=CBPreventChanges.Checked;!
? Lembre-se que o utilizador final n�o � o programador da aplica��o e que o
utilizador final apenas ler� o texto que estiver na form que deve conduzir a uma
utiliza��o f�cil, intuitiva e com l�gica da aplica��o 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
Introdu��o ao Lazarus FEUP - DEEC P�g 15
5 - Utiliza��o do evento OnChange da classe TEdit
5.1 - Fa�a duplo clique em cima da caixa de edi��o 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 c�digo deste evento muda a form.caption
para o texto da EditMyText e desta forma n�o � necess�rio carregar no bot�o para
fazer a actualiza��o que se tornou �Autom�tica�!
? N�o � executado nenhum c�digo da aplica��o fora dos eventos reconhecidos
? Seria muito errado por um ciclo infinito a verificar se ocorreram mudan�as no
texto
? Neste momento h� c�digo repetido no nosso programa (Form1.Caption :=
EditMyText.Text); c�digo repetido � sempre mau e deve ser evitado !
Introdu��o ao Lazarus FEUP - DEEC P�g 16
6 - Utiliza��o de procedimentos e escrita r�pida (Code
Templates, Completion e Parameter CheckOut)
6.1 - Procure no c�digo da unidade myunit.pas o procedimento
CBAllowChangeChange; logo acima desse c�digo e fora de qualquer
procedimento (que come�am 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 c�digo define um procedimento (uma fun��o que n�o devolve nada) e que
recebe como par�metro de entrada uma vari�vel com o nome �StringIn� do
tipo string
6.2 - Fa�a duplo clique em cima da Edit e ser� conduzido ao c�digo relativo
ao evento EditMyTextChange; escreva �actu� e prima CTRL+SPACE:
Prima depois disso CTRL+Shift+Space para ver os argumentos que a fun��o ou
o procedimento esperam (ver texto flutuante directamente por cima do
cursor):
Neste caso o procedimento espera um par�metro com o nome �StringIn� do
tipo �String� (cadeia de caracteres)
Introdu��o ao Lazarus FEUP - DEEC P�g 17
6.3 - Complete tal como mostrado (deve ir utilizando a funcionalidade de
completa��o autom�tica de c�digo � CTRL + SPACE):
6.4 - Navegue no c�digo 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 actualiza��o
6.6 - Grave e execute para verificar que o conjunto funciona.
6.7 - Exerc�cio Livre: Adicione mais outra Check Box com nome e caption
adequados; altere a aplica��o para implementar a funcionalidade de a
actualiza��o ser autom�tica apenas quando a caixa de selec��o estiver activa;
quando inactiva � necess�rio premir o bot�o para actualizar a form
6.8 - Exerc�cio Livre: Modifique a aplica��o de tal forma que a caption da
form seja o texto da edit repetido com um espa�o de permeio; para ter
trabalho m�nimo, onde deve inserir as modifica��es ???
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 repeti��o de c�digo e o exerc�cio 6.8
beneficia desse facto
? A escrita de c�digo FPC/Lazarus v�m facilitada atrav�s de diversas t�cnicas
? Code Templates � atalho CTRL + J
? Code Completion � atalho CTRL + SPACE
? Parameter CheckOut � atalho CTRL + SHIFT + SPACE
Tal como pode ver, uma memo box � uma caixa de texto que permite
m�ltiplas linhas. A propriedade �Lines� � do tipo TStrings que permite conter
um texto com diversas linhas.
Introdu��o ao Lazarus FEUP - DEEC P�g 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 padr�o do S.O.
8.5 - Fa�a duplo clique no Radio Group, acrescente tal como mostrado de
seguida e depois prima CTRL+Shift+Space para ver as listas par�metros que
esta fun��o aceita:
Para a fun��o 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
selec��o no radio group, � acrescentada uma linha de texto que descreve o
que est� seleccionado.
Introdu��o ao Lazarus FEUP - DEEC P�g 23
8.8 - Acrescente ainda um Bot�o com caption �Descreve� e com nome
�BDescribe�
8.9 - Fa�a com que o evento OnClick do Radio Group e o OnClick do bot�o
chamem a fun��o DescribeRadioGroup que se mostra de seguida; note que
como a fun��o � externa � Form1, � necess�rio acrescentar a no��o de que
todos os controlos visuais que temos vindo a manipular est�o dentro da Form1
e por isso � necess�rio indicar Form1.Memo1.Lines.Append:
8.10 - Grave e execute para testar todas as funcionalidades
Introdu��o ao Lazarus FEUP - DEEC P�g 24
8.11 - Exerc�cio livre: Modifique a form para que passe a ter a configura��o
indicada de seguida; utilize o novo bot�o para acrescentar um item em run
time ao RadioGroup (utilize a fun��o RadioGroup.Items.Append para
acrescentar items em run-time)
8.12 - Ideias a reter:
? O controlo visual RadioGroup escolhe no m�ximo uma de diversas op��es
? Cada op��o 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 poss�vel ter items iguais uma vez que os items s�o numerados
? Os items podem ser indicados em design time, no object inspector mas tamb�m
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, s�o tamb�m TStrings com o nome �Lines�
? Para acrescentar linhas ao Memo, utilizar MemoName.Lines.Append(...)
? A fun��o Append chamada em ambos os casos pertence � classe TStrings que est�
tanto no RG.Items como no Tmemo.Lines
? Quando utiliza uma fun��o fora da form, para aceder aos controlos visuais da
form,
� necess�rio escrever explicitamente �Form1.ControloVisual�
Introdu��o ao Lazarus FEUP - DEEC P�g 25
9 - Temporizador
9.1 - Crie uma nova aplica��o
9.2 - Insira uma caixa de edi��o de texto TEdit e um bot�o TButton.
9.3 - Fa�a com que o texto inicial no arranque da aplica��o seja �0� (zero)
9.4 - Fa�a com que a cada press�o do bot�o seja executado o seguinte
c�digo:
Edit1.Text:= Edit1.Text+'!';
9.5 - Grave o projecto numa directoria adequada e execute
9.6 - Confirme que a cada press�o do bot�o um ponto de excla��o �
acrestado
9.7 - Modifique agora o evento OnClick do bot�o para:
Edit1.Text:=IntToStr(StrToIntDef(Edit1.Text,0)+1);
Este c�digo converte o texto do Edit1 para um n�mero inteiro, soma 1 e p�e o
resultado de volta no mesmo texto, sob a forma de string.
9.8 - Grave e execute para confirmar que a cada press�o do bot�o, o
n�mero na edit box � incrementado
9.9 - De seguida acrescente um temporizador TTimer (separador System) �
form:
9.10 - Fa�a 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 c�digo com a chamada:
Button1Click(Sender);
Este c�digo ser� chamado peri�dicamente pelo timer e chama a rotina de
press�o do bot�o.
9.11 - Grave e execute - note que a numera��o � incrementada todos os
segundos automaticamente e ainda sempre que se premir o bot�o; note que o
timer desaparece em run-time (mas as funcionalidades est�o l�!)
9.12 - Altere agora a propriedade Timer1.interval para 2000
9.13 - Execute para ver que o n�mero � incrementado a cada 2 segundos.
Introdu��o ao Lazarus FEUP - DEEC P�g 26
9.14 - Exerc�cio Livre: Adicione uma check box �CBEnable� que quando
seleccionada permite o funcionamento do incremento autom�tico; a check box
deve aparecer inicialmente seleccionada;
Dica: Utilize Timer1.Enabled:=...
9.15 - Ideias a reter:
? Quando n�o h� eventos, n�o h� c�digo da aplica��o a ser executado
? Os temporizadores normais do Lazarus / Windows s�o pouco precisos e aconselhase
tempos sempre superiores a 0.1 segundos
10 - Menu da aplica��o
10.1 - Acrescente � aplica��o anterior um TMainMenu do separador standard
10.2 - Fa�a 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 bot�o 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�
Introdu��o ao Lazarus FEUP - DEEC P�g 27
10.6 - Clique em File com o rato bot�o 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 op��o Exit! e outro
menu Help com a op��o 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
Introdu��o ao Lazarus FEUP - DEEC P�g 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 pr�tica o menus com ac��o imediata terem um �!� e os
que abrem caixas de confirma��o ou di�logo terem �...�
10.16 - Execute e teste as funcionalidades da aplica��o
10.17 - Ideias a reter:
? Os menus s�o uma funcionalidade padr�o do S.O.
? Os menus devem ter nomes curtos, descritivos e que n�o d�em azo a confus�es �
lembre-se que o utilizador n�o � o programador
? � interessante agrupar as ac��es a executar por temas e assim ter menus e
submenus (e sub-sub-menus...) de acordo com determinada l�gica
? Boas pr�ticas:
� Definir teclas de atalho para os menus utilizados mais frequentemente
� Um �Comando!� d� ideia que o comando ser� executado imediatamente sem
mais confirma��es
� Um �Comando...� d� ideia que ser� aparecer� um di�logo adicional
Introdu��o ao Lazarus FEUP - DEEC P�g 29
11 - Eventos com par�metros
11.1 - Crie uma nova aplica��o 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 identifica��o do controlo que gerou esse evento
atrav�s do par�metro de entrada �Sender� no procedimento de atendimento
ao referido evento. O procedimento FormKeyPress atende os eventos
OnKeyPress da Form1 e recebe n�o s� o �sender�, como tamb�m recebe a
tecla premida atrav�s do par�metro de entrada �key�; a vari�vel x � do tipo
inteiro e � local a este procedimento (o seu valor n�o ser� mantido entre
chamadas ao procedimento)
11.3 - Grave e execute premindo as teclas �+� e �-� para ver o n�mero
alterar-se
11.4 - Ideias a reter:
? Os procedimentos de atendimento aos eventos recebem par�metros
? Um par�metro � o �Sender�, isto �, qual o objecto que gerou a chamada ao
procedimento actual
? Outros eventos recebem informa��es espec�ficas do evento em causa, exemplo:
OnKeyPress recebe qual a tecla premida
Introdu��o ao Lazarus FEUP - DEEC P�g 30
12 - Confirmar sa�da da aplica��o - Close Query � par�metros de
sa�da no evento
12.1 - Crie uma nova aplica��o
12.2 - Nos eventos da form, defina OnCloseQuery
A fun��o MessageDlg mostra uma caixa de di�logo standard do sistema
operativo e pede confirma��o de sa�da com os bot�es standar OK e Cancel.
No procedimento FormCloseQuery entram os par�metros sender e �CanClose�
que � um par�metros do tipo �var�. O valor desta vari�vel � sa�da do
procedimento ser� utilizado pelo sistema operativo para validar realmente o
pedido de sa�da do programa (por defeito, CanClose := True que dir� ao S.O.
para fechar de facto a aplica��o).
12.3 - Atrav�s deste evento, seja qual for a maneira para pedir a finaliza��o
da aplica��o, � sempre lan�ada a caixa de di�logo; muitos programas lan�am
esta caixa de di�logo apenas existirem altera��es por gravar.
Introdu��o ao Lazarus FEUP - DEEC P�g 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
situa��o � muito, muito menos frequente em linux) ou pode ser necess�rio e
Run->Reset Debugger
� Para terminar a sess�o de debugging, utilizar Run->Stop
13.1 - Crie uma nova aplica��o com um bot�o e complete:
13.2 - Prima com o rato no s�tio do � � vermelho para definir um break
point de debugger
13.3 - Grave a aplica��o e execute com F9; verifique que o break point
aparece confirmado:
Introdu��o ao Lazarus FEUP - DEEC P�g 32
13.4 - Prima o bot�o da aplica��o � ser� atendido o evento, o procedimento
de atendimento ao evento ser� chamado e o procedimento Button1Click ser�
executado desde o in�cio e prosseguir�; a execu��o ser� interrompida no s�tio
do break point:
13.5 - Durante este tempo de debugging, � poss�vel ver o valor das vari�veis
passando o cursor do rato por cima dos respectivos nomes das vari�veis
13.6 - Prima F7 repetidamente para ver o programa a ser executado passo a
passo e pode inspeccionar as vari�veis em causa
13.7 - Retire o break point e prima F9 para executar o resto to programa
normalmente
13.8 - Durante o debugging, n�o � poss�vel ver a form da aplica��o
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 vari�veis que se definir
? Local Variables permite ver o valor de todas as vari�veis locais desta
fun��o
Introdu��o ao Lazarus FEUP - DEEC P�g 33
14 - Coment�rios Finais
Este conjunto tutorial serve para dar bases para que os alunos possam explorar
por si as funcionalidade do lazarus.
O lazarus � uma ferramenta gen�rica e imensa de tamanho...
Fica o desafio de experimentar esta ferramenta em linux
� O lazarus � mais r�pido a compilar as aplica��es
� O debugger funciona melhor
� � poss�vel portar projectos entre windows e linux
� O sistema operativo Linux � livre e todos os drivers s�o livres
� O sistema operativo Linux n�o tem virus!
- fim do tutorial -
Introdu��o ao Lazarus FEUP - DEEC P�g 34
Exerc�cios de Lazarus
1 - �Ol� Mundo� num bot�o que se move
? Crie uma aplica��o com um bot�o numa form
? Crie um programa que quando premir o bot�o altere a caption do bot�o para �Ol�
Mundo!!!�
? Modifique o programa anterior de tal maneira que o bot�o se mova pela form: de
cada vez que se carregue no bot�o, ele deve mover-se 20 pixeis para a direita e
para baixo; antes de qualquer parte do bot�o 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 t�m propriedades top, left, width e height
- Utilize o operador div para divis�o inteira
- As posi��es e dimens�es s�o sempre em pixeis
- Os eixos do Lazarus t�m origem no canto superior esquerdo
2 - Edit, Bot�o e Memo
? Crie uma aplica��o que de cada vez que carrega num bot�o, acrescenta numa
nova linha da Memo box o texto escrito na Edit box
? Seleccione a op��o relativa ao aparecimento autom�tico de Scroll Bars na memo
? Dica:
- Utilize Memo.Lines.Append
3 - C�lculo da opera��o escolhida por Radio Group (resultado em Edit
Box)
? Crie uma aplica��o com 3 edit boxes, um radio group e um bot�o
? Duas das caixas de texto (Edit Boxes) ser�o operandos para uma opera��o a
escolher pelo Radio Group a terceira caixa de texto ser� para o resultado
? O Radio Group pode escolher entre as seguintes opera��es: soma, subtrac��o e
multiplica��o
? O C�lculo ser� efectuado quando se premir o bot�o
? Dicas:
- Utilize StrToInt, e IntToStr
- Utilize RadioGroup.ItemIndex
Introdu��o ao Lazarus FEUP - DEEC P�g 35
4 - C�lculo da opera��o escolhida por Radio Group � descritivo em
Memo box
? Coloque 2 Edits, um Bot�o, um RadioGroup e um Memo e complete de forma a
obter um programa que quando carregar no bot�o seja calculada a opera��o
seleccionada no RadioGroup e o descritivo (Operando1) (opera��o) (Operando2) =
(resultado) apare�a na Memo
? Dicas:
- Utilize StrToInt, StrToIntDef e IntToStr
- Utilize RadioGroup.ItemIndex
- Utilize MemoResults.add
- Utilize soma de strings para concatena��o
? Altere o programa para que o resultado seja calculado sempre que houver
altera��es 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 situa��o 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)
Introdu��o ao Lazarus FEUP - DEEC P�g 36
5 - Desenho B�sico (canvas)
? Coloque um Timer que chama o seguinte c�digo todos os segundos
with Form1 do begin
Canvas.Ellipse( -2+Width div 2, -2+Height div 2,
2+Width div 2, 2+Height div 2);
Canvas.Line ( Width div 2, Height div 2,
9+Width div 2, Height div 2);
end;
Estude este c�digo para o compreender.
Execute e redimensione a Form para ver o efeito;
? Altere o programa para haver uma vari�vel global �rotacao� que define o �ngulo
de rota��o do marcador; acrescente um bot�o que acrescenta PI/10 radianos
Dicas:
- As vari�veis globais s�o definidas fora de qualquer fun��o (na zona de
interface ou implementa��o) e s�o conhecidas da� para diante no c�digo
- Tenha em aten��o o sentido de rota��o que se pretende obter e os eixos do
lazarus
- Utilize as fun��es 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 rota��o com o teclado: por exemplo '+' e '-' fazem rodar o marcador
numa e noutra direc��o
Dicas:
- Ponha a verdadeiro a propriedade Form.KeyPreview
- Utilize o evento Form.OnKeyPress
Introdu��o ao Lazarus FEUP - DEEC P�g 37
6 - Aplica��o multi-janela
? Crie uma aplica��o com 3 bot�es numa form; carregando no primeiro abre uma
segunda form; carregando no segundo bot�o fecha a segunda form; carregando no
terceiro bot�o, abre a form no modo �modal�
? Dicas:
- Utilizar File -> New Form
- Ver Project -> Project Options -> forms
- Utilizar Form.Show, hide, ShowModal
7 - C�lculo de somat�rio
? Projecte uma aplica��o que calcula soma1=?
i=ini
fim
?i
2
? em que ini e fim s�o
valores inteiros provenientes de caixas de texto
? Modifique a aplica��o anterior para calcular ou a soma 1 ou a soma 2 (utilize um
radio group) soma2=?
i=ini
fim
??-i?
3
?
? Modifique a aplica��o anterior para calcular ou a soma 1 ou a soma 2 ou ambas
(ou nenhuma) - utilize um TCheckBoxGroup
? Impe�a que todas as check boxes possam ficar n�o seleccionadas
8 - TXMLPropStorage e session properties
? Acrescente � aplica��o do exerc�cio anterior um TXMLPropStorage; indique o
nome do ficheiro config.xml
? Aceda ao editor de Form.SessionProperties e seleccione os valores a guardar em
disco, � sa�da do programa e que ser�o repostos � entrada do programa
? Guarde o n�mero m�nimo de propriedades para que se possa sair da aplica��o e
voltar a entrar sem perder os valores e as selec��es anteriores
- fim exerc�cios -
Introdu��o ao Lazarus FEUP - DEEC P�g 38
Liga��o do Lazarus � Base de Dados PGSQL
? � f�cil 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 � necess�rio haver uma protec��o contra ordens
contradit�rias simult�neas de diferentes utilizadores e para esse efeito utiliza-se
um objecto chamado SQLTransaction
? Para fazer perguntas (queries) sob a base de dados � necess�rio o componente
SQLQuery
? Um componente DBGrid � uma grelha autom�tica com a forma de uma
tabela, tabela essa que pode ser uma tabela tempor�ria proveniente de uma
pesquisa SQL; para utilizar este componente � ainda necess�rio uma forma de
redireccionar dados, o que � conseguido atrav�s do componente Data Source
Diferentes utiliza��es
? H� 3 formas de aceder a bases de dados sob Lazarus
� Utilizando um componente DBGrid � visualiza��es simples
� Utilizando PQConnection.ExecuteDirect � modificar dados
� Utilizando SQLQuery.Fields � recolha de dados pesquisados (resposta a
pergunta SQL)
Prepara��o
? 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)
Introdu��o ao Lazarus FEUP - DEEC P�g 39
Acesso utilizando o componente DBGrid
? Este � o teste mais visual, que apresenta dados da liga��o � BD tanto em tempo
de desenho como durante a execu��o da aplica��o; a sua utiliza��o limita-se a
mostrar dados de forma simples e autom�tica, sem flexibilidade.
? Aten��o: diversas configura��es 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 aplica��o com aspecto similar ao seguinte. A sequ�ncia de opera��es �
indicada logo de seguida:
Componente Separador �cone
PQConnection SQLdb
SQLQuery SQLdb
SQLTransaction SQLdb
DataSource DataAccess
DBGrid DataControls
Introdu��o ao Lazarus FEUP - DEEC P�g 40
? No PQConnection preencher com os respectivos valores :
- Transaction - SQLTransaction
- Database � nome da BD a utilizar, exemplo sinf0812
- HostName � nome do servidor de BD a utilizar, ex: gnomo.fe.up.pt
- UserName � nome do utilizador na BD, exemplo sinf0812
- Password � password no servidor de BD
? (Confirmar que SQLTransaction aponta para PQConnection)
? No SQLQuery preencher:
- Transac��o - SQLTransaction
- Database - PQConnection
- SQL � preencher com c�digo SQL, exemplo: select * from anytable
- (n�o preencher o campo DataSource)
? No DataSource preencher DataSet como SQLQuery
? No DBGrid preencher DataSource
? Activar todos os elementos e mesmo em tempo de desenho ser� poss�vel ver o
resultado da query feita na SQLQuery a aparecer na DBGrid
Introdu��o ao Lazarus FEUP - DEEC P�g 41
Servidor de BD
(ex.: Gnomo.fe.up.pt)
DatabaseName
HostName
UserName
Password SQL
Execu��o directa de c�digo SQL (ExecuteDirect)
? Para alterar a BD, utilize c�digo similar ao seguinte:
...
begin
enter:=chr(13)+chr(10);
s:='update copias set nalugueres=nalugueres+1 where'+
'codcopia='+IntToStr(EstaCopia); // string de c�digo 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;
Introdu��o ao Lazarus FEUP - DEEC P�g 42
Servidor de BD
(ex.: Gnomo.fe.up.pt)
PQConnection.
ex.: update tabela set column=1
ExecuteDirect
DatabaseName
HostName
UserName
Password
Utilizar Perguntas SQL (Fields)
? Para obter os campos e as linhas de resultado de uma pergunta SQL, utilize c�digo
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 atrav�s 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 � necess�rio indicar o
tipo de dados em causa: SQLQuery.Fields[0].AsInteger e
SQLQuery.Fields[1].AsString
Introdu��o ao Lazarus FEUP - DEEC P�g 43
Servidor de BD
(ex.: Gnomo.fe.up.pt) SQLQuery. Fields
DatabaseName
HostName
UserName
Password SQL
Dicas
? Consulte o ficheiro das perguntas frequentes (nos conte�dos da cadeira)
? Por vezes o debugguer pode dar problemas (especialmente sob windows), pelo
que pode ser interessante correr o execut�vel via Sistema Operativo
? Pode ser necess�rio dar permiss�es de acesso � rede na firewall tanto ao lazarus
como � aplica��o que se cria em tempo de compila��o
Exerc�cio Livre
? Este exerc�cio livre compara uma aplica��o baseada em Base de Dados com uma
outra que utiliza um ficheiro que � lido para mem�ria
? Considere a empresa QuerLista, S.A. que deseja ver implementada uma lista
telef�nica.
? Uma empresa chamada S�Lazarus vai desenvolver uma aplica��o que utiliza de
uma list-box de Lazarus para armazenar os dados que ser�o gravados em disco
atrav�s 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 n�mero de telefone guardando a informa��o na mesma linha
de uma �nica ListBox
? Uma outra empresa chamada LazGres vai desenvolver uma aplica��o rival fazendo
uso de PostGreSQL e Lazarus
? Ambas as empresas v�o utilizar uma listagem com apenas duas colunas: nome e
n�mero de telefone: lista_telef(nome, n�mero_telefone)
? Para cada uma das aplica��es rivais, crie uma aplica��o gr�fica que permita
? Inserir uma entrada nova
? Apagar uma determinada entrada
? Listar toda a lista telef�nica
? Pesquisar atrav�s de nome e n�mero_telefone
? Deve ser poss�vel fazer perguntas de fragmentos de dados, exemplo listar
todos os nomes �Sousa� registados na base de dados
? Comece por projectar a interface gr�fica que deve, na medida do poss�vel ser o
mais comum poss�vel a ambas as aplica��es
? Compare ambas as aplica��es e caracterize a possibilidade de crescimento de
cada uma das bases de dados incluindo para o caso de m�ltiplos acessos em
simult�neo em diversos computadores diferentes
Introdu��o ao Lazarus FEUP - DEEC P�g 44
Alguns Comandos SQL (micro resumo)
Manipula��o 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 min�sculas
? DROP TABLE table_name
Manipula��o 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
Introdu��o ao Lazarus FEUP - DEEC P�g 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 -
Introdu��o ao Lazarus FEUP - DEEC P�g 46
FAQ Lazarus
1. Porqu� Lazarus ?
O Lazarus � um programa em r�pida evolu��o, leve e que funciona em diversos
sistemas
operativos.
� mais r�pido sob linux que sob windows.
Deriva do Pascal que tem mais verifica��es em run-time que o C e por isso
frequentemente o pr�prio Pascal assinala erros que doutra forma teriam causado maus
funcionamentos dif�ceis de explicar.
E � livre, utiliza a licen�a LGPL, ver http://www.freepascal.org/faq.html
O Lazarus � uma aplica��o normal de FreePascal (FPC) que � uma implementa��o aberta
de uma linguagem pr�xima do Object Pascal proposto pelo Borland Delphi.
2. Lazarus & POE
O Lazarus � um IDE e um RAD e permite fazer programa��o de diversos tipos incluindo
Programa��o 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 vers�o do Lazarus
� Testar o programa fora do IDE, executando-o atrav�s do S.O.
� Desligar o debugger do Lazarus
� Sob Linux e pretendendo obter informa��o adicional relativamente a algum
tipo de erros com falta de informa��o de debug (exemplo: erros do FPC):
� Executar o Lazarus dentro de uma shell de texto
� Executar a aplica��o criada dentro de uma shell
Introdu��o ao Lazarus FEUP - DEEC P�g 47
4. Lazarus, PostGreSQL e erros relativos a libpq.xxx
� Windows:
Para o Lazarus se ligar ao servidor de PGSQL � necess�rio que:
o Na m�quina 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 vari�vel path (que existe
sempre) e acrescentar no final um ponto e v�rgula 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 extens�o mais avan�ada
o Acrescentar o path do liqpq.so.* na sec��o libraries do ficheiro de
configura��o do FPC que geralmente � o /etc/fpc.cfg ; por exemplo:
-Fl/usr/local/pgsql/lib
5. Erro �Circular Unit Reference�
� Mover as unidades n�o necess�rias na �rea de interface para a �rea de
implementa��o,
isto �, tirar do �uses� da interface as unidades referentes �s forms do utilizador
e criar /
acrescentar a um �uses� depois da implementa��o as nossas unidades
6. Strings Din�micas (' plicas dentro de ''plicas'' ')
� Em lazarus as cadeias de caracteres s�o delimitadas por 'plicas'
� � perfeitamente poss�vel p�r "aspas" dentro de ' �plicas� '
� Um par de plicas dentro de uma string Lazarus equivale a uma string com uma plica
� Exemplos:
o Executando o c�digo: s: = ' 1 2 3 '' 4 5 6 '' 7 8 9 '' ';
s ficar� com a string: 1 2 3 ' 4 5 6 ' 7 8 9 '
o Considere a seguinte query de SQL:
SELECT nome FROM paciente LIKE 'T%'
O c�digo necess�rio para produzir esta query �:
s := 'SELECT nome FROM paciente LIKE 'T%''';
Para utilizar informa��o de uma edit box:
s := 'SELECT nome FROM paciente LIKE '''+ EditBox.text+'''';
a edit box teria por exemplo T%
notar ainda que o espa�o depois do LIKE � essencial
Introdu��o ao Lazarus FEUP - DEEC P�g 48
7. Pesquisas que n�o funcionam e Esquemas e / ou Rela��es (Tabelas)
que n�o se consegue aceder
� Utilizar tabelas com nomes s� em min�sculas
� Por o nome da tabela entre aspas, exemplo �Tabela�
� Utilizar o esquema p�blico ou �Esquema�.�Tabela�
8. Passwords
� Utilizar a propriedade Edit.PasswordChar
9. Comando Strip
� Para reduzir o tamanho de um execut�vel, utilizar o comando �strip�, tipicamente
no path do S.O. Linux; em windows, utilizar o execut�vel, tipicamente em (adaptar
conforme a directoria de instala��o e as vers�es espec�ficas 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 execut�vel (qualquer S.O.) que
mant�m todas as funcionalidades mas perde informa��o de debugging.
10. Ficheiros que podem ser apagados
O lazarus utiliza diversos ficheiros tempor�rios, 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 -
Introdu��o ao Lazarus FEUP - DEEC P�g 49
Listagem de Teclas e funcionalidades
? CTRL + Space � completar c�digo
? CTRL + SHIFT + Space � Par�metros da chamada ao procedimento/fun��o
? CTRL + J � Code Templates
? CTRL + SHIFT + CIMA / CTRL + SHIFT + BAIXO � declara��o / implementa��o
? CTRL + Clique - declara��o / defini��o (de qualquer vari�vel, etc)
? CTRL + H � Leva ao ponto de edi��o anterior
? CTRL + SHIFT + H � Leva ao ponto de edi��o seguinte
? F12 - troca entre form e c�digo
? F11 - activa o object inspector
? CTRL + SHIFT + C � completa classe / implementa��o de classe
? CTRL + Y � Apagar uma linha
? F7 � Debugger -> Step Into
? F8 � Debugger -> Step Over
? F9 � Run
Introdu��o ao Lazarus FEUP - DEEC P�g 50