• Nenhum resultado encontrado

Programação Visual no Lazarus Estruturas de Controle

No documento A Biblia Do Lazarus (páginas 114-128)

Consideraremos agora as principais estruturas de controle do Object Pascal do Free Pascal. Se você está acostumado com o Delphi, a sintaxe dos comandos é a mesma nos dois. Para fixar os conceitos desenvolveremos alguns exemplos. Antes de prosseguir, talvez queira recapitular sobre propriedades e eventos no capitulo anterior.

Estrutura TRY .. EXCEPT .. END:

Monitora o código entre TRY e EXCEPT. Caso ocorra um erro neste código, a execução do programa é desviada para a execução do código entre EXCEPT e END. Se não ocorrer um erro o código entre EXCEPT e END não é executado.

Sintaxe: try

{código monitorado} except

{código para tratar um erro} end;

Veja um exemplo de uso mais a frente neste capitulo. Estrutura IF … THEN … ELSE:

Estrutura de decisão. Executa um comando ou uma cadeia de comandos se uma determinada condição for verdadeira. Se for

Em pseudo linguagem – Portugol:

SE {condição verdadeira} ENTÃO {faça} SENÃO {faça}

A sintaxe desta estrutura em Object Pascal pode ser: if (condição) then {uma única linha de comando};

ou

if (condição) then begin {várias linhas de comando} end;

ou if (condição) then

{uma única linha de comando} else

{uma única linha de comando}; ou

if (condição) then begin {várias linhas de comando} end else begin

{várias linhas de comando} end;

Programa Exemplo – IF ... THEN ... ELSE:

Crie uma pasta na pasta livro_projetos com o nome

exemplo9_1. No Lazarus, crie um novo projeto do tipo

Aplicação. Salve na pasta exemplo9_1 o projeto com o nome

Mude o nome do formulário para fPrincipal e o Caption para

Exemplo 9.1 .

Dê um duplo clique no fundo do formulário. Automaticamente será criado o evento OnCreate para o mesmo. Digite o código em negrito na posição indicada:

procedure TfPrincipal.FormCreate(Sender: TObject); begin

DecimalSeparator := ','; ThousandSeparator := '.'; end;

Volte ao formulário (pressione F12) e coloque dois TLabel, dois

TEdit e dois TButton da paleta Standard.

Mude o nome do primeiro TEdit para edNum1 e do segundo para edNum2 . Apague o conteúdo da propriedade Text dos dois TEdit's .

Altere o Caption do primeiro TLabel para “Número 1” e do segundo para “Número 2” (sem as aspas).

Modifique o nome dos botões para btMaior e btMenor, e os

Caption's para Maior e Menor, respectivamente.

Organize os componentes no formulário para ficarem como mostra a próxima figura:

Crie o evento OnClick para o botão btMaior e digite o código em negrito nas posições indicadas (a escrita dos comentários é opcional):

procedure TfPrincipal.btMaiorClick(Sender: TObject);

var

// variáveis do mesmo tipo podem ser declaradas // na mesma linha, separadas por virgula

num1, num2: double; begin

try

// Início do código monitorado num1 := StrToFloat(edNum1.Text); num2 := StrToFloat(edNum2.Text); if (num1 = num2) then begin

// Os comandos abaixo até o end; , só serão // executados se os dois números forem iguais ShowMessage('Os dois números são iguais'); exit; // interrompe a execução da procedure end;

// --- Inicio do if --- if (num1 > num2) then

// A mensagem a baixo só é mostrada se

// o primeiro número for maior que o segundo ShowMessage('O primeiro número é o maior!') else

// A mensagem a baixo só é mostrada se

// o segundo número for maior que o primeiro ShowMessage('O segundo número é o maior!'); // --- Fim do if ---

// fim do código monitorado except

// Inicio do código para tratar erros ShowMessage('Digite números válidos!');

// Fim do código para tratar erros

NOTA: Sintaxe para pegar o valor da propriedade de um componente:

[variável] := [nome_componente].[nome_propriedade] ; E para atribuir um novo valor a propriedade de um componente:

[nome_componente].[nome_propriedade] := [novo_valor] ; Crie o evento OnClick para o botão btMenor e digite o código em negrito nas posições indicadas:

