Professional Documents
Culture Documents
com/WallStreet/Exc
hange/1726/computing/delphi/delphi_3.ht
m
2.1.1. INSTRUÇÕES IF
Este é o tipo mais básico de instrução condicional e pode ser usada para
executar um trecho de programa caso uma condição for satisfeita (if –then),
ou, mais genericamente, para escolher entre duas instruções (if-then-else). A
sintaxe geral da instrução if é a seguinte:
if condição then
[bloco de instruções 1]
else
[bloco de instruções 2];
Composto se as condições, e múltiplas declarações
Nós podemos ter várias condições para a condição se. E nós podemos ter
mais do que uma declaração para a outra e em seguida cláusulas. Aqui estão
alguns exemplos
Note que não deve haver ponto-e-vírgula após o primeiro bloco de instruções.
Isto ocorre porque a instrução if-then-else deve ser lida como uma linha
inteira. Como teste, inicie um novo projeto e acrescente duas CheckBoxes e
três Botões de Comando no formulário, conforme a Figura 2.1 a seguir. Não é
necessário mudar os nomes ou legendas dos componentes. Dando um duplo
clique no primeiro botão e escreva o seguinte código:
if CheckBox1.checked then
ShowMessage ('CheckBox1 está selecionada ')
end;
if CheckBox1.checked then
else
end;
end;
Note que usamos o operador booleano and para compor uma condição de
duas partes, que só será verdadeira se ambas as caixas estiverem
selecionadas.
2.1.2. INSTRUÇÃO CASE
Para testar o Case, salve o projeto anterior e inicie um novo, inserindo uma
caixa de edição e dois botões, conforme a Figura 2.2 abaixo.
Numero := StrToInt(edit1.text);
case Numero of
else
end;
Podemos usar o Case também para testar intervalos de valores. Por exemplo,
escreva o seguinte trecho no evento click do botão 2:
Numero := StrToInt(edit1.text);
case Numero of
else
end;
end;
begin
end;
begin
end;
begin
I:=0;
while I < 10 do
begin
ShowMessage(IntToStr(I));
I:= I+1;
end;
end;
begin
I:=0;
repeat
ShowMessage(IntToStr(I));
I:=I+1;
until I>10;
end;
2.3. VARIÁVEIS
var
Numero: Integer;
Fechado: Boolean;
Uma tentativa de realizar uma operação com tipos de dados diferentes resulta
em um erro de compilação. Isto aconteceria se tentássemos, por exemplo,
somar Numero e Fechado.
Constantes podem ser declaradas de forma semelhante, com auxílio da
palavra-chave const:
const
Pi = 3.141592;
Nome = ‘Alvaro’;
Note que não usamos, aqui, o sinal de atribuição ":=", e sim o sinal de
igualdade convencional.
FUNÇÃO DESCRIÇÃO
Chr Converte um número ordinal em um caractere ANSI
Converte um real em um inteiro, arredondando a parte
Round
decimal
Converte um real em um inteiro, truncando a parte
Trunc
decimal
Retorna a parte inteira de um argumento de ponto
Int
flutuante
IntToStr Converte um número em um string
Converte um string em um inteiro, levantando uma
StrToInt exceção (erro) caso o string não represente um inteiro
válido
Converte um string em um inteiro, usando um valor
StrToIntDef
padrão se o string não estiver correto
Converte um string em um número (rotina incluída para
Val
compatibilidade com o Turbo Pascal)
Converte um string em um número, usando parâmetros
Str de formatação (rotina incluída para compatibilidade com
o Turbo Pascal)
Converte um valor de ponto flutuante em um registro
FloatToDecimal (record) incluindo sua representação decimal (expoente,
dígitos, sinal)
Converte um valor de ponto flutuante para sua
FloatToStr
representação string usando formatação padrão
StrToFolat Converte um string e, um valor de ponto flutuante
Além dos tipos pré-definidos, o Object Pascal emprega a idéia de tipos de
dados definidos pelo usuário, que foi introduzida pela primeira vez no Pascal,
não estando presente nas linguagens anteriores. Os programadores podem
definir seus próprios tipos de dados por meio de construtores de tipos, tais
como subintervalos (subranges), matrizes (arrays), registros (records),
enumerações, ponteiros e conjuntos. A seguir, discutiremos brevemente cada
um destes tipos.
Este tipo permite que você crie uma lista organizada de itens. Para usar um
tipo você deve antes declará-lo com a palavra reservada type. Por exemplo,
um tipo enumerado que descreve os dias da semana pode ser declarado da
seguinte maneira:
implementation
{$R *.DFM}
type
Semana = (Segunda, Terça, Quarta, Quinta, Sexta, Sábado,
Domingo);
var
Plantao : Semana;
Plantao := Segunda;
Plantao := Terça;
etc.
type
Salario_faixa1 = 500 .. 1000;
Note que usamos dois pontos para separar os limites do suintervalo, e não
vírgulas. Isto permite que o compilador identifique o tipo como um subintervalo
e não um tipo enumerado. A seguir, devemos declarar uma variável como
pertencente ao tipo declarado anteriormente:
var
Salario_Ana : Salario_faixa1;
type
Salario_faixa1 = 500 .. 1000;
var
Salario_Ana : Salario_faixa1;
var
Dia_da_semana: array [1..7] of string;
Dia_do_mês: array [1..31] of integer;
Note que separamos os valores mínimo e máximo de um array por dois pontos.
Os arrays declarados acima são unidimensionais, isto é, seus elementos
podem ser dispostos formando uma única linha. Para atribuir valores a um
array proceda da seguinte forma:
begin
Dia_da_semana [1] := ‘Domingo’;
Dia_da_semana [2] := ‘Segunda-feira’;
Dia_da_semana [3] := ‘Terça-feira;
Dia_da_semana [4] := ‘Quarta-feira’;
Dia_da_semana [5] := ‘Quinta-feira’;
Dia_da_semana [6] := ‘Sexta-feira’;
Dia_da_semana [7] := ‘Sábado’;
end;
var
Dia : string;
begin
Dia := Dia_da_semana [1];
end;
var
Bi_array: array [1..30,1..30] of currency;
var
Folha_Abril: Folha_Pgto;
begin
end;
Note que você deve usar um ponto para separar o nome do Record do nome
do campo a que você está se referindo. O Object Pascal, e várias linguagens
modernas fornecem uma maneira mais fácil de executar esta operação, usando
a instrução With:
begin
end;
end;
Os tipos Record também podem conter arrays e são bastante usados quando
se requer bancos de dados simples. Veremos que o Delphi permite a
implementação de estruturas de dados bastante complexas, usando bancos de
dados Dbase, Paradox, Access, etc. Contudo, vez por outra não é necessária
toda esta sofisticação e é conveniente optar pelos tipos Record. Além disso,
nesses casos simples não será necessário instalar os drivers de bancos de
dados
3. USANDO COMPONENTES
3.1. CONVENÇÕES DE NOMES PARA COMPONENTES
Tabela 3.1
Objeto. Setfocus.
Tabela 3.2
Note que Memo suporta textos com várias linhas e tem uma barra de
paginação vertical. Esta barra de paginação não é um objeto adicional, mas faz
parte do componente memorando. O Delphi cuida de toda a automação
necessária para a rolagem do texto. Você pode pensar que a disposição dos
componentes mostrados na Figura 3.1 é um pouco desorganizada (e realmente
é!). Contudo, em tempo de projeto, não é necessário posicionar os
componentes precisamente alinhados no formulário. O alinhamento será feito
de maneira automática e muito precisa na inicialização do programa.
c) Escrevendo o código
Neste aplicativo iremos copiar e cortar o texto, sendo necessário usar uma
variável para armazenamento temporário de texto. Declare a variável
CortaTexto na seção Private da unidade:
type
.
.
private
{Private daclarations}
CortaTexto : string;
.
.
txtBloco.Text := ‘ ‘;
txtBloco.SetFocus;
end;
Após apagar o texto, o que é feito na primeira linha, devemos jogar o foco
novamente na caixa de memorando, pois após clicar o botão "Apagar" o foco
ficou com ele. Seria desagradável se o usuário tivesse que clicar na caixa de
memorando toda vez que usasse o botão "Apagar". O computador não se
importa de prestar este pequeno favor.
Close;
end;
CortaTexto := txtBloco.SelText;
txtBloco.SelText := ‘ ‘;
txtBloco.SetFocus;
end;
txtBloco.SelText := CortaTexto;
txtBloco.SetFocus;
end;
txtBloco.Top := 0;
txtBloco.Left := 0;
txtBloco.Width := frmBloco.ClientWidth;
txtBloco.Height := frmBloco.ClientHeight -
cmdCortar.Height;
cmdCortar.Left := 0;
cmdColar.Left := cmdCortar.Width;
cmdApagar.Left := 2 * cmdCortar.Width;
cmdSair.Left := frmBloco.ClientWidth - cmdSair.Width;
cmdCortar.Top := frmBloco.ClientHeight - cmdCortar.Height;
cmdColar.Top := frmBloco.ClientHeight - cmdColar.Height;
cmdApagar.Top := frmBloco.ClientHeight - cmdApagar.Height;
cmdSair.Top := frmBloco.ClientHeight - cmdSair.Height;
end;
end;
Uma vez inserido este componente, você pode escolher o tipo de bitmap,
alterando o valor da propriedade Kind, que pode ser: bkOK, bkYes, bkHelp,
bkAbort, bkAll, bkIgnore, bkCancel, bkNo, bkClose e bkRetry. Uma vez
definida esta propriedade, a legenda e o bitmap do botão serão
automaticamente inseridos. Talvez você fique preocupado em ver a lagenda
aparecer em inglês, mas você sempre pode alterar a propriedade caption
manualmente.
Se você não gostou dos bitmaps exibidos pelo Delphi, você pode escolher os
seus próprios, alterando a propriedade Glyph. Você também pode alterar a
propriedade NumGlyphs para criar um botão animado com até quatro quadros.
Exemplo:
cmdCortar.ShowHint := true;
cmdOK.Hint := ‘Recorta o texto selecionado’;
Application.HintColor := clAqua;
Application.HintPause := 200;
end;
Tabela 3.3
Edit1.color:=clBlue;
Esta função permite o acesso a todas as cores que o seu monitor é capaz de
mostrar, tendo a seguinte sintaxe:
onde Vermelho, Verde e Azul são parâmetros do tipo byte que variam de zero
até 255. Uma cor RGB, deste modo, é formada por uma parcela de vermelho,
uma parcela de verde e uma parcela de azul. Estas são as chamadas cores
básicas aditivas. A função RGB permite combinar 255 valores de cores três a
três, resultando em mais de dezesseis milhões de cores possíveis. O número
final de cores será limitado pelo seu monitor e pela configuração dele. Por
exemplo, para mudar a cor de fundo de uma caixa de edição para azul (zero
partes de vermelho, zero partes de verde e 255 partes de azul), em tempo de
execução, escreva:
Edit1.color:=RGB(0, 0, 255);
É comum que programadores iniciantes não se preocupem com erros e que até
alimentem a vã esperança de que o usuário nunca realizará determinada ação
que resultaria em um erro em tempo de execução. Os usuários, por outro lado,
não parecem pensar assim e, se existe uma maneira de travar o seu programa,
pode ter certeza de que o usuário a encontrará.
try
[bloco de comandos]
except
[código de tratamento de erros]
end;
Quando você estiver rodando um programa dentro do IDE do Delphi, os
manipuladores de exceção somente funcionarão caso a opção Break On
Exception do menu Tools | Environment Options estiver desligada. Caso
contrário, o programa parará a execução em qualquer exceção,
independentemente dos manipuladores.
• Dois Rótulos;
• Dois Botões de Opção;
• Um Timer.
private
{Private declarations}
AlarmeOn : boolean;
Tempo : TTime;
Para começar a inserção do código de optOpção, clique duas vezes nos botões
de opção e digite os seguintes trechos:
AlarmeOn:=false;
end;
AlarmeOn:=true;
end;
Tabela 3.4
AlarmOn é uma variável booleana que definirá se o som de alarme deve estar
ligado ou desligado.
try
Tempo:=StrToTime(txtAjuste.text);
except
{erro de conversão}
beep;
txtAjuste.text:=TimeToStr(Tempo);
end;
if AlarmeOn then
begin
Beep;
end;
end;
end;
lblDisplay.caption:=Tempo;
end;
As próximas linhas verificam se a hora ajustada é maior do que a hora atual.
Caso seja, um bip é acionado a cada segundo. A última linha do programa
exibe a hora atual no display.
O Delphi não exige que você idente o código e compilará trechos de código
identados ou não exatamente da mesma maneira. Ainda assim, você
descobrirá que a identação é uma ferramenta poderosa na documentação de
programas. Facilidade de leitura não é um preciosismo, mas sim um
instrumento de depuração muito usado. Infelizmente, linguagens mais antigas,
especialmente linguagens para MainFrame, não permitiam a identação nem a
presença de linhas em branco. Pior para elas !