Você está na página 1de 19

Sistemas de Informa��o

Introdu��o � ferramenta Lazarus


asousa@fe.up.pt � Vers�o de 2010 / Maio / 12
MIEEC
3� ano
Introdu��o
A ferramenta �Lazarus� � uma ferramenta de programa��o potente e complexa, que vai
ser utilizada como ambiente de desenvolvimento integrado (IDE) para a linguagem
Free
Pascal (FPC). A ferramenta em causa � totalmente �cross platform� e est� instalada
nas
m�quinas do CICA, na FEUP nos Sistemas Operativos S.O. Windows e em Linux. Este
tutorial introdut�rio abordar� apenas o IDE do Lazarus e a introdu��o �
�Programa��o
Visual�, Programa��o Orientada a Eventos (POE).
Neste tutorial ser� apresentado o IDE e as principais ideias chave que permitir�o
ao
aluno posteriormente continuar a aprendizagem com autonomia superior.
Na leitura inicial deste tutorial, n�o salte passos nem se afaste demasiado dos
passos
mencionados. O aluno pode e deve repetir o gui�o j� depois de ter uma percep��o
mais
completa do funcionamento de conjunto de todos os elementos envolvidos e nessa fase
dedicar-se a uma explora��o mais abrangente.
N�o se esque�a de consultar sempre que necess�rio o cap�tulo final "Listagem de
Teclas
e funcionalidades" , na p�g. 50.
Bom Trabalho!
Armando Sousa
�ndice

Introdu��o ........................................................................
...................... 1

Tutorial ..........................................................................
....................... 2
Exerc�cios de
Lazarus ...........................................................................
..... 35
Liga��o do Lazarus � Base de Dados
PGSQL ..................................................... 39
Alguns Comandos SQL (micro
resumo) ............................................................ 45
FAQ Lazarus Sistemas de
informa��o ............................................................. 47
Listagem de Teclas e
funcionalidades ............................................................. 50
Introdu��o ao Lazarus FEUP - DEEC P�g 1
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