procedure TfPrincipal.btMenorClick(Sender: TObject);

var

num1, num2: double; begin

try

num1 := StrToFloat(edNum1.Text); num2 := StrToFloat(edNum2.Text); if (num1 = num2) then begin

ShowMessage('Os dois números são iguais'); exit;

end;

if (num1 < num2) then

ShowMessage('O primeiro número é o menor!') else

ShowMessage('O segundo número é o menor!'); except

ShowMessage('Digite números válidos!'); end;

end;

Execute e teste o programa.

ATENÇÃO: Durante a execução do programa, se você digitar em um dos TEdit's um texto, isso vai resultar num erro. A

aparecerá primeiro a mensagem do depurador, que é responsável por fazer o monitoramento dos erros que ocorrem durante o teste do programa. Para continuar a execução do programa, clique no botão Continuar.

Figura 9.2 – Mensagem do Depurador de Erros

Estrutura WHILE .. DO:

Repete uma linha ou várias linhas de código, enquanto uma determinada condição for verdadeira. O comando BREAK causa uma saída imediata do laço de repetição, passando a executar os comandos seguintes, fora do WHILE, se houverem. Já o comando CONTINUE retorna o fluxo do laço para o início do WHILE.

Em pseudo linguagem (Portugol):

ENQUANTO {condição verdadeira} FAÇA {isso} Sintaxe:

while (condição) do {único comando}; while (condição) do begin

{vários comandos} end;

Programa Exemplo – WHILE … DO:

Crie uma pasta na pasta livro_projetos com o nome

exemplo9_2. No Lazarus, crie um novo projeto do tipo

Aplicação. Salve na pasta exemplo9_2 o projeto com o nome

exemplo9_2.lpi e a unit com o nome uprincipal.pas .

Mude o nome do formulário para fPrincipal e o Caption para

Exemplo 9.2 .

No formulário, coloque dois TLabel, um TEdit, um TMemo (este componente pode mostrar um texto com várias linhas) e um

TButton da paleta Standard. Altere o nome do TEdit para edLimite e apague o conteúdo da propriedade Text . Mude o Caption do primeiro TLabel para “Números Pares de 2 até:” e

do segundo para “Limite de 1000”. Troque, também, a propriedade Color deste para clRed (vermelho). Modifique o nome do botão para btMostrar, e o Caption para Mostrar. Mude o nome do TMemo para meListagem, a propriedade ReadOnly para True e ScrollBars para ssVertical.

Organize os componentes no formulário para ficarem como mostra a próxima figura:

No evento OnClick do botão, digite o código em negrito nas posições indicadas:

procedure TfPrincipal.btMostrarClick(Sender: TObject);

var

limite, contador: integer; begin

contador := 2; // Inicializa a variável contador // Limpa as linhas do TMemo

meListagem.Lines.Clear; try

limite := StrToInt(edLimite.Text); if (limite > 1000) then begin

ShowMessage('Ultrapassou o Limite de 1000!'); Exit; // Sai da procedure

end;

while (contador <= limite) do begin

meListagem.Lines.Add(IntToStr(contador)); // Incrementa de 2 em 2 a variável contador Inc(contador, 2);

end; except

ShowMessage('Digite um Limite Válido!'); end;

end;

Estrutura REPEAT .. UNTIL:

Similar ao WHILE .. DO, mas testa a condição no fim do laço de repetição. Pelo menos uma vez os comandos do laço serão executados.

Aceita BREAK e/ou CONTINUE (Veja Estrutura WHILE .. DO). Em pseudo linguagem (Portugol):

Sintaxe: repeat

{vários comandos} until (condição);

Programa Exemplo – REPEAT .. UNTIL:

Crie uma pasta na pasta livro_projetos com o nome

exemplo9_3. No Lazarus, crie um novo projeto do tipo

Aplicação. Salve na pasta exemplo9_3 o projeto com o nome

exemplo9_3.lpi e a unit com o nome uprincipal.pas . Mude o

nome do formulário para fPrincipal e o Caption para Exemplo

9.3 .

No formulário, coloque dois TLabel, um TEdit, um TMemo e um

TButton da paleta Standard. Altere o nome do TEdit para edLimite e apague o conteúdo da propriedade Text . Mude o Caption do primeiro TLabel para “Números Ímpares de 1 até:” e

