VisualBasic

Home
Aulas e Dicas
Empregos
Classificados
SuperLinks
Busca
Comentários


Criada por:
Cláudia Lobo

Barra de Tarefas do Windows ] Economize com a sua impressora ] Mala Direta no Word ] HTML ] Gráfico no Excel ] Tutorial do ICQ ] Contatos-ICQ ] O que é CHAT ] [ VisualBasic ] Digitação ]

PROGRAMA EM Visual Basic 5
(Veja no final da página o site original)

Cartões da Mega Sena

O projeto a seguir mostra como realizar sorteios de 6 dezenas da Mega Sena de uma forma mais ampla que o exercício VB-027.

Esse projeto gera tantos cartões quanto o usuário digitar em uma Caixa de Texto.

Comandos ainda não vistos (como de impressão, por exemplo) serão tratados nesse exercício.

Monte o formulário abaixo a partir de um projeto vazio do VB5 (os elementos que aparecem à esquerda do botão Gerar é o Text1 e o que aparece à esquerda de List2 é List1).

 

 

 

 

 

 

 

 

Observações:

O nomes dos botões de comando devem ser os seguintes:

Gerar: cmdGerar

OK: cmdOK

Finalizar Programa: cmdFim

List1 deve estar invisível e ter sua propriedade Sorted = True

List2 deve estar visível e ter sua propriedade Sorted = False

O Código para Cartões

Dim Cartoes, A, B, C, D, E, F, T, Dezena$(100000)

Dim TextoA As String, TextoB As String, TextoC As String

Dim TextoD As String, TextoE As String, TextoF As String

Dim Resposta, Z

Comentários do código acima:

O comando Dim acima declara variáveis. Em outras palavras você terá que dizer ao VB que usará mais tarde uma palavra (como a palavra TextoA, por exemplo) antes de usá-la. Se você usar uma palavra sem declará-la com o comando Dim, o VB acusará um erro em seu programa. (Para saber maiores detalhes sobre determinado comando, lembre-se que você tem o projeto Linguagem, presente na pasta C:\Aulas\Vb).

Private Sub Form_Load()

Label1.Caption = "Este formulário gera cartões com dezenas aleatórias"

Label2.Caption = "Informe o nº de cartões que você quer jogar:"

cmdOK.Enabled = False

End Sub

Comentários do código acima:

Quando você roda seu programa, as etiquetas Label1 e Label2 mostram textos para que o usuário saiba o que deverá fazer no seu programa. Além disso, deixa desabilitado o botão de comando OK.

Private Sub CmdGerar_Click()

List1.Clear

List2.Clear

Cartoes = Val(Text1.Text)

Randomize

For T = 1 To Cartoes

List1.Clear

A = Int((Rnd * 60) + 1)

B = Int((Rnd * 60) + 1)

Do While B = A

B = Int((Rnd * 60) + 1)

Loop

C = Int((Rnd * 60) + 1)

Do While C = A Or C = B

C = Int((Rnd * 60) + 1)

Loop

D = Int((Rnd * 60) + 1)

Do While D = A Or D = B Or D = C

D = Int((Rnd * 60) + 1)

Loop

E = Int((Rnd * 60) + 1)

Do While E = A Or E = B Or E = C Or E = D

E = Int((Rnd * 60) + 1)

Loop

F = Int((Rnd * 60) + 1)

Do While F = A Or F = B Or F = C Or F = D Or F = E

F = Int((Rnd * 60) + 1)

Loop

If A < 10 Then

TextoA = "0" & A

Else

TextoA = A

End If

If B < 10 Then

TextoB = "0" & B

Else

TextoB = B

End If

If C < 10 Then

TextoC = "0" & C

Else

TextoC = C

End If

If D < 10 Then

TextoD = "0" & D

Else

TextoD = D

End If

If E < 10 Then

TextoE = "0" & E

Else

TextoE = E

End If

If F < 10 Then

TextoF = "0" & F

Else

TextoF = F

End If

List1.AddItem TextoA

List1.AddItem TextoB

List1.AddItem TextoC

List1.AddItem TextoD

List1.AddItem TextoE

List1.AddItem TextoF

TextoA = List1.List(0)

TextoB = List1.List(1)

TextoC = List1.List(2)

TextoD = List1.List(3)

TextoE = List1.List(4)

TextoF = List1.List(5)

If T >= 1 And T < 10 Then Dezena$(T) = "00" & T & " => " & TextoA & " " & TextoB & " " & TextoC & " " & TextoD & " " & TextoE & " " & TextoF

If T >= 10 And T < 100 Then Dezena$(T) = "0" & T & " => " & TextoA & " " & TextoB & " " & TextoC & " " & TextoD & " " & TextoE & " " & TextoF

If T >= 100 Then Dezena$(T) = T & " => " & TextoA & " " & TextoB & " " & TextoC & " " & TextoD & " " & TextoE & " " & TextoF

List2.AddItem Dezena$(T)

Next T

cmdOK.Enabled = False