? As janelas n�o ter�o o aspecto mostrado; altere as posi��es e dimens�es


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 bot�o na form, para isso:
1.5.1 - Clique no componente TButton, dentro do separador Standard:
1.5.2 - Clique na form:
1.6 - O bot�o que acabou de criar foi automaticamente chamado de
Button1; fa�a duplo clique em cima dele e ser� conduzido at� ao c�digo a
executar quando se carregar no bot�o (dentro do source editor):
Introdu��o ao Lazarus FEUP - DEEC P�g 3
1.7 - Dentro do begin e antes do end, escreva o c�digo
Button1.Caption:='Ol� Mundo';
este c�digo altera o texto associado ao bot�o para que este passe a ser �Ol�
Mundo�; o bot�o chama-se Button1 e o texto dentro deste bot�o pertence-lhe
e � acess�vel atrav�s de Button1.Caption; para atribuir uma cadeia de
caracteres (uma string) ao texto dentro deste bot�o utiliza-se o c�digo
mencionado; a atribui��o faz-se com o operador := e a string � identificada
como estando entre 'plicas' (cuidado, 'plicas' n�o s�o "aspas" ); pode-se trocar
mai�sculas e min�sculas; o aspecto no IDE ser� pr�ximo do mostrado de
seguida:
O c�digo 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 localiza��o no disco local (n�o
utilize drives em rede pois a cria��o do execut�vel fica muito lenta). Aceite as
os nomes por omiss�o (default) em min�sculas.
1.9 - Execute o programa premindo a tecla F9 ou menu Run -> Run e observe
o desenrolar das mensagens na janela de mensagens: primeiro v�m a
mensagem da invoca��o do compilador do FPC; se n�o existirem erros, ent�o
vir� a mensagem �linking� assinalando o processo de constru��o do execut�vel
e depois a mensagem de sucesso:
1.10 - O programa que acaba de ser criado � ent�o executado pelo S.O. e
aparece a janela do primeiro programa sob Lazarus:
1.11 - Prima o bot�o com o rato e observe que o texto associado ao bot�o se
modificou para:
Introdu��o ao Lazarus FEUP - DEEC P�g 4
1.12 - Redimensione e mova a janela do programa para se assegurar que
esta janela do programa se comporta como qualquer outra aplica��o do S.O.
1.13 - Feche a aplica��o premindo o do canto superior direito da janela
do programa que vem sendo executado
1.14 - Ideias a reter:
? O Lazarus permite fazer aplica��es gr�ficas para S.O. gr�ficos e orientados a
eventos
? Este projecto inclui uma parte gr�fica (a �form�) e uma parte de c�digo escrito
FPC (a �unit�)
? A programa��o inclui desenhar a form que depois ser� executada e o c�digo que
ser� executado quando se carregar no bot�o durante a execu��o do programa
? A execu��o do programa faz aparecer a janela anteriormente desenhada dentro do
IDE do lazarus; quando se carrega no bot�o, � chamado c�digo que escrevemos no
programa
? A janela que � desenhada no IDE do lazarus antes da execu��o pelo SO denominase
de form em tempo de desenho (design-time); esta mesma form aparece em tempo
de execu��o (em run-time); comparar as figuras 1.5.2 e 1.9
? A aplica��o criada � uma das muitas que est� a ser executada pelo S.O.
? Relativamente ao c�digo FPC, conv�m reter:
� Atribui��o com o operador �:=�
� Para aceder a propriedades, utilizar �.�, por exemplo �Button1.Caption�
� O FPC � insens�vel a mai�sculas e min�sculas
� Cadeias de caracteres (strings) dentro de 'plicas'; n�o mudar de linha dentro de
uma cadeia de caracteres
1.15 - Exerc�cio Livre � Crie e teste uma nova aplica��o que execute o
c�digo ShowMessage('Ol� Mundo!!!');
Introdu��o ao Lazarus FEUP - DEEC P�g 5
2 - Cria��o de projecto com dois bot�es
2.1 - Regresse ao IDE do Lazarus para alterar o projecto anterior
2.2 - Se a Form1 n�o estiver vis�vel, escolha View -> Forms -> Form1 -> OK
2.3 - Acrescente um outro bot�o � nossa janela:
2.4 - Observe o Object Inspector e confirme que a nossa janela, a �form�,
tem o nome Form1; o primeiro bot�o chama-se Button1 e o segundo Button2;
naturalmente ambos bot�es est�o dentro da Form1.
2.5 - Fa�a duplo clique no bot�o 2; o cursor aparecer� no source editor,
dentro do procedimento Button2Click, i.e., o procedimento que ser�
chamado quando se carregar no bot�o 2; acrescente o seguinte c�digo:
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 n�o houver erros, este ser�
executado, aparecendo a form em run-time:
2.8 - Prima o Button1 e confirme a altera��o:
Introdu��o ao Lazarus FEUP - DEEC P�g 6
2.9 - Prima o Button2 e veja o aparecimento da seguinte caixa:
2.10 - Feche a aplica��o com
2.11 - Regresse ao IDE lazarus e prima F12 at� ver a form em design time
2.12 - Fa�a duplo clique no Button1; o cursor aparecer� no source editor,
dentro do procedimento Button1Click; prima F12 para alternar source e
form e depois fa�a duplo clique no Button2 para o cursor aparecer dentro do
procedimento Button2Click; navegue no source editor at� achar o
procedimento Button1Click:
2.13 - Exerc�cio Livre - Adicione um terceiro bot�o 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 bot�es, Button1 e Button2
? A �unit� passou a ter, entre outros elementos de c�digo, os procedimentos
Button1Click e Button2Click
? Os dois bot�es s�o inst�ncias de objectos do tipo TButton; diz-se que TButton �
uma
classe; geralmente, classes e tipos s�o identificados come�ando pela letra �T�
? Cada bot�o tem o seu respectivo procedimento de resposta ao clique em run-time,
Button1Click e Button2Click que s�o diferentes e n�o se confundem
? � o S.O. que se encarrega de chamar a rotina certa de cada vez que, em run-time,
se
carrega em determinado bot�o, isto �, o S.O. � que gera os eventos e chama rotinas
no programa que se vem criando � da� este tipo de programa��o se designar
Programa��o Orientada a Eventos
Introdu��o ao Lazarus FEUP - DEEC P�g 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 s�o
listadas por ordem alfab�tica; a figura seguinte mostra algumas propriedades
do Button1:
3.2 - Seleccione agora o separador Events; este separador mostra todos os
eventos dispon�veis para os bot�es TButton, isto �, todos os acontecimentos
relacionados com inst�ncias ; 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
Introdu��o ao Lazarus FEUP - DEEC P�g 8
3.4 - O resumo das propriedades dos bot�es s�o apresentadas de seguida:
Mude o nome do Button1 para BChangeCaption e do bot�o 2 para BShowBox;
mude apenas a propriedade �Name� do Button1 e do Button2; depois das
mudan�as o Object Inspector mostrar�:
E o c�digo ser� automaticamente alterado para:
Introdu��o ao Lazarus FEUP - DEEC P�g 9
3.5 - Altere agora as Captions dos bot�es, tal como nas seguintes figuras:
Observe como as mudan�as nas propriedades dos bot�es ficam efectivas
imediatamente e a Form em �Design Time� � imediatamente alterada para
reflectir as mudan�as
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 bot�es. O Object Inspector reflectir� as mudan�as e a Form passar� a
ostentar a nova inscri��o:
3.7 - Escolha File -> Save All
3.8 - Execute a nova vers�o do projecto com F9 para verificar as diferen�as
Introdu��o ao Lazarus FEUP - DEEC P�g 10
3.9 - Ideias a reter:
? Os nomes dos componentes tal como bot�es devem ser descritivos
? Ap�s mudan�a do nome dos componentes, o c�digo vem alterado automaticamente
? Todos as inst�ncias TButton (isto �, todos os bot�es) devem come�ar pela letra
�B�
- isto permitir� mais tarde que todos os bot�es sejam facilmente localizaveis
? Mudan�as em propriedades de componentes visuais s�o vis�veis desde logo em
�design-time� - da� esta programa��o ser Visual
? Tanto a Form como cada um dos bot�es 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 s�o
conceitos similares para classes diferentes
Introdu��o ao Lazarus FEUP - DEEC P�g 11
4 - Aplica��o com Edit e Check Box
4.1 - Crie um novo projecto de aplica��o (Project -> New project ->
Application; para mais detalhes veja 1.2)
4.2 - Arranje as janelas a seu gosto (por exemplo, tal como mostrado em
1.4)
4.3 - Escolha no menu File -> Save All e grave todos os ficheiros numa outra
directoria diferente da anterior; n�o utilize drives em rede pois a cria��o do
execut�vel fica muito lenta; utilize os nomes �myunit.pas� e �project2.lpi�
(utilize min�sculas); deste forma todos os ficheiros deste novo projecto ficam
na nova directoria; o Lazarus utiliza e cria diversos ficheiros que s�o mantidos
sem interven��o humana
4.4 - Acrescente um TEdit � Form:

