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;