Option1.Value = False

End Sub

Comentários do código acima:

Quando você clica em Gerar o programa limpa as duas Caixas de Listagens e a instrução Randomize inicializa o gerador de números aleatórios.

Depois disso o programa entra em um For. Nessa instrução a variável T é contada de 1 até Cartoes, que é a quantidade de cartões que você digitou em Text1.

O primeiro comando dentro desse "looping" é List1.Clear, novamente, pois cada novo cartão gerado não pode ter dezenas já geradas (experimente retirar esse comando de seu programa e veja o que acontece)

As variáveis A, B, C, D, E e F são utilizadas para registrar os valores das 6 dezenas geradas. O comando Do While B = A (Enquanto B for igual a A) é utilizada para garantir que o valor gerado em B não seja igual ao gerado em A. Se for, é gerado um novo valor B. Veja que C não pode ser igual a A nem igual a B e que F não pode ser igual a A até E.

Quando todas as dezenas já foram geradas, o programa joga todas elas para outras variáveis de Texto (String) chamadas TextoA até TextoF. Veja que se uma dezena gerada for menor que 10 é acrescentado um zero (0) na frente dela para que fique, por exemplo 05 ao invés de apenas 5.

Depois disso as instruções List1.AddItem adicionam essas dezenas na Caixa de Listagem List1. Como List1 possui sua propriedade Sorted definida como True, as dezenas ficam em ordem crescente nessa Caixa de Listagem.

Em seguida, as variáveis TextoA até TextoF são alimentadas com os valores contidos em List1. Observe que para você "pegar" um valor de uma Caixa de Listagem o item é List1.List(0), o é List1.List(1), e assim por diante.

Depois, é utilizada a variável Dezena$(T) que pode ir até 100.000 conforme instrução Dim determinada na 1ª linha de seu programa. Essa variável armazena cada um dos cartões já em ordem, e acrescenta o número do cartão com dois zeros para cartões menores que 10 e um zero para cartões >= 10 e < 100.

Tudo isso é acrescentado em List2 para ser mostrado na tela.

Por esse motivo List2 está visível e List1 está invisível. Em outras palavras, List1 é importantíssima para nosso programa, pois coloca em ordem cada uma das 6 dezenas, mas não precisa aparecer na tela e List2 deve aparecer na tela para mostrar os cartões ao usuário.

A instrução Next T faz o programa acrescentar uma unidade a valor atual de T, retorna até a intrução For para criar mais um cartão.

É desabilitado o botão de comando OK e o botão de opção é "desclicado" cada vez que se clica em Gerar.

Digite, ainda, o seguinte código para o botão de opção:

Private Sub Option1_Click()

cmdOK.Enabled = True

End Sub

Digite, ainda, o seguinte código para o botão de comando OK:

Private Sub cmdOK_Click()

Resposta = MsgBox("Tem certeza que deseja imprimir os " & T - 1 & " cartões mostrados à esquerda?", vbYesNo, "Imprimir Cartões")

If Resposta = vbYes Then

For Z = 0 To List2.ListCount Step 3

Printer.Print List2.List(Z), List2.List(Z + 1), List2.List(Z + 2)

Next Z

Printer.EndDoc

Else

End If

End Sub

Comentários do código acima:

A 1ª instrução dessa procedure é a criação de uma Caixa de Mensagem (MsgBox) que pergunta ao usuário se ele quer realmente imprimir os cartões. Isso é feito, armazenando-se a resposta na variável Resposta.

Observe que existe em MsgBox a palavra reservada vbYesNo, que nada mais é do que os botões Sim e Não.

A 2ª instrução compara o resultado da Caixa de Mensagem: se ela for Sim, então o programa segue todos os passos antes da instrução Else. Se a resposta for Não, então o programa ignora todos os comandos antes da instrução Else e segue os passos dessa instrução até o fim de If (End If).

Dentro da condição Sim de If o programa cria um looping para pegar todos os itens armazenados em List2. Ele começa em zero (que é o 1º item armazenado em uma Caixa de Listagem) e vai até a quantidade de itens (ListCount), aumentando o passo (Step) em 3 unidades cada vez. Isso é útil, pois iremos querer imprimir em três colunas os nossos cartões.

Depois disso o programa "pega" o comando mágico para imprimir, que é Printer.Print e imprime a situação atual de List2, a próxima e a atual +2.

Next Z faz com que todos os cartões sejam impressos.

Para dar a mensagem para a impressora de que não será feita mais nenhuma impressão, é utilizada a instrução Printer.EndDoc. (Experimente eliminar essa instrução, colocando um acento agudo antes dela, rode o seu programa e tente imprimir uns 10 cartões. Você terá que clicar no botão Finalizar Programa para que saia alguma coisa na impressora).

 

Digite, finalmente, o código para o botão de comando Finalizar Programa:

Private Sub cmdFim_Click()

End

End Sub

http://sites.uol.com.br/visualinfo/exe_vb5_2.htm

 
1