UNIVERSIDADE FEDERAL DE JUIZ DE FORA COLÉGIO TÉCNICO UNIVERSITÁRIO DEPARTAMENTO DE INFORMÁTICA Introdução à Linguagem de Programação Delphi Esta apostila também se encontra no site do curso de Informática do CTU/UFJF: www.informatica.ctu.ufjf.br ou no meu site pessoal: www.alceca.hpg.com.br Prof. Alberto Cezar de Carvalho - Agosto de 2005 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho ÁLGEBRA DE BOOLE Boole foi o matemático que estabeleceu as regras para as operações com os números binários (base 2). Seus estudos foram feitos em uma época em que sequer cogitava a existência dos computadores. Para melhor entendermos a sua álgebra, vamos primeiramente detalhar uma pouco mais a nossa base numérica do dia a dia: a base 10. A BASE 10: A base 10 é assim chamada porque se baseia na existência de 10 algarismos ( 0 a 9). Desde o ensino fundamental, somos treinados a executar as operações com os números nesta base, mas, na realidade as regras que aprendemos são regras particulares e que não se aplicam para as demais bases. Iremos agora, mostrar as regras da soma de dois números de acordo com uma regra geral: “Ao somarmos 2 algarismos, se a sua soma der um valor igual ou maior que a base (10), subtrai-se a base deste valor e vai um.” Exemplificando: A soma de 187 com 96 é: 187 96 + 3 7 + 6 = 13 – 10 = 3 e vai um ... 1 187 96 + 83 1 + 8 + 9 = 18 – 10 = 8 e vai um ... 1 187 96 + 283 1+1 =2 MUDANÇA DA BASE 10 PARA A BASE 2: Basta fazer divisões sucessivas pela nova base e pegar os restos das divisões no sentido inverso. Exemplificando: O número decimal 183, seria na base 2 o seguinte número: - Introdução ao Delphi - Página 2 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho 183 / 2 = 91 91 / 2 = 45 45 / 2 = 22 22 / 2 = 11 11 / 2 = 5 5/2=2 2/2=1 1/2=0 sobra 1 sobra 1 sobra 1 sobra 0 sobra 1 sobra 1 sobra 0 sobra 1 Pegando os restos das divisões de baixo para cima, teremos o número convertido para a base 2: 10110111 MUDANÇA DA BASE 2 PARA A BASE 10: A regra geral para passar de qualquer base para a base 10 é a seguinte: a) Pega-se cada algarismo, da direita para a esquerda e multiplica-se pela base elevada às potências: 0, 1, 2, 3, .... b) Soma-se os resultados. c) Este é o número na base 10. Exemplo: 10110111 1 x 20 = 1 1 x 21 = 2 1 x 22 = 4 0 x 23 = 0 1 x 24 = 16 1 x 25 = 32 0 x 26 = 0 1 x 27 = 128 183 Um método prático, seria observar que os multiplicadores são dobrados de um para o outro: 1 – 2 – 4 – 8 – 16 – 32 - ... (20, 21, 22, 23 ...) Some somente as parcelas onde o algarismo binário é 1. A soma das parcelas é o número na base 10. A BASE 2: A base 2 é a que é utilizada pelos computadores. Representamos o algarismo 1 pela tensão de 5 Volts e o algarismo 0 pela tensão 0 Volts. A soma de números binários segue a mesma regra citada anteriormente: - Introdução ao Delphi - Página 3 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho “Ao somarmos 2 algarismos, se a sua soma der um valor igual ou maior que a base (2), subtrai-se a base deste valor e vai um.” Por exemplo: 11 11 1 10110111 10010011 + 1 01001010 base 1+1 = 2 à 2 – 2 = 0 e vai um 1+1+1 = 3 à 3 – 2 = 1 e vai um 1+1+0 = 2 à 2 – 2 = 0 e vai um 1+0+0 = 1 1 + 1 = 2 à 2 – 2 = 0 e vai um 1+1+0 = 2 à 2 – 2 = 0 e vai um 1+0+0 = 1 1+1+1 = 3 à 3 – 2 = 1 e vai um A BASE HEXADECIMAL (16): Esta base é utilizada para que possa facilitar a programação em Linguagem de Máquina (Assembly), pois, tem a propriedade de reduzir o tamanho dos números decimais e binários para apenas 2 algarismos no máximo, o que facilita a formatação dos dados na digitação. Nesta base utilizamos 16 caracteres: os algarismos de 0 a 9 e as letras de A .. F, sendo que as mesmas terão os valores 10, 11, 12, 13, 14 e 15, correspondendo às letras A, B, C, D, E e F, respectivamente. Todas as regras gerais aqui apresentadas se aplicam também a esta base. Mas o que interessa mais é uma particularidade: “Cada caractere representativo da base 16 corresponde a 4 caracteres na base 2.” Por exemplo: O número binário 10110111 poderá ser representado em hexadecimal da seguinte forma: a) Separe-o primeiramente em duas metades: 1011 0111 b) Para cada uma das metades, calcule o seu valor decimal e determine o caractere correspondente em hexadecimal: 1011 = 8 + 0 + 2 + 1 = 11 (decimal) = B (hexadecimal) 0111 = 0 + 4 + 2 + 1 = 7 (decimal) = 7 (hexadecimal) c) Portanto o número final, na base 16 é: B7 - Introdução ao Delphi - Página 4 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho A LINGUAGEM DE MÁQUINA E A ELETRÔNICA DIGITAL Os computadores digitais, funcionam internamente fazendo cálculos e transmitindo dados na base 2, pois, ela apresenta sempre dois estados: ligado (1) ou desligado (0). Daí, montaram-se circuitos digitais capazes de verificar o estado lógico 0 ou 1. Tais estados lógicos são representados pelas diferenças de potencial (voltagem): 0 Volts para o algarismo 0 e 5 Volts para o algarismo 1. Não entraremos em detalhes a respeito, pois, foge ao escopo destas notas, mas, falaremos algumas pequenas coisas à respeito. PORTAS LÓGICAS: São circuitos digitais que apresentam algumas características de funcionamento relativas à funções da álgebra Booleana, tais como: AND, OR, NOT, XOR, NAND, etc ... A função AND, por exemplo, tem a seguinte definição: O resultado será 1 somente se todas as entradas forem iguais a 1. Ela é representada graficamente pelo símbolo: entradas saída Já a função NOT, serve para invertermos um estado lógico, isto é, se a entrada for 0 a saída será 1 ou vice-versa. Ela é representada graficamente pelo símbolo: entrada saída Poderíamos definir os microprocessadores como componentes eletrônicos capazes de “compreender” instruções passadas como comandos em números binários, que serão “tratados” internamente no circuito através de inúmeras portas lógicas associadas entre si. Dentre os microprocessadores atuais podemos citar: Pentium, Duron, Athlon, Celeron, etc. A decodificação de uma instrução em Assembly pode ser interpretada da seguinte forma, eletronicamente falando: a) Suponhamos que se uma determinada instrução, apagar a tela, por exemplo, pudesse ser representada pelo comando 2B (hexadecimal). O ato de apagar a tela é regido por um circuito analógico que apaga todos os pontos “acesos” no monitor. E este circuito é acionado ou não por um sinal de 5 Volts: Sinal de entrada que aciona o circuito CIRCUITO ANALÓGICO QUE APAGA A TELA b) Se este sinal de entrada puder ser comandado por um circuito digital que interpreta a instrução em linguagem de máquina (instrução 2B), a tela será apagada toda vez que este sinal for 5 Volts, ou seja, tiver o valor digital 1. DECODIFICADOR DA INSTRUÇÃO 2B (apagar a tela) Sinal de entrada que aciona o circuito CIRCUITO ANALÓGICO QUE APAGA A TELA - Introdução ao Delphi - Página 5 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho O decodificador da instrução 2B poderia ter o seguinte aspecto: Cada uma das entradas corresponde a um dos algarismos do número binário 1 da instrução 2B. 1 • Somente nas entradas iguais a 1 Zero, colocamos um inversor 1 (NOT), para que a entrada 1 passe a ser 1. 1 • Desta forma, todas as entradas passam a ser 1, e portando, a porta AND oferecerá na saída o valor 1. • Qualquer outro número apresentado na entrada irá fornecer pelo menos um valor 0, o que irá fazer com que a saída nunca seja 1. • Assim, este peq ueno circuito irá decodificar apenas a instrução 2B. • 1 1 O microprocessador, para reconhecer todas as instruções Assembly, terá inúmeros decodificadores, cada um reconhecendo uma e somente uma instrução. LINGUAGEM DE MÁQUINA: Portanto, para se elaborar um programa, basta que forneçamos uma série de números seqüenciais correspondendo a um conjunto lógico de instruções. Para exemplificar este fato, utilizaremos um programa auxiliar, que é instalado automaticamente no Windows, no qual poderemos visualizar estas instruções em Assembly. Para tal, siga os seguintes passos: a) Entre no modo “Prompt do MSDOS”. b) Digite o comando: DEBUG C:\WINDOWS\PBRUSH.EXE c) O comando acima irá chamar o programa DEBUG do Windows para mostrar os códigos em linguagem de máquina do programa PAINT também do Windows. d) Na direção do pequeno hífen que surge, digite a letra U (Unassembler) e acione [Enter]. Você verá algo como: -U 16B1:0000 16B1:0001 16B1:0002 16B1:0005 16B1:0007 16B1:0009 16B1:000C 16B1:000E 16B1:000F 16B1:0010 16B1:0011 16B1:0013 0E 1F BA0E00 B409 CD21 B8014C CD21 54 68 69 7320 7072 PUSH CS POP DS MOV DX,000E MOV AH,09 INT 21 MOV AX,4C01 INT 21 PUSH SP DB 68 DB 69 JNB 0033 JO 0087 - Introdução ao Delphi - Página 6 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho • • • Na primeira coluna encontramos os endereços da memória onde o programa foi carregado (em hexadecimal). Na segunda coluna, estão as instruções Assembly em hexadecimal. Na terceira coluna, estão os Mnemônmicos de cada instrução. e) Chamamos de Mnemônicos a um conjunto de palavras que facilitam o entendimento de um programa em Assembler. Estas palavras, na verdade correspondem a “apelidos” dados às instruções em hexadecimal para facilitar a memorização destas, pelo programador. f) Por exemplo: PUSH CS POP DS - coloque na memória (pilha) o valor guardado no registrador CS. - retire do topo da memória de pilha o valor que lá se encontra e coloque no registrador DS. Na realidade, estas 2 instruções juntas correspondem à seguinte lógica: Faça DS = CS. Aliás, esta instrução não existe, por isto foi necessário colocar as duas instruções citadas. Para maiores detalhes sobre este tipo de programação, assim como, sobre Eletrônica digital, consulte livros sobre o assunto, ou as apostilas dos professores destas disciplinas no site do Colégio Técnico Universitário da Universidade Federal de Juiz de Fora (CTU/UFJF), www.ctu.ufjf.br. COMPILADORES Você já deve estar imaginando o trabalho que se tem para programar em Assembler ! Por esta razão, por iniciativa de alguns programadores de uma universidade Americana, em 1955, foi criada a primeira Linguagem de Programação de Alto Nível, ou seja, a LINGUAGEM FORTRAN (FORmula TRANslation). Os programadores escreveram um programa em Assembler que foi capaz de interpretar comandos escritos em inglês e transformar os mesmos em instruções em linguagem de máquina. A partir deste momento, ficou um pouco mais fácil programar, pois, utilizando uma linguagem mais próxima do nosso dia a dia, incentivou-se o uso da Informática por outras pessoas que nunca tiveram a paciência e loucura de programar tudo em Assembler. De lá para cá, as linguagens de programação foram evoluindo de uma programação seqüencial (FORTAN, COBOL, BASIC), para uma programação estruturada (PASCAL, C) até chegar à programação orientada a eventos (VISUAL BASIC) e finalmente a programação orientada a eventos e a objetos (DELPHI, VISUAL C, etc). Com a popularização da Internet, surgiram outras linguagens de programação voltadas para ela, tais como: HTML, PHP, etc. Podemos então definir como COMPILADORES, os programas escritos em uma linguagem de baixo nível, capazes de TRADUZIR os comandos escritos em uma LINGUAGEM DE ALTO NÍVEL para a LINGUAGEM DE MÁQUINA. Agora, passaremos a estudar mais detalhadamente a linguagem de alto nível: DELPHI, que é orientada a eventos e a objetos. - Introdução ao Delphi - Página 7 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho OS OBJETOS DA VIDA REAL Em nosso dia a dia nos deparamos com vários objetos ao nosso redor. Vamos nos ater a um aparelho de TV. Já em programação visual para Windows, Linux, etc, um objeto pode ser um botão, uma janela (formulário), uma caixa de edição, uma imagem, etc. O aparelho de TV tem algumas características que podemos observar, tais como: tamanho da tela, se é colorido, tipo de móvel, marca, posição dos controles, etc. Em uma linguagem de programação orientada a objetos, vamos chamar estas características de propriedades. Estes aparelhos são construídos de forma a permitir a alteração do brilho e contraste da imagem, volume de som, canal visualizado, etc. que através de botões de controle, localizados no próprio aparelho ou no controle remoto, dão ao usuário estas alternativas de escolha. Em POO (Programação Orientada a Objetos), existem comandos que podem mudar características de funcionamento de um objeto, que também respondem ao desejo do usuário. Damos o nome de métodos, às rotinas escritas em “Object Pascal” que alteram características de funcionalidade de objetos e conseqüentemente do programa como um todo. Enquanto se assiste TV, o espectador pode tomar algumas decisões aleatórias, tais como: levantar e ir tomar água durante a propaganda, desligar o aparelho, abaixar o som, mudar de canal, etc. Estas atitudes podem ser tomadas pelo usuário em qualquer ordem ou até não serem executadas. Em uma Linguagem de Programação Orientada a Eventos, o usuário também pode tomar inúmeras atitudes em qualquer ordem, tais como, clicar em um botão, alterar o tamanho de uma janela, minimizar uma janela, arrastar um objeto, etc. Estas atitudes aleatórias tomadas pelo usuário são denominadas de eventos. Agora, se observarmos o mesmo aparelho de TV de uma forma mais abrangente, podemos afirmar que ele pertence à família dos televisores. Nesta família, todos os objetos têm características e objetivos semelhantes. Em POO ou OOP (em inglês) damos o nome de classe, a uma família de objetos. HISTÓRICO DAS LINGUAGENS OOP Um dos precursores deste tipo de Linguagem de Programação foi o Turbo Pascal na sua versão 5.5 da Borland. Tal conceito, mudava radicalmente toda a forma de criar programas, pois, até aquela época existiam as Linguagens seqüenciais (BASIC, FORTRAN, etc) e as Linguagens estruturadas (Pascal, C, etc). Mas, tal concepção de programação não atingiu sua verdadeira vocação até surgir o sistema operacional Windows (lançado pela Microsoft). Este Sistema operacional adotou este tipo de conceito que na verdade é a sua razão de existir, e fez com que outras linguagens também passassem a adotar tal conceito. A linguagem Turbo Pascal em sua versão 7.0 (a última versão lançada desta linguagem) foi uma das que possibilitou a programação em Windows, mas era trabalhosa e de difícil elaboração. Foi então que a Microsoft lançou a linguagem Visual Basic que inovou a forma de programar para Windows, mesclando a programação Basic dentro de um ambiente onde os objetos eram visualmente colocados no programa. Seguindo a idéia da Microsoft, a Borland lançou em seguida a Linguagem de Programação Delphi que também mescla o ambiente visual, mas com a linguagem de programação Pascal, chamada atualmente de Object Pascal. A linguagem VISUAL BASIC é Orientada a Eventos, isto é, as ações do programa acontecem de acordo com a vontade do usuário. Mas, infelizmente, devido às suas características de concepção, não é uma Linguagem Orientada a Objetos. Por sua vez, a linguagem DELPHI é, devido às suas raízes, uma Linguagem de Programação Orientada a Objetos e também Orientada a Eventos, e portanto, é a que melhor se comunica com o sistema operacional Windows. - Introdução ao Delphi - Página 8 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho OS OBJETOS DO WINDOWS O Sistema Operacional Windows apresenta vários objetos concebidos internamente neste sistema e que podem ser reconhecidos facilmente por todos aqueles que já o utilizaram: Podemos citar, por exemplo, o objeto botão, representado pelo botão Iniciar na tela principal do Windows 98 (veja figura ao lado). Outros objetos que aqui se apresentam ainda não são facilmente identificados pelo iniciante, mas o botão ora citado é um exemplo típico do que estamos tentando explicar: Apresentamos, logo acima à direita, dois botões aparentemente diferentes. Mas, ambos têm características em comum, tais como: ao serem acionados produzem a execução de alguma ordem, ao serem acionados mudam sua sombra de forma a nos dar a impressão que afundaram, etc. Por estas características em comum é que pertencem à mesma família ou classe “Tbitbtn”. A classe Tbitbtn contém o objeto BitBtn que possui na sua forma “standard” várias características já prontas. O programador não precisa se preocupar em desenhar o botão. Observa-se também, que o botão “Iniciar” possui um desenho e o outro não. A este desenho damos o nome de Glyph e é uma propriedade do objeto Tbitbtn. Notamos também que ambos possuem texto, mas, cujo teor é diferente. Este texto é digitado na propriedade Caption do objeto Tbitbtn. Ao acionarmos o botão, ele executa uma função qualquer. O ato de se acionar uma botão chama-se evento. Este evento em especial é chamado de OnClick. ALGUNS CONCEITOS IMPORTANTES OBJETO: são os elementos já programados do Windows, que podem ser utilizados pelo programador em suas aplicações, tais como: botões, formulários, figuras, sons, tabelas, caixas de diálogo, etc. CLASSE: é a família a qual pertencem os objetos de características comuns. EVENTO: é uma ação realizada pelo usuário do programa, tal como: clicar um botão, mover o ponteiro do mouse sobre uma região, mover um formulário, mudar o tamanho de um formulário, alterar o conteúdo de uma caixa de texto, etc. MÉTODO: é uma função ou procedimento, já programado internamente ou não, que realiza no objeto uma determinada ação. Exemplos: Abrir um arquivo, carregar uma figura, tocar uma música, etc. - Introdução ao Delphi - Página 9 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho PROPRIEDADES: são as características do objeto que podem ser alteradas pelo programador. Exemplos: cor, tamanho, fonte de texto, visibilidade, etc. HIERARQUIA: novos objetos podem ser criados a partir de objetos já existentes, herdando destes as propriedades, eventos e métodos que já possuam. POLIMORFISMO: os métodos e as propriedades herdadas de um objeto, quando modificados têm preferência sobre os métodos e propriedades do “pai”. Esta característica chama-se polimorfismo. Por exemplo: existe um comando chamado “ShowMessage” que mostra uma caixa de mensagem na tela. Esta caixa é padronizada e sempre irá apresentar no seu título o nome do aplicativo que a gerou: Se você escrever outro procedimento com o mesmo nome “ShowMessage”, este vai sobrepor o original do Delphi, passando a ser executado no lugar do mesmo. O polimorfismo talvez seja a característica mais importante dos objetos, pois, permite que o programador altere as características originais de uma propriedade, ou método de um objeto, desde que tais características estejam disponíveis ao usuário. Vamos estudar este assunto quando formos criar novos componentes herdados de componentes já existentes. O AMBIENTE DE DESENVOLVIMENTO DO DELPHI 01 03 02 04 05 - Introdução ao Delphi - Página 10 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho 03 01 02 01 – Menu principal: Nele estão contidas todas as opções possíveis de comandos do Delphi 5. 02 – Barra de Ferramentas: Ela contém os itens do menu que são mais utilizados. 03 – Paleta de componentes: Ela contém os objetos que podem ser incluídos no projeto. É a partir desta paleta que montamos um projeto em Delphi. 04 – Formulário padrão: É a janela principal de um projeto criado em Delphi. Aliás, a principal razão do Sistema Operacional da Microsoft chamar-se Windows, vem do fato que este sistema coloca todos os programas em janelas, que nós chamamos aqui em Delphi de formulário. 05 – Object Inspector: Esta janela é a que nos permite agir diretamente nas propriedades e nos eventos de cada objeto incluído em um formulário. Repare que existem 2 abas: uma indicando Properties (propriedades) e outra indicando Events (eventos). Clicando em uma ou em outra teremos acesso às propriedades e/ou aos eventos de um objeto selecionado no formulário, ou as propriedades do próprio formulário (como está na figura ao lado). - Introdução ao Delphi - Página 11 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho VARIÁVEIS e TIPOS Damos o nome de variáveis às palavras as quais atribuímos valores, ou melhor, conteúdos temporários, que serão utilizados no programa. Por exemplo: podemos atribuir a uma variável chamada idade a idade de uma pessoa, ou a uma variável nome o nome de uma pessoa, etc. Dissemos que os conteúdos são temporários porque ficam na memória RAM e, portanto, ao desligarmos o computador os dados são perdidos. A atribuição de algum valor se faz utilizando-se o par de símbolos := e dando o seu valor. Exemplo: Idade := 16; Nome := ‘José da Silva’; Obs.: Existem outros comandos que possibilitam atribuir valores às variáveis, mas ainda não é o momento de falarmos sobre eles. As variáveis deverão ter seus nomes sempre iniciados por uma letra, ou “underline”, sendo que os demais caracteres poderão ser letras, números e o “underline” ( _ ). O Delphi não diferencia o fato das letras serem maiúsculas e/ou minúsculas. A acentuação não é permitida nos nomes das variáveis, apenas em seus conteúdos. Exemplos: Nome_do_cliente Salario Total01 _X3 Contra-exemplos: Nome do cliente Salário 3N X/Y ß possui espaços em branco ß possui acento ß começa com um número ß possui caractere não permitido (/) Os tipos são palavras reservadas que indicam que tipo de dados serão guardados em uma variável. Citaremos a seguir alguns tipos existentes na linguagem. Outros tipos iremos informar a medida que forem sendo necessários: • • • • • • • • Integer: guardam números inteiros (sem o ponto decimal). Estes números poderão estar entre: -2147483648 a 2147483647 (inclusive) para aplicações de 32 bits e de –32768 a 32767 (inclusive) para aplicações de 16 bits. Utilizam 4 ou 2 bytes respectivamente. Byte: guardam números inteiros entre 0 e 255 (inclusive). Utilizam 1 byte. Word: guardam números inteiros de 0 a 65535 (inclusive). Utilizam 2 bytes. ShortInt: guardam valores inteiros de -128 a 127 (inclusive). Utilizam 1 byte. Real: guardam valores que possuam casas decimais. Variam entre 2.9x10-39 e 1.7x1038 (inclusive) com valores positivos e negativos. Utilizam 6 bytes. Char: guardam um caractere. Utilizam 1 byte. String: guardam uma cadeia de caracteres. Utilizam tantos bytes quantos caracteres acrescido de 1. Podem armazenar de 0 a 255 caracteres. Boolean: guardam o valor true ou false. - Introdução ao Delphi - Página 12 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho Para se declarar uma variável utiliza-se a cláusula Var seguida da relação de variáveis: Exemplo: Var Nome: string[40]; Idade: byte; Sexo: char; Aposentado: boolean; Salario: real; Observacoes: string; Convém observar atentamente a declaração do tipo string. Quando nenhum valor é colocado após a palavra, o Delphi assume o valor 255. Portanto, no exemplo acima a variável nome conterá no máximo 40 caracteres e estará ocupando 41 bytes na memória. Já a variável observacoes conterá um texto de no máximo 255 caracteres e ocupará 256 bytes na memória. A variável sexo poderá conter apenas 1 caractere, já que é do tipo Char. Além dos tipos existentes, podemos criar novos tipos, utilizando a cláusula Type. Type Semana = (SEG,TER,QUA,QUI,SEX,SAB,DOM); Var Dia: Semana; Nas linhas acima, podemos ver a declaração do tipo Semana que não existe no Delphi, mas foi por nós criado a partir da utilização da cláusula Type. Em seguida, declaramos a variável Dia com o tipo recém criado, através da cláusula Var. Portanto, poderemos utilizar a variável Dia no projeto, desde que ela possua um dos valores declarados: SEG, TER, QUA.... Quando se quer declarar uma variável que deverá conter vários tipos se faz da seguinte forma, utilizando a palavra reservada Record: Type Tcliente = record Nome: string[40]; Fone: string[15]; Valor: real; end; Var Cliente: Tcliente; A variável Cliente poderá guardar em si o nome, telefone e o valor da venda para um cliente. Para se referir ao nome do cliente ou a qualquer um dos outros dois campos você fará assim: Cliente.nome := ‘Paulo Silveira’; Cliente.telefone := ‘333-4444’; Cliente.valor:= 1234.67; - Introdução ao Delphi - Página 13 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho VARIÁVEIS LOCAIS E GLOBAIS: Conforme o local onde as variáveis são declaradas, elas se classificam em locais ou globais. As GLOBAIS são aquelas declaradas na seção Interface das Units. Tudo que é declarado nesta seção vale para toda a Unit assim como para todas as Units que a ela fazem referência. As LOCAIS são aquelas declaradas no âmbito da rotina. Elas são declaradas ou como parâmetros de uma procedure ou function ou numa declaração Var inserida na própria rotina. Exemplos: procedure TForm1.Calcula(x: integer; y: string); No exemplo acima, as variáveis X e Y existem apenas enquanto a procedure “Calcula” estiver sendo executada, pois, foram declaradas localmente como parâmetros de entrada da rotina. procedure TForm1.Resultado; var N: string[40]; end Já no exemplo acima, a variável N também é local, existindo apenas enquanto a rotina “Resultado” estiver sendo executada, porém, foi declarada localmente em uma cláusula Var. A área de abrangência de qualquer comando ou variável é chamada de ESCOPO, isto é, o local ou região onde aquele comando ou variável tem efeito. As variáveis GLOBAIS existem durante toda a execução da Unit, enquanto que as locais só existem durante a execução das rotinas (procedure ou function). PROCEDIMENTOS E FUNÇÕES Os procedimentos e as funções correspondem a um conjunto de instruções que realizam determinada tarefa ou tarefas. As funções funcionam exatamente como os procedimentos, apenas tendo a capacidade de retornar em seu nome um determinado resultado. Vamos exemplificar: suponha que você queira calcular uma das raízes de uma equação do 2º grau. Vamos mostrar este cálculo utilizando um procedimento e depois uma função: - Introdução ao Delphi - Página 14 - LINGUAGEM DE PROGRAMAÇÃO DELPHI Prof. Alberto Cezar de Carvalho : : Var x: real; : : Procedure Raiz(sinal: boolean; a,b,c: real); Begin If sinal then x := (-b + sqrt(b*b – 4*a*c)) / (2*a) else x := (-b - sqrt(b*b – 4*a*c)) / (2*a); End; No procedimento acima, a variável X deverá ser declarada na Unit, para que possa guardar o resultado. Se fosse uma função, ficaria da seguinte forma: Function Raiz(sinal: boolean; a,b,c: real): real; Begin If sinal then Raiz := (-b + sqrt(b*b – 4*a*c)) / (2*a) else Raiz := (-b - sqrt(b*b – 4*a*c)) / (2*a); End; Repare que o resultado ficará colocado no nome da função (Raiz) que foi declarada na primeira linha da função (tipo real); isto faz com que não necessitemos mais de declarar uma variável X como no caso de procedimento. Para executar um procedimento faça: : : Raiz(true,1,-5,6); : : Para executar uma função faça: : : C:= Raiz(false,2,-10,12); : J J J J J J J J J J J J J J J - Introdução ao Delphi - Página 15 -