Visitantes que leram esse artigo, também visitaram:
  • Controle do Programa no Visual Basic – Parte 1
  • Usando Procedimentos e Funções no Visual Basic – Parte Final
  • Usando Procedimentos e Funções no Visual Basic – Parte 2
  • Usando as Ferramenta e Forms do VB – Parte 1
  • Depuração e Tratamento de Erros no Visual Basic – Parte 1


  • Usando Procedimentos e Funções no Visual Basic – Parte 1

    Postado por Plinio Cruz em 30 de março de 2009 na categoria Programação, Visual Basic | 4 Comments to Read

    1 Estrela2 Estrela3 Estrela4 Estrela5 Estrela (5 votos, média: 4,20)
    Loading ... Loading ...

    A maioria dos procedimentos que você escreveu nos capítulos anteriores foram procedimentos de eventos – isto é, eles foram projetados especialmente para responder a eventos específicos disparados pelo usuário ou pelo sistema. Este capítulo mostra-lhe como escrever e usar procedimentos genéricos (incluindo sub-procedimentos e procedimentos de funções) que executam uma certa tarefa quando são chamados explicitamente por outras instruções do programa (em vez de serem disparados por um evento). Este capítulo explora também o uso de parâmetros, que permite ao programa passar certos valores para os procedimentos e funções que chama. Como você verá, até mesmo objetos do Visual Basic podem ser passados como argumento. Finalmente, este capítulo aborda alguns procedimentos de eventos avançados, como aqueles que lhe permitem rastrear o movimento do mouse e implementar recursos do tipo arrastar e soltar.

    Procedimentos Genéricos

    As primeiras aplicações que você escreveu tinham um controle de fluxo linear: após uma instrução ser executada, era executada a próxima instrução seqüencial. No capitulo anterior, você começou a trabalhar com desvios condicionais (instruções If) e com laços, que modificam a ordem na qual as instruções são executadas.

    Da mesma forma que laços, os procedimentos permitem que seu programa execute um conjunto de procedimentos mais de uma vez. Entretanto, em vez de executar repetidamente um conjunto de instruções, os procedimentos permitem que você agrupe instruções num conjunto que possa ser executado quando necessário. Por exemplo, um procedimento de evento do Visual Basic é executado quando o usuário faz uma certa ação; um procedimento genérico é executado quando é chamado por uma instrução do aplicativo.

    Considere um programa que simule as ações de uma criança pequena passeando de automóvel. Este código ilustra o comportamento conhecido como:

    “choramingas” :
    Resposta = lnputBox(“Ainda não chegamos ?”)
    lf Resposta = “Não” Then
    MsgBox “Estou cansado”
    End If

     

    Em um programa que simule o comportamento de crianças, é de se esperar que essas linhas sejam duplicadas um boa quantidade de vezes. Porém, em vez de codificar múltiplas cópias dessas instruções, você pode agrupá-las em um procedimento e executá-lo simplesmente invocando o seu nome. Inclua uma declaração do procedimento, dando-lhe um nome descritivo:

    Sub Choro ()
    Dim Resposta As String
    Resposta = lnputBox(“Ainda não chegamos ?”)
    lf Resposta = “Não” Then
    MsgBox “Estou cansado”
    End lf
    End Sub

    Com esse procedimento, os fragmentos dos dois programas que seguem são equivalentes:

    Figura 7.1

    Fluxo de Controle

    Obviamente, os procedimentos afetam o fluxo de controle de execução de um programa. Quando o Visual Basic encontra o nome de um procedimento, ele guarda a posição atual no programa e então se move para executar o procedimento designado. Quando é encontrado o final do procedimento, ele retorna à posição original do programa e continua a execução a partir daquele ponto. Esse processo é conhecido como chamada de procedimento, pois o programa “chama” o procedimento. Como o Visual Basic pode rastrear centenas de níveis de chamadas, um procedimento chamado por um programa pode conter dentro de si próprio uma chamada de procedimento e assim por diante.

    Parâmetros

    Suponha que você esteja escrevendo um programa que precise, em algum ponto, imprimir os inteiros de 1 a 10. Em outro ponto, o mesmo programa precisa imprimir os inteiros de 1 a 17. A codificação para essas duas rotinas é mostrada a seguir:

    Primeira Rotina Segunda Rotina

    For Contador = 1 To 10 For Contador = 1 To 17
    Print Contador Print Contador
    Next Contador Next Contador

    Como essas rotinas são muito semelhantes, é muito simples generalizar – isto é, fazer com que o mesmo código sirva para os dois propósitos. A únicadiferença entre os dois é o valor final no laço For, que pode ser substituído por uma variável. Depois disso você poderá usar um procedimento único, chamando-o após armazenar na variável o valor final desejado, conforme mostrado a seguir. (Assuma que a instrução Dim ContFinal As Integer aparece na seção de declarações gerais do programa.)

    Figura 7.2

    Como se pode ver, o uso combinado de variáveis e procedimentos permite que você encontre soluções genéricas para os programas mais facilmente, além de colocar à sua disposição excelentes ferramentas de programação. Entretanto, há alguns problemas práticos com a implementação feita anteriormente. Em particular, você precisa declarar variáveis globais (públicas) ou em nível de módulo para fazer a comunicação entre o programa principal e o procedimento que está sendo chamado. Além disso, é preciso que as variáveis locais aos procedimentos tenham nomes diferentes das variáveis globais. Do contrário, a chamada de um procedimento poderá fazer com que o valor de uma variável global seja sobreposto por valores locais ao procedimento.

    O Visual Basic resolve essas questões, permitindo que os procedimentos aceitem parâmetros que sejam tratados como variáveis locais ao procedimento, porém inicializados pela codificação que chama o procedimento. A rotina chamadora inicializa essas variáveis com a colocação de um conjunto de valores após o nome do procedimento a ser chamado. Eis a sintaxe para uma tal chamada de procedimento:

    name[ value[, value] … ]

    Observe que os argumentos são separados por vírgulas. A rotina chamadora tem de saber os nomes dos parâmetros, pois o assinalamento destes valores às variáveis locais ao procedimento chamado será feito segundo a ordem de especificação dos parâmetros.

    Na declaração do procedimento, os parâmetros são declarados dentro dos parênteses que seguem o nome do procedimento. O Visual Basic permite que os procedimentos tenham vários parâmetros. Eis a sintaxe para declaração de procedimento que inclua parâmetros:

    Sub name ([parâmetro [As tipo], [parâmetro [As tipo]] … ])
    End Sub
    Veja como ficou o exemplo anterior, refeito com o uso de parâmetros:

    Figura7.3

    Para ilustrar o uso de múltiplos parâmetros, você poderia modificar o procedimento PrintCont para aceitar tanto o valor inicial quanto o valor final, conforme mostrado a seguir:

    Figura7.4

    Procedimentos de Funções

    A partir dos exemplos precedentes, voc̻ deve ter reparado que, quando se trata de chamadas de procedimentos gen̩ricos, a comunica̤̣o ̩ feita apenas num sentido Рisto ̩, a rotina chamadora passa valores para o procedimento que executa alguma a̤̣o, mas ṇo retorna qualquer valor para a rotina chamadora. No entanto, voc̻ pode usar um tipo especial de procedimento, chamado procedimento de fun̤̣o (ou simplesmente fun̤̣o), que retorna valor ao chamador. A maioria da fun̵̤es internas do Visual Basic faz isso.

    Ao declarar uma função, você deve declarar o tipo de valor que ela retorna, bem como os parâmetros necessários, como mostra a definição de sintaxe:

    Figura7.5

    Como você pode ver, há duas diferenças entre um procedimento de função e um subprocedimento. Um procedimento de função é delimitado pelas instruções Function e End Function, enquanto um subprocedimento requer Sub e End Sub. E, como mostra a definição sintática, em algum lugar dentro do corpo da função, você deve assinalar um valor (expressão) ao nome da função. Esse é o valor que será retornado para a rotina chamadora. Por exemplo, esta função retorna o maior valor entre dois inteiros:

    Function MaxInt (X As Integer, Y As Integer) As Integer
    If X > Y Then
    MaxInt = X
    Else
    MaxInt = Y
    End If
    End Function

    A sintaxe para a chamada de um procedimento de função é ligeiramente diferente da sintaxe usada para chamar um subprocedimento. Como a função retorna um valor, ela pode ser chamada em qualquer lugar em que uma expressão seja válida. Os parâmetros da função são, portanto, delimitados por parênteses para separá-los de outras partes de uma expressão. Aqui estão algumas instruções chamando a função MaxInt:

    Print MaxInt(7, 14)
    DuasVezesMaior = MaxInt(3, 4) * 2
    lf MaxInt(PrimeiraOpção, SegundaOpção) > 20 Then

    Quando a função a ser chamada não requer parâmetros, basta usar o nome da função, como se fosse uma variável. A função interna Now do Visual Basic (que retorna data e hora atuais) é um exemplo de função que não requer a passagem de parâmetros.

    Escrevendo Procedimentos

    A discussão que se segue usa o termo procedimento para se referir à idéia geral de rotina que pode ser chamada. Quando necessário, o termo procedimento de função (ou simplesmente função) ou o termo subprocedimento será aplicado para dar maior clareza à exposição.

    Para criar um procedimento que possa ser chamado em Visual Basic, você deve abrir a janela de código. A partir do menu Tools, escolha a opção Add Procedure. Na caixa de diálogo Add Procedure, digite o nome do novo procedimento, escolha entre Sub ou Function, dando um clique num dos dois botões de opção. Escolha entre público e privado também clicando em uma das opções.Dê um clique no botão OK. O Visual Basic criará então um novo item na caixa de procedimentos da janela de código, já inserindo a instrução End apropriada para o tipo de procedimento que estiver sendo criado. Agora, você pode incluir as declarações de parâmetros necessárias ao seu procedimento.

    Nota: você deve ter notado as opções property e event na caixa de diálogo Add Procedure. Trataremos destas opções quando falarmos sobre Classes e Objetos.

    Vamos escrever um programa simples chamado Conversão de Temperatura, para executar uma conversão simples de temperatura entre as escalas Celsius e Fahrenheit. Abra um novo projeto e coloque uma barra de deslocamento vertical, seis rótulos e duas caixas de texto no form, dispondo-os como mostrado na Figura 7.7. Configure as propriedades dos objetos de acordo com a tabela mostrada na Figura 7.6.

    O programa permitirá ao usuário ajustar a barra de deslocamento para qualquer configuração de temperatura entre os pontos rotulados como -40 e 212 na escala Fahrenheit ou entre as temperaturas correspondentes -40 e 100 na escala Celsius. O aplicativo então exibirá o valor da temperatura para a configuração escolhida nas duas escalas, Fahrenheit e Celsius. Repare que a configuração da propriedade Min para a barra de deslocamento é maior do que a configuração para Max. Essa forma de configuração faz com que a barra de deslocamento coloque o extremo superior de sua faixa de variação no topo, ao contrário do que acontece quando a configuração da propriedade Min é menor do que a da propriedade Max .

    Figura 7.6 РO projeto inicial do form, para o aplicativo Converṣo de Temperatura.

    Figura7.7 РConfigura̤̣o de propriedades para o aplicativo Converṣo de Temperatura.

    Por questões de simplicidade, o programa sempre “pensará” em termos de graus Celsius, fazendo a conversão para obter a temperatura em Fahrenheit. Em primeiro lugar, você deve escrever a função que retorna a temperatura Fahrenheit quando o programa fornecer a temperatura em graus Celsius. Comece abrindo a janela de código do form. A partir do menu Tools, escolha a opção Add Procedure. Na caixa de diálogo, digite CParaF, escolha o botão de opção Function e dê um clique em OK. Então, edite a nova função como segue (inicie adicionando as declarações do parâmetro e do tipo de valor a ser retornado na instrução Function):

    Function CParaF (TempC As Integer) As Integer
    CParaF = Cint(TempC * 9 / 5 + 32)
    End Function

    A função CParaF aplica a fórmula padrão de conversão métrica. Recebendo a temperatura em graus Celsius como parâmetro, ela retorna a temperatura equivalente na escala Fahrenheit. Para simplificar a saída e o uso da barra de deslocamento, os valores estão restritos a inteiros. (A função CInt converte valor em ponto flutuante para inteiro, por arredondamento.)

    Agora, você pode escrever o código que lê o valor da barra de deslocamento e exibe os valores das temperaturas. Introduza o seguinte subprocedimento abaixo da função:

    Sub ExibeTemp ()
    Dim TempC As Integer
    TempC = Clnt(VscTermômetro.Value)
    TxtGrausC.Text = Str$(TempC)
    TxtGrausF.Text = Str$(CParaF(TempC))
    End Sub

    Após introduzir a primeira linha (a instrução Sub), repare que o Visual Basic adiciona o nome do procedimento à caixa de procedimentos e inclui a instrução End Sub no código que você está escrevendo. Como você pode ver, é possível criar novos procedimentos, tanto por meio da opção Add Procedure do menu Tools quanto da introdução da instrução Function ou Sub em qualquer lugar da janela de código.

    O código para o procedimento ExibeTemp lê o valor da barra de deslocamento, VscTermômetro.Value, armazenando-o na variável TempC. O valor é exibido na caixa de texto TxtGrausC. Então, a caixa de texto TxtGrausF é configurada com o resultado gerado pela função de conversão CParaR.

    Finalmente, selecione o objeto VscTermômetro (a barra de deslocamento) na caixa de objetos da janela de código e edite seus procedimentos de evento como mostrado aqui:

    Private Sub VscTermômetro_Change ()
    ExibeTemp
    End Sub
    Private Sub VscTermômetro_Scroll ()
    ExibeTemp
    End Sub

    Com isso, toda vez que o usuário alterar a barra de deslocamento, o procedimento ExibeTemp fará seu trabalho. Processe o aplicativo para ver se ele funciona como esperado. O resultado dever parecer-se com o exemplo mostrado na Figura 7.8.

    Figura7.8 РProcessando o aplicativo Converṣo de Temperatura.

    Artigo gentilmente cedido por Codelines

     

     

    • Gilberto de Souza said,

      Parabéns pelo artigo. Particularmente eu gostaria de estar visitando e acompanhando os artigos aqui postados. São exemplo simples, mas que ajudam em pequenas rotinas diárias em excel, por exemplo.

      Abraço e sucesso!!

    • Plinio Cruz said,

      Muito obrigado Gilberto, nosso objetivo é esse, que você e nossos visitantes sempre encontrem ajuda de forma rápida e fácil, pois a informática é para isso, para facilitar nosso dia-a-dia. Abraço e volte sempre que precisar.

    • Mario said,

      Muito bom. Objetivo e claro. Parabéns.

    • Jose Sejour Bautista said,

      presiso de teoricamente la actividades de programacion en visual basic practica para poder programar el decir en que consiste esta actividad porque yo tengo el intalador y libro pero desconosco la actividad como tal

    Deixe seu comentário