A classe TEdit fornece a funcionalidade de uma caixa de edi��o de texto


standard do S.O. (texto gen�rico 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 padr�o 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 op��o est� validada depende de configura��es do S.O..
Introdu��o ao Lazarus FEUP - DEEC P�g 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 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

Introdu��o ao Lazarus FEUP - DEEC P�g 18


7 - Navega��o no c�digo e form/c�digo
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 edi��o 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 est�o dentro da form:
Este c�digo refere que a Form1 inclui um TButton com nome CBAllowChange
7.5 - Depois do �end� que indica o final da declara��o do tipo TForm,
aparece a instancia��o 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� � implementa��o desse procedimento ou fun��o; prima CTRL +
Shift + seta_para_cima ou CTRL + H para ir de novo para a declara��o;
exercite para perceber
Introdu��o ao Lazarus FEUP - DEEC P�g 19
7.7 - Encontre o C�digo seguinte, mantenha CTRL premido e clique em
StringIn para ser conduzido � declara��o 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 bot�o
7.11 - Prima F12 de novo para ver que na declara��o da form deixou de
constar o bot�o
O c�digo do bot�o BUpdateClick mant�m-se mas n�o ser� nunca chamado.
Introdu��o ao Lazarus FEUP - DEEC P�g 20
7.12 - Ideias a reter:
? As altera��es feitas na Form mudam o c�digo da respectiva unit
? Existe a possibilidade de ter c�digo que nunca � chamado
? Quem decide que c�digo � executado e por que ordem � o S.O. que chama a rotina
dentro da aplica��o 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 c�digo (�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 n�o (unit pode ser visual ou n�o)
? Obs: Nem todas as informa��es da Form s�o mantidas dentro da unidade � existem
outras informa��es, guardadas noutros ficheiros
? Por seguran�a e facilidade de utiliza��o, criar uma directoria nova para cada
projecto
Lazarus e guardar todos os ficheiros desse projecto nessa mesma directoria
? Nunca alterar c�digo que n�o foi feito por n�s!
? Navega��o:
? F12 troca entre form e c�digo
? F11 activa o object inspector
? CTRL + Clique leva � declara��o de alguma coisa
? CTRL + SHIFT + cima e CTRL + SHIFT + baixo trocam entre declara��o e
implementa��o de procedimentos e fun��es
Introdu��o ao Lazarus FEUP - DEEC P�g 21
8 - Aplica��o com RadioGroup e Memo
8.1 - Crie um novo projecto de aplica��o: Project->New Project-
>Application ->Create
8.2 - Desenhe a seguinte Form que cont�m um TRadioGroup e um TMemo,
ambos situados no separador Standard:
8.3 - Encontre a propriedade Lines do Memo, entre dentro desta qudr�cula e
depois aparecer� um bot�o com �...�; prima este bot�o (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
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

Você também pode gostar