Você está na página 1de 16

Fundamentos do Object Pascal

Conceitos de Programao Orientada a Objetos


Antes de partir para a linguagem propriamente dita, vamos revisar alguns conceitos bsicos de
Programao Orientada a Objetos.
Classe: Definio de tipo dos objetos, modelo de objeto.
Objeto: nstncia de classe, varivel cujo tipo uma classe.
Atributos: Variveis de instncia, so os dados de um objeto.
Mtodos: Funes e procedimentos de um objeto.
Propriedades: Apelido usado para evitar o acesso direto aos atributos de um objeto, onde podemos
especificar mtodos que sero usados para ler e atribuir seus valores a esses atributos.
Mensagens: Chamada de mtodos, leitura e atribuio de propriedades.
Encapsulamento: Conjunto de tcnicas usadas para limitar o acesso aos atributos e mtodos
internos de um objeto.
Herana: Possibilidade de criar uma classe descendente de outra, aproveitando seus mtodos,
atributos e propriedades.
Ancestral: Super classe ou classe de base, a partir da qual outras classes podem ser criadas.
Descendente: Subclasse.
Hierarquia de Classes: Conjunto de classes ancestrais e descendentes, geralmente representadas
em uma rvore hierrquica.
Polimorfismo: Capacidade de redefinir mtodos e propriedades de uma classe em seus
descendentes.
1.0 Estrutura de Units
Vamos examinar o cdigo gerado para um novo Form, identificando as principais sees de uma
Unit tpica. Crie uma nova aplicao e observe na Unit principal as seguintes clusulas.
Unit: A primeira declarao de uma unit seu identificador, que igual ao nome do arquivo.
nterface: Seo interface, onde ficam declaraes que podem ser usadas por outras Units.
Uses: Na clusula uses fica a Lista de Units usadas.
Type: Na clusula type fica a definio de tipos, aqui temos a declarao da classe do Form.
Var: Na clusula var so declaradas as variveis, aqui temos a declarao da instncia do Form.
mplementation: Na seo implementation ficam as definies dos mtodos.
End: Toda Unit termina com um end a partir de onde qualquer texto ignorado.
2.0 Variveis
No Delphi, toda varivel tem que ser declarada antes de ser utilizada. As declaraes podem ser
feitas aps a palavra reservada var, onde so indicados o nome e o tipo da varivel. Os nomes de
variveis no podem ter acentos, espaos ou caracteres especiais como &, $ ou % e o primeiro
caractere de um nome de varivel tem que ser uma letra ou um sublinhado. O Delphi ignora o caso
das letras.
Variveis Globais
As variveis abaixo so globais, declaradas da nterface da Unit. Podem ser acessadas por
qualquer Unit usuria.
var
: nteger;
Usuario: string;
A, B, Soma: Double;
Ok: Boolean;
Variveis Locais
As variveis abaixo so locais ao mtodo, ou seja elas s existem dentro do mtodo, no podem
ser acessadas de fora, mesmo que seja na mesma Unit. Na verdade essas variveis so criadas
quando o mtodo chamado e destrudas quando ele encerrado, seu valor no persistente.
procedure TFrmExemplo.BtnTrocarClick(Sender: TObject);
var
Aux: string;
begin
Aux := EdtA.Text;
EdtA.Text := EdtB.Text;
EdtB.Text := Aux;
end;
3.0 Atributos
Os atributos so variveis de instncia. Para declarar um atributo em uma classe basta definir o
identificador e o tipo do atributo na declarao da classe, feita na seo type da nterface da Unit,
como abaixo.
type
TFrmSomar = class(TForm)
private
{ Private declarations }
A, B: Double;
public
{ Public declarations }
Soma: Double;
end;
4.0 Encapsulamento
Os principais nveis de visibilidade dos atributos e mtodos de uma classe so mostrados abaixo.
Nivel Visibilidade
Private Os itens declarados nesse nvel s podem ser acessados na mesma unit.
Public Nesse nvel, qualquer unit usuria poder acessar o item.
Protected Os itens s podero ser acessados em outra unit se for em uma classe descendente
Published o nvel default, igual ao Public, mas define propriedades e eventos usados em tempo
de projeto
5.0 Classes
Classes so tipos de objetos, uma classe declarada na clusula type da seo interface e os
mtodos so definidos na seo implementation. Examine o cdigo de um Form para identificar os
elementos de sua classe.
interface
type
TFrmSomar = class(TForm)
EdtA: TEdit;
EdtB: TEdit;
BtnSoma: TButton;
procedure BtnSomaClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
procedure TFrmSoma.BtnSomaClick(Sender: TObject);
begin
ShowMessage(EdtA.Text + EditB.Text);
end;
6.0 Objetos
Um Objeto tratado como uma varivel cujo tipo uma classe. A declarao de objetos igual
declarao de uma varivel simples, tendo no lugar do tipo a classe do objeto.
var
FrmSomar: TFrmSomar;
7.0 Literais
Valores literais so valores usados em atribuies e expresses. Cada tipo tem uma sintaxe
diferente.
Tipo Definio
nteiro Seqncia de dgitos decimais (0 a 9), sinalizados ou no
nteiro Hexadecimal Seqncia de dgitos hexadecimais (0 a F), precedidos por um sifro ($)
Real gual ao tipo nteiro, mas pode usar separador decimal e notao cientfica
Caractere Letra entre apstrofos ou o caracter # seguido de um nmero inteiro entre 0 e 255
(ASC)
String Seqncia de caracteres delimitado por apstrofos
8.0 Constantes
So declaradas na seo const, podem ser usadas como variveis, mas no podem ser alteradas.
Geralmente o nome das constantes escrito em letras maisculas e na declarao dessas
constantes no indicado o tipo.
const
G = 3.94851265E-19;
NUM_CHARS = '0123456789';
CR = #13;
SPACE = ' ';
MAX_VALUE = $FFFFFFFF;
Constantes Tipadas
Na verdade, constantes tipadas so variveis inicializadas com valor persistente, que podem ser
alteradas normalmente, como qualquer varivel. A nica diferena de sintaxe entre constantes
tipadas e simples que o tipo da constante indicado explicitamente na declarao. Se uma
constante tipada for declarada localmente, ela no ser destruda quando o mtodo for encerrado.
Para diferenciar das constantes normais, costuma-se declarar estas com letras de caso varivel,
como abaixo.
const
Cont: nteger = 1;
Peso: Double = 50.5;
Empresa: string = 'SENAC';
9.0 nstrues
Os programas so compostos por instrues, que so linhas de cdigo executvel. Exemplos de
instrues simples so atribuies, mensagens entre objetos, chamadas de procedimentos,
funes e mtodos, como mostradas abaixo. As instrues podem ser divididas em vrias linhas, o
que indica o fim de uma instruo o ponto e vrgula no final. Quando uma instruo quebrada,
costuma-se dar dois espaos antes das prximas linhas, para melhorar a leitura do cdigo.
Caption := 'Gabba Gabba Hey!';
Form2.ShowModal;
Application.MessageBox('Voc executou uma operao ilegal, o programa ser finalizado.',
'Falha geral', MB_CONERROR);
Voc pode usar vrias instrues agrupadas em uma instruo composta, como se fosse uma s
instruo. Uma instruo composta delimitada pelas palavras reservadas begin e end. Toda
instruo, simples ou composta, terminada com um ponto-e-vrgula.
if CheckBox1.Checked then
begin
ShowMessage('O CheckBox ser desmarcado.');
CheckBox1.Checked := False;
end;
Estilo de Codificao
As instrues e todo o cdigo de uma Unit devem ser distribudos para facilitar o mximo a leitura.
Para isso, podemos usar a indentao, geralmente de dois espaos para indicar os nveis de
cdigo. Procure criar um estilo prprio, que melhor se molde sua realidade. Se for desenvolver
em grupo, melhor que todos usem o mesmo estilo para evitar confuses.
10.0 Comentrios
Existem 3 estilos de comentrio no Delphi, como mostrado abaixo.
(* Comentrio do Pascal Padro *)
{ Comentrio do Turbo Pascal }
// Comentrio de linha do C++
Cuidado com as diretivas de compilao, pois elas so delimitadas por chaves e podem ser
confundidas com comentrios. A diretiva de compilao mostrada abaixo includa em todas as
Units de Forms.
{$R*.DFM}
11.0 Tipos de Dados Padro
O Delphi trata vrios tipos de dados padro, segue uma descrio sucinta desses tipos.
Tipos nteiros
So tipos numricos exatos, sem casas decimais. O tipo nteger o tipo inteiro padro.
Tipo Tamanho em Bytes Valor Mnimo Valor Mximo
Shortnt 1 -128 127
Smallnt 2 -32768 32767
Longint 4 -2147483648 2147483647
Byte 1 0 255
Word 2 0 65535
nteger 4 -2147483648 2147483647
Cardinal 4 0 2147483647
Tipos Reais
So tipos numricos com casas decimais. O tipo Double o tipo real padro.
Tipo Tamanho em Bytes Valor Mnimo Valor Mximo Dgitos Significativos
Real 6 10-39 1038 11-12
Single 4 10-45 1038 7-8
Double 8 10-324 10308 15-16
Extended 10 10-4932 104932 19-20
Comp 8 -1018 1018 19-20
Currency 8 -1012 1012 19-20
Tipos Texto
Os tipos texto podem operar com caracteres simples ou grupos de caracteres. O tipo texto padro
o tipo string.
Tipo Descrio
Char Um nico caractere ASC
String Texto alocado dinamicamente, pode ser limitado a 255 caracteres conforme configurao
PChar String terminada em nulo (#0), usada geralmente nas funes da AP do Windows
O operador + pode ser usado para concatenar strings e voc pode usar uma varivel do tipo string
como uma lista de caracteres.
ShowMessage('5 letra do ttulo da janela: ' + Caption[5]);
Label1.Text := '2 letra do Edit: ' + Edit1.Text[2];
Existem vrias funes de manipulao de strings, veja algumas das mais importantes mostradas
abaixo.
Funo Descrio
AnsiCompareText Compara 2 strings sem sensitividade de maisculas/minsculas
AnsiLowerCase Converte todas as letras de uma string para minsculas
AnsiUpperCase Converte todas as letras de uma string para maisculas
Copy Retorna parte de uma string
Delete Apaga parte de uma string
nsert nsere uma string em outra
Length Nmero de caracteres de uma string
Pos Posio de uma string em outra
Trim Remove todos os espaos de uma string
TrimLeft Remove os espaos esquerda de uma string
TrimRight Remove os espaos direita de uma string
Format Formata uma string com uma srie de argumentos de vrios tipos
Por exemplo, para comparar o texto de dois Edits, poderamos usar a funo AnsiCompareText.
if AnsiCompareText(EdtA.Text, EdtB.Text) = 0 then
ShowMessage('O texto dos dois Edits so iguais.');
A funo Format especialmente til na formatao de strings, veja alguns exemplos.
ShowMessage(Format('O nmero %d a parte inteira do nmero %f.', [10, 10.5]));
ShowMessage(Format('Este texto%sfoi formatado%susando o caractere #%d.', [#13, #13, 13]));
ShowMessage(Format('O preo do livro %s %m.', ['Como Programar em Delphi', 50.7]));
Um detalhe que deve ser observado que as propriedades dos objetos no podem ser usadas
como variveis em funes. Veja a declarao do procedimento Delete no help.
procedure Delete(var S: string; ndex, Count:nteger);
Digamos que voc deseje apagar as 5 primeiras letras de um Edit, como a string do Delete
varivel, no poderia usar o cdigo abaixo.
Delete(Edit1.Text, 1, 5);
Para voc poder fazer a operao desejada, teria que usar uma varivel como varivel auxiliar.
var
S: string;
begin
S := Edit1.Text;
Delete(S, 1, 5);
Edit1.Text := S;
end;
Tipos Ordinais
Tipos ordinais so tipos que tem uma seqncia incremental, ou seja, voc sempre pode dizer qual
o prximo valor ou qual o valor anterior a um determinado valor desses tipos. So tipos ordinais o
Char, os tipos inteiros, o Boolean e os tipos enumerados. Algumas rotinas para ordinais so
mostradas abaixo.
Funo Descrio
Dec Decrementa varivel ordinal
nc ncrementa varivel ordinal
Odd Testa se um ordinal mpar
Pred Predecessor do ordinal
Succ Sucessor do ordinal
Ord Ordem de um valor na faixa de valores de um tipo ordinal
Low Valor mais baixo na faixa de valores
High Valor mais alto na faixa de valores
Por exemplo, use o cdigo abaixo no evento OnKeyPress de um Edit e veja o resultado.
nc(Key);
Boolean
Variveis do tipo Boolean podem receber os valores lgicos True ou False, verdadeiro ou falso.
Uma varivel Boolean ocupa 1 byte de memria.
TDateTime
O tipo TDateTime guarda data e hora em uma estrutura interna igual ao tipo Double, onde a parte
inteira o nmero de dias desde 31/12/1899 e a parte decimal guarda a hora, minuto, segundo e
milissegundo. As datas podem ser somadas ou subtradas normalmente.
Existem vrias rotinas de manipulao de datas e horas, usadas com o tipo TDateTime, veja
algumas abaixo.
Rotina Descrio
Date Retorna a data do sistema
Now Retorna a data e hora do sistema
Time Retorna a hora do sistema
DayOfWeek Retorna o dia da semana de uma data especificada
DecodeDate Decodifica um valor TDateTime em Words de dia, ms e ano
DecodeTime Decodifica um valor TDateTime em Words de hora, minuto, segundo e milissegundos
EncodeDate Retorna um TDateTime a partir de Words de dia, ms e ano
EncodeTime Retorna um TDateTime a partir de Words de hora, minuto, segundo e milissegundos
No help de cada uma das funes acima voc vai encontrar alguns exemplos, veja os colocados
abaixo.
if DayOfWeek(Date) = 1 then
ShowMessage('Hoje Domingo, p de cachimbo!')
else
ShowMessage('Hoje no Domingo, p de cachimbo!');
var
A, M, D: Word;
begin
DecodeDate(Date, A, M, D);
ShowMessage(Format('Dia %.2d do ms %.2d de %d.', [D, M, A]));
end;
Variant
Tipo genrico, que pode atribuir e receber valores de qualquer outro tipo. Evite usar variveis do
tipo Variant, pois o uso dessas variveis podem prejudicar a performance do programa, alm de
diminuir a legibilidade do cdigo fonte e a integridade do executvel, veja o trecho de cdigo abaixo
e note como esse tipo de varivel tem um comportamento estranho.
var
V1, V2, V3: Variant;
begin
V1 := True;
V2 := 1234.5678;
V3 := Date;
ShowMessage(V1 + V2 + V3);
end;
12.0 Converses de Tipo
Freqentemente voc vai precisar converter um tipo de dado em outro, como um nmero em uma
string. Para essas converses voc pode usar duas tcnicas, o TypeCasting e as rotinas de
converso de tipos.
TypeCasting
TypeCast uma converso direta de tipo, usando o identificador do tipo destino como se fosse
uma funo. Como o Delphi no faz nenhuma verificao se a converso vlida, voc deve tomar
um certo cuidado ao usar um TypeCast para no criar programas instveis.
var
: nteger;
C: Char;
B: Boolean;
begin
:= nteger('A');
C := Char(48);
B := Boolean(0);
Application.MessageBox(PChar('Linguagem de Programao' + #13 + 'Delphi 3'), 'SENAC',
MB_CONEXCLAMATON);
end;
Rotinas de Converso
As principais rotinas de converso esto listadas na tabela abaixo. Caso voc tente usar uma
dessas rotinas em uma converso invlida, pode ser gerada uma exceo.
Rotina Descrio
Chr Byte em Char
StrTont String em nteger
ntToStr nteger em String
StrTontDef String em nteger, com um valor default caso haja erro
ntToHex Nmero em String Hexadecimal
Round Arredonda um nmero real em um nteger
Trunc Trunca um nmero real em um nteger
StrToFloat String em Real
FloatToStr Real em string
FormatFloat Nmero real em string usando uma string de formato
DateToStr TDateTime em string de data, de acordo com as opes do Painel de Controle
StrToDate String de data em TDateTime
TimeToStr TDateTime em Strind de Hora
StrToTime String de hora em TDateTime
DateTimeToStr TDateTime em string de data e hora
StrToDateTime String de data e hora em TDateTime
FormatDateTime TDateTime em string usando uma string de formato
VarCast Qualquer tipo em outro usando argumentos do tipo Variant
VarAsType Variante em qualquer tipo
Val String em nmero, real ou inteiro
Str Nmero, real ou inteiro, em String
Veja alguns exemplos de como usar essas rotinas. Converso de dados uma operao muito
comum na programao em Object Pascal, seeria interessante dar uma olhada no help de cada
uma das funes acima.
var
: nteger;
D: Double;
S1, S2: string;
begin
D := 10.5;
:= Trunc(D);
S1 := FloatToStr(D);
S2 := ntToStr();
ShowMessage(S1 + #13 + S2);
end;

var
A, B, Soma: Bouble;
begin
A := StrToFloat(EdtA.Text);
B := StrToFloat(EdtB.Text);
Soma := A + B;
ShowMessage(Format('%f + %f = %f', [A, B, Soma]);
end;
13.0 Expresses
Uma expresso qualquer combinao de operadores, variveis, constantes, valores literais e
chamadas de funes que resultem em um valor de determinado tipo. Uma expresso usada
sempre que precisamos de uma valor que possa ser obtido por uma expresso.
A + 12 * C
Date - 4
StrTont(Edit1.Text + Edit2.Text)
StrToDate(Edit2.Text) - StrToDate(Edit1.Text)
12 * A / 100
A < B
14.0 Operadores
Os operadores so usados em expresses e a ordem em que as expresses so executadas
depende da precedncia desses operadores. Veja abaixo a lista de operadores em ordem
descendente de precedncia.
Operador Descrio
Operadores Unrios
@ Endereo
not No booleano ou bit voltado para no
Operadores Multiplicativos e de direo de Bit
* Multiplicao ou interseo de conjuntos
/ Diviso de Real
div Diviso de nteiro
mod Resto de diviso de nteiros
as TypeCast seguro quanto ao tipo (RTT)
and E booleano ou bit voltado para e
shl Deslocamento de bits esquerda
shr Deslocamento de bits direita
Operadores Aditivos
+ Adio ou unio de conjuntos
- Subtrao ou diferena de conjuntos
or Ou booleano ou bit voltado para ou
xor Ou exclusivo booleano ou bit voltado para ou exclusivo
Operadores Relacionais
= gual
<> Diferente
< Menor
> Maoir
<= Menor ou igual
>= Maior ou igual
in Pertinncia a conjuntos
is Compatibilidade de tipos (RTT)
Para forar uma expresso de menor precedncia a ser executada antes, voc pode usar os
parnteses, como mostrado abaixo.
(5 - 2) * 3;
(A > B) and (A < C)
Para fazer potenciao, use a funo Power, abaixo temos que A igual a A elevado a 4.
A := Power(A, 4);
15.0 Estruturas de Deciso
f
O if uma estrutura de deciso usada para realizar instrues em determinadas condies. O if
considerado uma s instruo, por isso, s encontramos o ponto-e-vrgula no final. O else
opcional.
if Opn.Execute then
mg.Picture.LoadFromFile(Opn.FileName);
if Nota < 5 then
ShowMessage('Reprovado')
else
ShowMessage('Aprovado');
Case
Permite que o fluxo da execuo seja desviado em funo de vrias condies de acordo com o
valor do argumento, que tem que ser ordinal, caso o valor do argumento no corresponda a
nenhum dos valores listados, podemos incluir um else.
case Ch of
' ': ShowMessage('Espao');
'0'..'9': ShowMessage('Dgito');
'+', '-', '*', '/': ShowMessage('Operador');
else
ShowMessage('Caractere especial');
end;
case CbbBorda.temndex of
0: BorderStyle := bsDialog;
1: BorderStyle := bsSingle;
2: BorderStyle := bsSizeable;
end;
16.0 Estruturas de Repetio
While
O lao while executa uma instruo at que uma condio seja falsa.
:= 10;
while >= 0 do
begin
ShowMessage(ntToStr());
Dec();
end;
For
O lao for executa uma instruo um nmero determinado de vezes, incrementando uma varivel
de controle automaticamente a cada iterao. Caso seja preciso que a contagem seja decremental,
pode-se usar downto em vez de to.
for := 1 to ComponentCount do
ShowMessage('O ' + ntToStr() + ' Componente ' + Components[ - 1].Name);
for := Length(Edit1.Text) downto 1 do
ShowMessage(Edit1.Text[]);
Repeat
O lao repeat executa instrues at que uma condio seja verdadeira.
:= 1;
repeat
S := nputBox('Acesso', 'Digite a senha', '');
nc();
if > 3 then
Halt;
until S = 'flamengo';
Quebras de Lao
Em qualquer um dos laos mostrados podemos usar o procedimento Break para cancelar a
repetio e sair do lao, podemos tambm forar a prxima iterao com o procedimento Continue.
:= 1;
while true do
begin
nc();
if < 10000000 then
Continue;
ShowMessage('Chegamos a dez milhes');
Break;
end;
17.0 Tipos Definidos Pelo Usurio
O usurio tambm pode declarar tipos no definidos pelo Delphi. Essas declaraes so feitas na
seo type, da interface ou implementation, sendo que na implementation esses tipos no podero
ser usados em outras Units.
Dificilmente voc ter que definir tipos, a no ser classes, pois os tipos padro do Delphi so o
bastante para a maioria das aplicaes.
Strings Limitadas
Caso se deseje limitar o nmero de caracteres que uma string pode receber, podemos criar um tipo
de string limitada.
TNome = string[40];
TEstado = string[2];
Tipo Sub-Faixa
um subconjunto de um tipo ordinal e possui as mesmas propriedades do tipo original.
TMaiusculas = 'A'..'Z';
TMes = 1..12;
Enumeraes
Define uma seqncia de identificadores como valores vlidos para o tipo. A cada elemento da lista
de identificadores associado internamente um nmero inteiro, iniciando pelo nmero 0, por isso
so chamados de tipos enumerados.
TBordercon = (biSystemMenu, biMinimize, biMaximize, biHelp);
TDiaSemana = (Seg, Ter, Qua, Qui, Sex, Sab, Dom);
Ponteiros
Ponteiros armazenam endereos de memria, todas as classes em Object Pascal so
implementadas como ponteiros, mas raramente o programador vai precisar us-los como tal.
TntPtr: ^nteger;
Records
O tipo record uma forma de criar uma nica estrutura com valores de diferentes tipos de dados.
Cada um dos dados de um record chamado de campo.
TData = record
Ano: nteger;
Mes: TMes;
Dia: Byte;
end;
var
Festa: TData;
begin
Festa.Ano := 1997;
Festa.Mes := Mai;
Festa.Dia := 8;
end;
Arrays
Arrays fornecem uma forma de criar variveis que contenham mltiplos valores, como em uma lista
ou tabela, cujos elementos so do mesmo tipo. Veja abaixo alguns exemplos de arrays de
dimenses variadas.
TTempDia = array [1..24] of nteger;
TTempMes = array [1..31, 1..24] of nteger;
TTempAno = array [1..12, 1..31, 1..24] of nteger;
var
TD: TTempDia;
: nteger;
begin
for := 1 to 24 do
TD[] := StrTontDef(nputBox('Temperaturas', 'Digite a temperatura na hora ' + ntToStr(), ''), 30);
end;
Um array pode ser definido como constante tipada, onde todos os seus elementos devem ser
inicializados.
FAT: array[1..7] of nteger = (1, 2, 6, 24, 120, 720, 5040);
O tipo dos elementos de um array pode ser qualquer um, voc pode ter uma array de objetos, de
conjuntos, de qualquer tipo que quiser, at mesmo um array de arrays.
TTempMes = array [1..31] of TTempDia;
TBtnList = array [1..10] of TButton;
Sets
So conjuntos de dados de um mesmo tipo, sem ordem, como os conjuntos matemticos.
Conjuntos podem conter apenas valores ordinais, o menor que um elemento pode assumir zero e
o maior, 255.
TBordercons = set of TBordercon;
Bordercons := [biSystemMenu, biMinimize];
if MesAtual in [Jul, Jan, Fev] then
ShowMessage('Frias');
Os conjuntos podem ser definidos como constantes ou constantes tipadas, como abaixo.
DG_HEXA = ['0'..'9', 'A'..'Z', 'a'..'z'];
DG_HEXA: set of Char = ['0'..'9', 'A'..'Z', 'a'..'z'];
18.0 Procedimentos, Funes e Mtodos
As aes de um objeto devem ser definidas como mtodos. Quando a ao no pertence a um
objeto, como uma transformao de tipo, essa ao deve ser implementada em forma de
procedimentos e/ou funes.
Procedimentos
Procedimentos so sub-rotinas, que realizam uma tarefa e no retornam um valor. A declarao de
um procedimento feita na seo interface e a definio, na seo implementation. Ao chamar o
identificador do procedimento, com os parmetros necessrios, esse procedimento ser
executado. Veja abaixo o exemplo de uma unit com a implementao um procedimento.
unit Tools;
interface
procedure ErrorMsg(const Msg: string);
implementation
uses Forms, Windows;
procedure ErrorMsg(const Msg: string);
begin
Application.MessageBox(PChar(Msg), 'Operao invlida', MB_CONERROR);
end;
end.
Funes
Funes so muito semelhantes a procedimentos a nica diferena que as funes retornam um
valor. O tipo do valor de retorno deve ser informado no cabealho da funo. Na implementao da
funo deve-se atribuir o valor de retorno palavra reservada Result ou ao identificador da funo.
Pode-se ento usar a funo em expresses, atribuies, como parmetros para outras funes,
em qualquer lugar onde o seu valor possa ser usado.
function Average(A, B: Double): Double;
begin
Result := (A + B) / 2;
end;
Mtodos
Mtodos so funes ou procedimentos que pertencem a alguma classe, passando a fazer parte
de qualquer objeto dessa classe. Na implementao de um mtodo precisamos indicar qual a
classe qual ele pertence. Para chamar um mtodo em algum lugar no pertencente sua classe,
como procedimentos, funes ou mtodos de outras classes, deve ser indicado o objeto que deve
executar o mtodo. Os mtodos usam os mesmos nveis de encapsulamento dos atributos.
type
TFrmMsg = class(TForm)
LblMsg: TLabel;
BtnOk: TButton;
BtnCancelar: TButton;
mgMsg: Tmage;
public
procedure ShowMsg(const Msg: string);
end;
procedure TFormMsg.ShowMsg(const Msg: string);
begin
LblMsg.Caption := Msg;
ShowModal;
end;
Parmetros
Existem trs tipos de passagem de parmetros, que devem ser indicados na declarao da funo
ou procedimento. Parmetros de tipos diferentes de vem ser separados por ponto e vrgula.
function MultiStr(const S: string; N: Double; var Erro: nteger): string;
Quando no indicado o tipo de passagem, passado o valor do parmetro, como constante.
Ao usar a palavra-chave var, no ser enviado o valor do parmetro e sim uma referncia a ele,
tornando possvel mudar o valor do parmetro no cdigo do procedimento.
Como alternativa voc pode passar um parmetro por referncia constante, para isso use a palavra
const antes da declarao do parmetro.
19.0 With
Usado para facilitar o acesso s propriedades e mtodos de um objeto.
with Edt do
begin
CharCase := ecUpperCase;
MaxLenght := 10;
PasswordChar := '*';
Text := 'Brasil';
end;
20.0 Self
Self usado quando se quer referenciar a instncia atual da classe. Se voc precisar referenciar a
instncia atual de uma classe, prefervel usar Self em vez de usar o identificador de um Objeto,
isso faz com que o cdigo continue funcionando para as demais instncias da classe e em seus
descendentes.
21.0 Criando e Destruindo Objetos
Antes de tudo, voc deve declarar o objeto, se quiser referenci-lo. Para cri-lo, use o mtodo
Create, que um mtodo de classe. Para voc usar um mtodo de classe, referencie a classe, no
o Objeto, como mostrado abaixo.
var
Btn: TBitBtn;
begin
Btn := TBitBtn.Create(Self);
With Btn do
begin
Parent := Self;
Kind := bkClose;
Caption := '&Sair';
Left := Self.ClientWidth - Width - 8;
Top := Self.ClientHeight - Height - 8;
end;
end;
Porm, se voc no precisar referenciar o Objeto, poderia criar uma instncia sem referncia.
with TBitBtn.Create(Self) do
begin
Parent := Self;
Kind := bkClose;
Caption := '&Sair';
Left := Self.ClientWidth - Width - 8;
Top := Self.ClientHeight - Height - 8;
end;
Para destruir um objeto, use o mtodo Free. Para Forms, recomendado usar o Release, para que
todos os eventos sejam chamados.
O parmetro do mtodo Create usado apenas em Componentes, para identificar o componente
dono. Ao criar Forms, poderamos usar o Objeto Application.
FrmSobre := TFrmSobre.Create(Application);
FrmSobre.ShowModal;
FrmSobre.Release;
Para criar objetos no componentes, voc no precisa de nenhum parmetro no mtodo Create.
var
Lst: TStringList;
begin
Lst := TStringList.Create;
Lst.Add('Al, Teresinha!');
Lst.Add('Uhh uhh...');
Lst.SaveToFile('Teresinha.txt');
Lst.Free;
end;
22.0 RTT
Run Time Type nformation a informao de tipo dos objetos em tempo de execuo. O operador
is usado para fazer comparaes e o operador as usado para fazer um TypeCast seguro com
objetos.
for := 0 to ComponentCount - 1 do
if Components[] is TEdit then
TEdit(Components[]).Clear;
(Sender as TEdit).Color := clYellow;

Você também pode gostar