<Índice> <1> <2> <3> <4> <5> <6> <7> <8> <9> <10> <11> <12> <13> <14> <15> <16> <17> <Pág. Princ.>

 

OS NÍVEIS DE UM PROGRAMA

 

     Vamos começar criando um programa que use 2 forms.

     Vamos fazer de conta que temos um excelente programa e queremos fazer uma janela "Sobre" para ele. Primeiro coloque um botão (botSobre - este será seu name) no form que o VB cria para nós. Ajuste o caption deste botão para "Sobre..."

     Mas normalmente o "Sobre..." vai em um menu.

    Continuando. Nosso "Sobre" será educado. Ele agradecerá ao usuário por     ter usado o programa. E o chamará pelo nome. Então, ainda nesta primeira janela, coloque uma caixa de texto (chame-a de txtNome) e deixe-a em branco (apague todo seu text). Além disto, crie um outro botão (chame-o de botPergunta) e coloque nele um caption de "?". Este botão mostrará uma caixa de mensagem com o nome do usuário e serve apenas     para mostrar os tais dos "níveis" do programa.

     Adiante. Vamos colocar algum Código no Evento Change da txtNome. O     vento change ocorre cada vez que o texto de uma TextBox muda.

     Private Sub txtNome_Change()
         Dim Nome As String
         Nome = txtNome.Text  ‘A variável Nome recebe a propriedade Text da
     End Sub    ‘txtNome

     É fácil descobrir o que isto faz: cada vez que o texto da txtNome muda, ele é guardado na variável "Nome". Normalmente só leríamos o valor da caixa quando realmente precisássemos dele, mas para o exemplo terá de ser assim.

     No botPergunta coloque o seguinte:

     Private Sub botPergunta_Click()
         Dim Nome as String
         MsgBox Nome
     End Sub

     MsgBox, é um comando que mostra uma caixa de mensagem. Seu uso mais     simples é MsgBox “Texto”, onde Texto pode ser uma variável string ou o texto em si (colocado entre aspas).
     Já sei! Quando clicarmos no "?", vai aparecer uma caixa de mensagem     contendo o nome escrito na caixa de texto.

     Por quê?

     Fácil. O texto da caixa de texto está na variável "Nome". Depois, a     MsgBox diz para mostrar o conteúdo da variável Nome!

     Então execute e veja se dá certo.

     A caixa de mensagem aparece vazia!

     É por causa dos "níveis" do programa. Quando declaramos uma variável     com um Dim, dentro de um subprocedimento (como fizemos agora), a variável só existe dentro daquele subprocedimento. Ela não está disponível para outras "Subs". Além disto, quando a Sub que a continha acaba de ser executada, o valor da variável se perde, mesmo para futuras "chamadas" da mesma Sub (Este segundo problema pode ser     solucionado declarando a variável com o comando Static, e não Dim).

     Vamos solucionar nosso problema. Primeiro, vá nas duas Subs que criamos e recorte (Ctrl+X) a linha "Dim Nome as String" de ambas. Agora dê um duplo clique no Form (até agora só estamos usando um) para mostrar a janela de edição. Na "Caixa de Seleção" Object, no canto superior esquerdo, escolha "General". Note que caixa "Proc:" vira     "Declarations". Agora, abaixo, cole (Ctrl+V) a linha Dim Nome as String. E teste o programa de novo. Deve ter funcionado. Quando declaramos variáveis na seção Declarations de um Form, aquela variável estará disponível para todas as Subs daquele Form.

     E a segunda janela?

     OK, crie um segundo Form. Basta clicar no primeiro botão da barra de     ferramentas ou usar o menu Insert | Form. Coloque neste novo form o nome de JanSobre. Nele coloque uma Label ("lblObrigado"). No Evento Load deste form coloque o seguinte Código:

     lblObrigado.Caption = Nome & ", obrigado por utilizar este programa."

     Uma OBSzinha: "&" é um operador que junta duas Strings em uma só     (operadores são comandos que realizam operações - lógicas, matemáticas...-, como +, -, AND e o próprio &. ). Podemos usar  “+” no lugar de “&”.

     E na seção Declarations deste Form, coloque Dim Nome as String. Agora     vamos "ligar" os dois forms. Volte ao primeiro form e inclua o seguinte Código ao botSobre:

     Private Sub botSobre_Click()
         janSobre.Show vbModal
     End Sub

     Isto mostrará a janSobre quando o botão for clicado. vbModal indica ao     VB que esta janela será "Modal". Depois, retire o vbModal e note a diferença. OBS: Em versões do VB anteriores à 4.0, use o número 1 no lugar de vbModal.

     Analisando todas estas novas subs, a que conclusão chegastes?

     Bem, a caption do lblObrigado deverá mostrar algo como:  "João, obrigado por utilizar este programa." Mas se der errado de novo não me surpreendo. Já deu para notar que adoras mostrar como não fazer... Mas vou executar.

     E aí?

     Deu errado. A Label mostrou apenas ", obrigado por utilizar este     programa."

     É normal. Lembras que uma variável declarada na seção Declarations de um Form está disponível para todas as Subs do seu próprio form. Nós estamos usando dois forms; essencialmente é o mesmo problema que tivemos alguns parágrafos acima. E para problemas semelhantes, soluções semelhantes: declarar a variável em um nível "mais alto". Só nos resta o terceiro e mais abrangente nível de programação: o nível que abrange todo o programa (o módulo).

     Crie um Module. Use o menu Insert | Module, ou aquele botão da barra de ferramentas que parece uma aranha fantasiada para o carnaval. Neste module (as versões anteriores à 4.0 do VB chamavam de Global Module, ou algo assim), inclua a declaração da variável Nome:

     Public Nome as String

     Note que declaramos usando "Public", que informa ao VB que esta     variável será "Pública", disponível para todas as Subs de todos os Forms deste programa. Agora, retire as duas linhas "Dim Nome as String" que estão nas seções Declarations de cada Form. Execute.

     Funcionou!

     Então, só para uma aparência mais bonitinha, aí vai um esquema dos níveis do programa:

     Falta responder o que é escopo!

     Escopo     são os níveis do programa. Por exemplo, aqueles dois erros que tivemos durante o capítulo foram causados porque as variáveis estavam "fora de escopo".