[ 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 1º
item é List1.List(0), o 2º é 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