do segundo para “Limite de 1000”. Troque, também, a propriedade Color deste para clRed . Modifique o nome do botão para btMostrar, e o Caption para Mostrar. Mude o nome do TMemo para meListagem, a propriedade ReadOnly para

True e ScrollBars para ssVertical. Organize os componentes no

No evento OnClick do botão, digite o código em negrito nas posições indicadas:

procedure TfPrincipal.btMostrarClick(Sender: TObject);

var

limite, contador: integer; begin

contador := 1;

meListagem.Lines.Clear; try

limite := StrToInt(edLimite.Text); if (limite > 1000) then begin

ShowMessage('Ultrapassou o Limite de 1000!'); exit;

end; repeat

meListagem.Lines.Add(IntToStr(contador)); // Incrementa de 2 em 2 a variável contador Inc(contador,2);

until (contador > limite); except

ShowMessage('Digite um Limite Válido!'); end;

end;

Estrutura FOR .. TO (DOWNTO) .. DO:

Laço com limite de repetição previamente definido por variável. Usando DOWNTO a contagem é em ordem decrescente.

Pode-se usar BREAK ou CONTINUE (Veja Estrutura WHILE .. DO).

Sintaxe:

for [variável]:=[valor_inicial] to [valor_final] do {comando}

for [variável]:=[valor_inicial] to [valor_final] do begin

{comandos} end;

Programa Exemplo – FOR .. TO (DOWNTO) .. DO:

Crie uma pasta na pasta livro_projetos com o nome

exemplo9_4.

No Lazarus, crie um novo projeto do tipo Aplicação. Salve na pasta exemplo9_4 o projeto com o nome exemplo9_4.lpi e a unit com o nome uprincipal.pas .

Mude o nome do formulário para fPrincipal e o Caption para

Exemplo 9.4 .

No formulário, coloque dois TLabel, um TEdit, um TMemo e um

TButton da paleta Standard. Altere o nome do TEdit para edLimite e apague o conteúdo da propriedade Text .

Mude o Caption do primeiro TLabel para “Tabuada de

Multiplicar de:” e do segundo para “Limite de 10”. Troque,

também, a propriedade Color deste para clRed .

Altere o nome do botão para btMostrar, e o Caption para

componentes no formulário para ficarem como mostra a próxima figura:

Figura 9.5 – Exemplo 9.4

No evento OnClick do botão digite o código em negrito nas posições indicadas:

procedure TfPrincipal.btMostrarClick(Sender: TObject);

var

limite, contador: integer; l1, c1, s1: string;

begin

meListagem.Lines.Clear; try

limite := StrToInt(edLimite.Text); if (limite > 10) then begin

ShowMessage('Ultrapassou o Limite de 10!'); Exit;

end;

Str(limite : 2 , l1);

// Str – Guarda o valor de uma variável // numérica em outra do tipo string (texto); // Sintaxe:

Str((limite * contador) : 2 , ns1); meListagem.Lines.Add(l1 + ' X ' + c1 + ' = ' + s1);

end; except

ShowMessage('Digite um Limite Válido!'); end;

end;

Execute e teste o programa. Estrutura CASE .. OF:

Permite a execução seletiva de comandos. Similar a uma sequência de vários IF's.

Sintaxe: case [variável_seletora] of [caso 1]: {comando} [caso 2]: begin {vários_comandos} end; [caso n]: {comando} [else] {comandos} end; Ex.: case operacao of '+': ShowMessage('Soma'); '-': ShowMessage('Subtração'); 'x': ShowMessage('Multiplicação');

end;

OBS.: A variável seletora do comando CASE só pode ser do tipo integer, char (um só caractere) ou boolean.

No próximo capítulo será considerado o uso na prática do comando CASE.

Bem, consideramos as estruturas básicas de programação em Object Pascal e vimos alguns exemplos de uso através de pequenos programas visuais. No capitulo seguinte, vamos trabalhar exemplos mais complexos e extensos ao passo que consideraremos outros recursos do Free Pascal e do Lazarus.

Programação Visual no Lazarus

No documento A Biblia Do Lazarus (páginas 114-128)

Documentos relacionados