Você está na página 1de 15

1

Delphi XE << Iniciante >>

Mdulo

1
INTRODUO

Object Pascal I

Essa lio tem por objetivo apresentar a linguagem que o Delphi utiliza: Object Pascal. Tenha em mente que o Delphi no uma linguagem, mas sim uma Ferramenta de Desenvolvimento que utiliza a linguagem Object Pascal. CONCEITOS DE PROGRAMAO ORIENTADA A OBJETOS Antes de partir para a linguagem propriamente dita, vamos aprender alguns conceitos bsicos de Programao Orientada a Objetos. Classe: Definio de tipo dos objetos, modelo de objeto. Objeto: Instncia 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. ESTRUTURA DE UNITS Vamos examinar o cdigo gerado para um novo Form, identificando as principais sees de uma Unit tpica. Abra o Delphi e crie uma nova aplicao. Observe na Unit principal as seguintes clusulas. Unit: A primeira declarao de uma unit seu identificador, que igual ao nome do arquivo. Interface: 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. Implementation: Na seo implementation ficam as definies dos mtodos. End: Toda Unit termina com um end a partir de onde qualquer texto ignorado. 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 ( _ ). VARIVEIS GLOBAIS As variveis abaixo so globais, declaradas na Interface da Unit. Podem ser acessadas por qualquer Unit usuria. var I: Integer; Usuario: string;

Delphi XE << Iniciante >>


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 so 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; 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 Interface da Unit, como abaixo. type TFrmSomar = class(TForm) private {Private declarations} A, B: Double; public {Public declarations} Soma: Double; end; ENCAPSULAMENTO Os principais nveis de visibilidade dos atributos e mtodos de uma classe so mostrados abaixo. Nvel Private Public Protected Published Visibilidade Os itens declarados nesse nvel s podem ser acessados na mesma unit. Nesse nvel, qualquer unit usuria poder acessar o item. Os itens s podero ser acessados em outra unit se for em uma classe descendente. o nvel default, igual ao Public, mas define propriedades e eventos usados em tempo de projeto.

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

3
procedure TFrmSoma.BtnSomaClick(Sender: TObject); begin ShowMessage(EdtA.Text + EditB.Text); end; OBJETOS

Delphi XE << Iniciante >>

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; LITERAIS Valores literais so valores usados em atribuies e expresses. Cada tipo tem uma sintaxe diferente. Tipo Inteiro Inteiro Hexadecimal Real Caractere String 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: Integer = 1; Peso: Double = 50.5; Empresa: string = Linux Informtica; INSTRUES 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 := Linux Informtica!; Form2.ShowModal; Application.MessageBox(Voc executou uma operao ilegal, o programa ser finalizado.,Falha geral, MB_ICONERROR); Definio Seqncia de dgitos decimais (0 a 9), sinalizados ou no. Seqncia de dgitos hexadecimais (0 a F), precedidos por um cifro ($). Igual ao tipo Inteiro, mas pode usar separador decimal e notao cientfica. Letra entre apstrofos ou o caracter # seguido de um nmero inteiro entre 0 e 255 (ASCII). Seqncia de caracteres delimitados por apstrofos.

Delphi XE << Iniciante >>

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 trs 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. 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} TIPOS DE DADOS PADRO O Delphi trata vrios tipos de dados padro, segue uma descrio sucinta desses tipos. TIPOS INTEIROS So tipos numricos exatos, sem casas decimais. O tipo Integer o tipo inteiro padro. Tipo ShortInt SmallInt Longint Byte Word Integer Cardinal TIPOS REAIS So tipos numricos com casas decimais. O tipo Double o tipo real padro. Tipo Real Single Double Extended Comp Currency TIPOS TEXTO Os tipos texto podem operar com caracteres simples ou grupos de caracteres. O tipo texto padro o tipo String. Tamanho em Bytes 6 4 8 10 8 8 Valor Mnimo 10-39 10-45 10-324 10-4932 -1018 -1012 Valor Mximo 1038 1038 10308 104932 1018 1012 Dgitos Significativos 11-12 7-8 15-16 19-20 19-20 19-20 Tamanho em Bytes Valor Mnimo Valor Mximo 1 127 -128 2 -32768 32767 4 -2147483648 2147483647 1 0 255 2 0 65535 4 -2147483648 2147483647 4 0 2147483647

5
Tipo Char String PChar

Delphi XE << Iniciante >>


Descrio Um nico caractere ASCII. Texto alocado dinamicamente. Pode ser limitado a 255 caracteres conforme configurao. String terminada em nulo (#0), usada geralmente nas funes da API 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 AnsiCompareText AnsiLowerCase AnsiUpperCase Copy Delete Insert Length Pos Trim TrimLeft TrimRight Format Descrio Compara 2 strings sem sensitividade de maisculas/minsculas. Converte todas as letras de uma string para minsculas. Converte todas as letras de uma string para maisculas. Retorna parte de uma string. Apaga parte de uma string. Insere uma string em outra. Nmero de caracteres de uma string. Posio de uma string em outra. Remove todos os espaos de uma string. Remove os espaos esquerda de uma string. Remove os espaos direita de uma string. 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 igual.); 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; Index, Count:Integer); 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;

Delphi XE << Iniciante >>


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 Dec Inc Odd Pred Succ Ord Low High Descrio Decrementa varivel ordinal. Incrementa varivel ordinal. Testa se um ordinal mpar. Predecessor do ordinal. Sucessor do ordinal. Ordem de um valor na faixa de valores de um tipo ordinal. Valor mais baixo na faixa de valores. Valor mais alto na faixa de valores.

Por exemplo, use o cdigo abaixo no evento OnKeyPress de um Edit e veja o resultado. Inc(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 milisegundo. 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 Date Now Time DayOfWeek DecodeDate DecodeTime EncodeDate EncodeTime Descrio Retorna a data do sistema. Retorna a data e hora do sistema. Retorna a hora do sistema. Retorna o dia da semana de uma data especificada. Decodifica um valor TDateTime em Words de dia, ms e ano. Decodifica um valor TDateTime em Words de hora, minuto, segundo e milisegundos. Retorna um TDateTime a partir de Words de dia, ms e ano. Retorna um TDateTime a partir de Words de hora, minuto, segundo e milisegundos.

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 pode 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.

7
var V1, V2, V3: Variant; begin V1 := True; V2 := 1234.5678; V3 := Date; ShowMessage(V1 + V2 + V3); end; CONVERSES DE TIPO

Delphi XE << Iniciante >>

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 I: Integer; C: Char; B: Boolean; begin I := Integer(A); C := Char(48); B := Boolean(0); Application.MessageBox(PChar(Linguagem de Programao + #13 + Delphi 3), Linux Informtica,MB_ICONEXCLAMATION); 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 Chr StrToInt IntToStr StrToIntDef IntToHex Round Trunc StrToFloat FloatToStr FormatFloat DateToStr StrToDate TimeToStr StrToTime DateTimeToStr StrToDateTime FormatDateTime VarCast VarAsType Val Str Descrio Byte em Char. String em Integer. Integer em String. String em Integer, com um valor default caso haja erro. Nmero em String Hexadecimal. Arredonda um nmero real em um Integer. Trunca um nmero real em um Integer. String em Real. Real em string. Nmero real em string usando uma string de formato. TDateTime em string de data, de acordo com as opes do Panel de Controle. String de data em TDateTime. TDateTime em String de Hora. String de hora em TDateTime. TDateTime em string de data e hora. String de data e hora em TDateTime. TDateTime em string usando uma string de formato. Qualquer tipo em outro usando argumentos do tipo Variant. Variante em qualquer tipo. String em nmero, real ou inteiro. Nmero, real ou inteiro, em String.

Delphi XE << Iniciante >>

Veja alguns exemplos de como usar essas rotinas. Converso de dados uma operao muito comum na programao em Object Pascal, seria interessante dar uma olhada no help de cada uma das funes acima. var I: Integer; D: Double; S1, S2: string; begin D := 10.5; I := Trunc(D); S1 := FloatToStr(D); S2 := IntToStr(I); ShowMessage(S1 + #13 + S2); end; var A, B, Soma: Double; begin A := StrToFloat(EdtA.Text); B := StrToFloat(EdtB.Text); Soma := A + B; ShowMessage(Format(%f + %f = %f, [A, B, Soma]); end; 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 um valor que possa ser obtido por uma expresso. A + 12 * C Date - 4 StrToInt(Edit1.Text + Edit2.Text) StrToDate(Edit2.Text) - StrToDate(Edit1.Text) 12 * A / 100 A < B 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 Operadores Unrios @ not Operadores Multiplicativos e de direo de Bit * / div mod as and shl shr Operadores Aditivos + or xor Descrio Endereo No booleano ou bit voltado para no

Multiplicao ou interseo de conjuntos Diviso de Real Diviso de Inteiro Resto de diviso de Inteiros TypeCast seguro quanto ao tipo (RTTI) E booleano ou bit voltado para e Deslocamento de bits esquerda Deslocamento de bits direita Adio ou unio de conjuntos Subtrao ou diferena de conjuntos Ou booleano ou bit voltado para ou Ou exclusivo booleano ou bit voltado para ou exclusivo

9
Operadores Relacionais = <> < > <= >= in is Igual Diferente Menor Maior Menor ou igual Maior ou igual Pertinncia a conjuntos Compatibilidade de tipos (RTTI)

Delphi XE << Iniciante >>

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);

EXERCCIOS
01) Faa um Form, com um Edit e botes para passar o texto do Edit para maisculas e minsculas. 02) Faa um programa que sugira que o usurio pare de trabalhar quando o relgio do sistema no estiver em horrio comercial. 03) Sendo I um nmero inteiro, R um real e S uma string com um texto numrico como encontrar o resultado da soma dos 3 valores, e de que tipo ser esse resultado? Faa isso no Delphi.

Delphi XE << Iniciante >>

10

Mdulo

2
ESTRUTURAS DE DECISO If if Nota < 5 then ShowMessage(Reprovado) else ShowMessage(Aprovado); Case

Object Pascal II

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 Img.Picture.LoadFromFile(Opn.FileName);

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 0: 1: 2: end; CbbBorda.ItemIndex of BorderStyle := bsDialog; BorderStyle := bsSingle; BorderStyle := bsSizeable;

ESTRUTURAS DE REPETIO While O lao while executa uma instruo at que uma condio seja falsa. I := 10; while I >= 0 do begin ShowMessage(IntToStr(I)); Dec(I); 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 I := 1 to ComponentCount do ShowMessage(O + IntToStr(I) + Componente + Components[I - 1].Name);

11
for I := Length(Edit1.Text) downto 1 do ShowMessage(Edit1.Text[I]); Repeat O lao repeat executa instrues at que uma condio seja verdadeira. I := 1; repeat S := InputBox(Acesso, Digite a senha, ); Inc(I); if I > 3 then Halt; until S = fluminense;

Delphi XE << Iniciante >>

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. I := 1; while true do begin Inc(I); if I < 10000000 then Continue; ShowMessage(Chegamos a dez milhes); Break; end; 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. TBorderIcon = (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. TIntPtr: ^Integer;

Delphi XE << Iniciante >>

12

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: Integer; 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 Integer; TTempMes = array [1..31, 1..24] of Integer; TTempAno = array [1..12, 1..31, 1..24] of Integer; var TD: TTempDia; I: Integer; begin for I := 1 to 24 do TD[I] := StrToIntDef(InputBox(Temperaturas, Digite a temperatura na hora + IntToStr(I), ), 30); end; Um array pode ser definido como constante tipada, onde todos os seus elementos devem ser inicializados. FAT: array[1..7] of Integer = (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. TBorderIcons = set of TBorderIcon; BorderIcons := [biSystemMenu, biMinimize]; if MesAtual in [Jul, Jan, Fev] then ShowMessage(Frias); Os conjuntos podem ser definidos como constantes ou constantes tipadas, como abaixo. DIG_HEXA = [0..9', A..Z, a..z]; DIG_HEXA: set of Char = [0..9', A..Z, a..z]; 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.

13

Delphi XE << Iniciante >>

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_ICONERROR); 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; ImgMsg: TImage; 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 devem ser separados por ponto e vrgula. function MultiStr(const S: string; N: Double; var Erro: Integer): 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.

Delphi XE << Iniciante >>


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; Self

14

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. 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!);

15
Lst.Add(Uhh uhh...); Lst.SaveToFile(Teresinha.txt); Lst.Free; end; RTTI

Delphi XE << Iniciante >>

Run Time Type Information 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 I := 0 to ComponentCount - 1 do if Components[I] is TEdit then TEdit(Components[I]).Clear; (Sender as TEdit).Color := clYellow;

EXERCCIOS
01) Faa um programa para encontrar as razes de uma equao de 2 grau cujos coeficientes sejam informados pelo usurio. Para relembrar, a frmula ax2 + bx + c = 0, o delta = b2 - 4ac e as razes so dadas como x1 = (b + RAIZ())/2a e x2 = (- b - RAIZ())/2a. 02) Faa uma funo que defina se o ano bissexto ou no. Sabendo que para ser bissexto, o ano precisa ser divisvel por 4 e, alm disso, no ser divisvel por 100. Se for divisvel por 100 o ano tem que ser divisvel por 400 para ser bissexto. 03) Faa um programa que pea a data de nascimento do usurio, converta o texto dessa data para uma forma de ano com 4 dgitos e mostre a idade do usurio.