456dicas vb
TRANSCRIPT
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
V I S U A LBA S I C
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de
1 - Reconhecendo o pressionamento de teclas Enviado por: Visual Basic Brasil
Declare as constantes que você desejar utilizar em um módulo. Exemplo:
1
Global Const KEY_F1 = &H70 Global Const KEY_F2 = &H71 Global Const KEY_F3 = &H72 Global Const KEY_F4 = &H73 Global Const KEY_F5 = &H74 Global Const KEY_F6 = &H75 Global Const KEY_F7 = &H76 Global Const KEY_F8 = &H77 Global Const KEY_F9 = &H78 Global Const KEY_F10 = &H79 Global Const KEY_F11 = &H7A Global Const KEY_F12 = &H7B Global Const KEY_F13 = &H7C Global Const KEY_F14 = &H7D Global Const KEY_F15 = &H7E Global Const KEY_F16 = &H7F
A listagem de todas as constantes estão no arquivo constant.txt (Uma cópia desse arquivo, que acompanha o VB, está na página de arquivos do VBB).
Em seguida digite o código no evento KeyDown de qualquer objeto. Exemplo:Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = KEY_F12 Then Beep
'Quando f12 for pressionado, toque um Beep.End Sub
2 - Alinhando controles no formulário Enviado por: Visual Basic Brasil Para alinhar controles no formulário, basta incluir o seguinte código no procedimento que você desejar:
Para alinhar horizontalmente:
controle.Left = (Form.Width / 2) - (controle.Width / 2)
Para alinhar verticalmente:
controle.Top = (Form.Height / 2) - (controle.Height / 2)
controle é o nome do controle que você deseja alinhar, e form é o nome do formulário onde está o controle.
Se o formulário que contém o controle, for redimensionável, então é bom que você coloque ocódigo no procedimento Form_Resize. Assim, sempre que você modificar o tamanho do formulário, o controleserá automaticamente centralizado.
3 - Carregando o projeto que você quiser Enviado por: Visual Basic Brasil
O Visual Basic sempre carrega os mesmos arquivos e custom controls automaticamente quando você inicia um novoprojeto. Na verdade, ele carrega um projeto já existente no seu diretório. Mas você pode criar seu projeto para sercarrejado quando iniciar um novo. Basta salvar o projeto como auto32ld.vbp para o VB 32 bits, auto16ld.vbppara o VB 4.0 16 Bits ou autoload.mak para o VB 3.0. Estes arquivos estão no diretório principal (raiz) do VB. É sempre bom que você façauma cópia de segurança desses arquivos antes, para qualquer eventualidade...
4 - Formulário MDI Child Enviado por: André Luís Milaré de Medeiros
Para centralizar um formulário MDI Child ou colocá-lo em qualquer lugar da tela utiliza-se o seguinte comando no evento Load do MDI child:
2
rem Centralizar me.left = (form1.left - me.left) /2 me.top = (form1.width - me.width) /2
rem Aparecer em qualquer lugar:
me.left = (valor) me.top = (valor)
rem *** fim do form load ***
5 - Converter texto para Maiúsculo/Minúsculo Enviado por: Lionardo Fonseca Paiva
Aí vai uma função bastante útil...Public Function MMCase(Texto As String) As String
'Esta função converte o texto para Maiusculo/Minusculo, deixando as 'primeiras letras das palavras em maiusculo. 'respeitando as exceções da lingua portuguesa como: de, da, do, das, dos, a, e
'***** Autor: Lionardo Fonseca Paiva '***** [email protected]
Dim Palavra, PosiçãoInicial, PosiçãoFinal Dim resultado As String PosiçãoInicial = 1 Texto = LCase(Texto) & " "
Do Until InStr(PosiçãoInicial, Texto, " ") = 0 PosiçãoFinal = InStr(PosiçãoInicial, Texto, " ") Palavra = Mid(Texto, PosiçãoInicial, PosiçãoFinal - PosiçãoInicial) PosiçãoInicial = PosiçãoFinal + 1 If Palavra <> "de" And Palavra <> "da" And Palavra <> "do" And _ Palavra <> "das" And Palavra <> "dos" And Palavra <> "a" And _ Palavra <> "e" Then Palavra = UCase(Left(Palavra, 1)) & LCase(Mid(Palavra, 2)) End If resultado = resultado & " " & Palavra Loop
MMCase = Trim(resultado)
End Function
6 - Ocultar/mostrar barra de tarefas Enviado por: Visual Basic Brasil
Coloque na seção de Declarações do formulário:Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _(ByVal lpexecuta As String, ByVal lpWindowName As String) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As _Long, ByVal nCmdShow As Long) As Long Const SW_HIDE = 0: Const SW_SHOWNORMAL = 1
Para Ocultar a barra de tarefas:Dim aviso As Long Dim janela As Long Dim executa As String
executa = Space(256) executa = "Shell_TrayWnd" janela = FindWindow(executa, vbNullString)
aviso = ShowWindow(janela, SW_HIDE) 'Esconde a barra
Para Mostrar a barra de tarefas:Dim aviso As Long
3
Dim janela As Long Dim executa As String
executa = Space(256) executa = "Shell_TrayWnd" janela = FindWindow(executa, vbNullString)
aviso = ShowWindow(janela, SW_SHOWNORMAL) 'Mostra a barra
7 - Abrir URL no navegador padrão Enviado por: Visual Basic Brasil
Para abrir um link através do VB, no navegador padrão, coloque o seguinte código na seçao de declarações:#If Win32 Then
Private Declare Function ShellExecute Lib _ "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long
#Else
Private Declare Function ShellExecute Lib _ "shell.dll" _ (ByVal hwnd As Integer, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Integer) As Integer
#End If
Private Const SW_SHOWNORMAL = 1
No procedimento CLICK de algum controle, digite:Private Sub label1_Click()
Dim iret As Long
iret = ShellExecute(Me.hwnd, _ vbNullString, _ "http://www.vbbrasil.com", _ vbNullString, _ "c:\", _ SW_SHOWNORMAL)
End Sub
8 - Confirmar término do programa Enviado por: Visual Basic Brasil
Para perguntar ao usuário se ele realmente deseja sair do programa:Private Sub Form_Unload(Cancel As Integer)
sair = MsgBox("Tem certeza que deseja sair do programa?", _ vbYesNo + vbExclamation, "Atenção")
If sair = vbYes Then End Else Cancel = True End If
End Sub
4
9 - Usando a tecla Enter no lugar da tecla Tab Enviado por: Almando Menezes Guimarães
Esta Dica é para quem quer que a tecla enter funcione como um tab para mudar de campo.1º - Mude a propriedade KeyPreview do formulário para true.
2º - Coloque o seguinte código no evento KeyDown do formulário.If KeyCode = vbKeyReturn then Sendkeys "{Tab}"
Pronto, agora sempre que for pressionado um enter no formulário sera disparado um tab.
10 - Letras Maiúsculas e Minúsculas Enviado por: André Luís Milaré de Medeiros
No Evento Keypress utilize, Para Maisúculas:KeyAscII= Asc(Ucase(Chr(KeyAscII)))
Para Minúsculas:KeyAscII= Asc(Lcase(Chr(KeyAscII)))
Pronto! Não é necessário a utilização de API's
11 - Busca de Strings em um TextBox Enviado por: Fausto Fiorese
No General do Form:
Public Last_Pos As IntegerPublic First_Pos As IntegerPublic Find_String As StringPrivate Sub Text1_GotFocus() 'Valor Default p/ as variaveis Last_Pos = 1First_Pos = 1End SubPrivate Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)CtrlDown = (Shift And vbCtrlMask) > 0If KeyCode = vbKeyF And CtrlDown Then 'Identifica a Tecla Ctrl+FMensagem = "Entre com o Texto a ser procurado!"Titulo = "Procura"Default = ""Find_String = InputBox(Mensagem, Titulo, Default)If Find_String = "" Then Exit SubKeyCode = 114 'Forca a passagem pela BuscaEnd If 'As rotinas abaixo verificam se a tecla apertada é F3'A primeira coisa a ser feita é verificar se realmente' existe em algum ponto do TextBox a string informada' no InputBox.'Existindo a string, entao é verificado se a busca será feita' "para baixo" (F3) ou "para cima" (Shift+F3) If KeyCode = 114 ThenIf InStr(Text1.Text, Find_String) = 0 ThenMsgBox "Texto não encontrado!", vbInformationExit SubEnd IfIf Shift = 1 ThenIf First_Pos = 0 Or InStr(Mid(Text1.Text, 1, First_Pos), Find_String) = 0 ThenFirst_Pos = Len(Text1.Text)End IfFor i% = (First_Pos - 1) To 1 Step -1If Mid(Text1.Text, i%, Len(Find_String)) = Find_String ThenPos% = i%Exit For
5
End IfDoEventsNextFor i% = (First_Pos - 1) To 1 Step -1If Mid(Text1.Text, i%, Len(Find_String)) = Find_String ThenPos_Fim% = Len(Find_String) + i%Exit ForEnd IfDoEventsNextLast_Pos = Pos_Fim%First_Pos = Pos%Text1.SelStart = Pos% - 1Text1.SelLength = Pos_Fim% - Pos%ElsePos% = InStr(Last_Pos, Text1.Text, Find_String)First_Pos = Pos%If Pos% = 0 ThenLast_Pos = 1Pos% = InStr(Last_Pos, Text1.Text, Find_String)End IfPos_Fim% = Len(Find_String) + Pos%Last_Pos = Pos_Fim%Text1.SelStart = Pos% - 1Text1.SelLength = Pos_Fim% - Pos%End IfEnd IfEnd Sub
12 - DoEvents Enviado por: Fabio
Quando for trabalhar com processamentos longos, procure sempre utilizar uma ProgressBar ou coisa assim p/ interar o usuário. Você pode também, quando estiver utilizando loops como Do...Loop, For...Next, criar um Botão Cancelar com a funçao DoEvents, que retorna a atenção p/ o Sistema.É simples, declare en General uma variável do tipo Booleana. Na Rotina onde irá utilizar o Loop, comece atribuindo um valor False p/ a variável : Para = false.
Logo quando começar o Loop, faça o seguinte:
Do
DoEvents
if Para = true then exit sub
No Botão Cancelar, só atribua um valor true p/ a variável:Para = True
É muito simples, o loop sempre voltará a atenção p/ o sistema, quando o usuário clicar em cancelar ele muda o valor do Booleano. Isso é muito útil, e vc pode utilizar DoEvents p/ várias outras coisas no intuito de não travar seu Micro.
Copyright (c) 1996-2001 Visual Basic Brasil
13 - Deixar a Caixa de Texto (TextBox) com o texto selecionado ao entrar Enviado por: Mateus Zambonatto Pezzin
Basta colocar no evento GOTFOCUS da caixa de texto, por exemplo, TEXT1, a seguinte rotina: text1.selstart = 0
text1.sellenght = len(text1.text)
Simples e eficaz, funciona sempre!
14 - Ajustando os controles dentro do Formulário Enviado por: Fabio
Como já dito em uma dica enviada por não sei quem, podemos centralizar os controles no Form usando os
6
procedimentos já citados. Você pode também, fazer com que o tamanho de seus controle fique proporcional ao tamanho do Formulário. É fácil, veja o tamanho e altura(Width e Height) do Form e do controle que vai utilizar. Veja a diferença entre eles, vamos supor que seja 600.No evento Form_Resize(que ocorre qdo o tamanho da form é alterado), atualize a proporção:
frame1.width = form1.width - 600
frame1.height = form1.height - 600
Qdo vc maximizar a tela o controle se ajustará, e qdo alterar o tamanho também. Nesse evento vc também pode escrever os procedimentos p/ centralizar os controles como mandou um colega aí, e fazer várias outras coisas.
15 - Confirmando saida do programa II Enviado por: Rodrigo Meirelles de Mello
Modificando a dica existente, assim não se precisa declarar mais uma variável:If MsgBox("Tem certeza que deseja sair do programa?", _
vbYesNo + vbExclamation, "Atenção") = vbYes Then
End
Else
Cancel = True
End If
16 - Salvar Bmp da caixa de imagem Enviado por: Marcelo Nagy
Você já conhece o processo de leitura de um bmp para uma caixa de imagem ? É assim:Image1.picture=loadpicture("c:\Windows\carros.bmp")
Mas você também pode gravar uma imagem que está em uma caixa de imagem e converte-lo para bmp, gif, etc. É assim
SavePicture image1, "C:\windows\teste.bmp"
fácil ?????!!!!!! Espero que sirva pra alguem falou galera !
17 - Colocar sempre visivel o form como um Tollbox Enviado por: Armando Estruc
Tem que fazer um mdi ou uma a tela principal que seria um mdi, e colocar um form nao child e na hora de chamar este form nao child colocar o seguinte comando
Nomedoform.Show , NomedoMid
18 - Colocar Titulos do programa VB para o Crystal Enviado por: Armando Estruc
Para mandar coisa do VB para o crystal tem que ir ao crystal e colocar uma formula onde deseja cria um titulo ou mandar outra coisa, na formula colocar o nome e depois a formula que seria assim:
"*"Depois AceptNo Vb colocar o comando:
NomedoRPT.Formulas(0)=" NomedaFormula=" & NomedaVariavelTitulo
Para cada coisa que deseja mandar para o crystal deve ter um array diferente.
19 - Fechar um Formulário Enviado por: Cleiton Oliveira da Silva
7
Para se fechar um formulário não basta usar o comando unload e o nome do mesmo e sim :Unload Set = Nothing
Pois assim estarão sendo fechadas também as variáveis pertencentes ao formulário.
20 - Aplicação já iniciada Enviado por: Hantan
Para você verificar se sua aplicação já está sendoexecutada coloque o sequinte código no inicio do form.
If App.PrevInstance Then End
Espero que seja útil.
21 - Arrendondar casas decimais Enviado por: Hantan
Para arredondar casa decimais crie a seguinte função:Function Round(Nmr As Double, Casas As Integer) As Double
Round = Int((Nmr * 10 ^ Casas) + 0.5) / 10 ^ Casas
End Function
Para chamar a função utiliza-se:Dim Resultado as integer
Resultado = Round([VALOR], [NUMERO DE CASAS])
Text1.Text = Resultado
Espero ter ajudado.
22 - Formulário OnTop Enviado por: Hantan
Para manter um formulário OnTop ou seja, sempre visível faça o seguinte:
Declare o seguinte em um módulo .BAS:Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags_ As Long) As Long
Global Const conHwndTopmost = -1
Global Const conHwndNoTopmost = -2
Public Const SWP_NOMOVE = 2
Public Const SWP_NOSIZE = 1
Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Para colocar um Form OnTop coloque o seguinte código:SetWindowPos [NOMEDOFORM].hwnd, -2, 0, 0, 0, 0, FLAGS
Espero ter ajudado.
8
23 - Reconhecendo o pressionamento de teclas - Mais simples sem módulo Enviado por: Tercio Filho
Para reconhecer o pressionamento de teclas mais fácil coloque o seguinte código no evento keyDown ou keyUp do form ou do objeto:
If (KeyCode = [TECLA]) then Beep
'TECLA significa o valor para a tecla pressionada.
'Os valores estão no HELP do VB em "Keycode Constants"
'Ex.: If (KeyCode = VbKeyF2) then Beep
'Toca um Beep quando a teclar F2 for apertada.
Abraços.
24 - VB que fala: Bom dia, boa tarde e boa noite nos respectivos horários. Enviado por: Márcio Britto®
Neste exemplo, eu usei imagens, mas pode se usar apenas textos...Dim Agora, BomDia, BoaTarde, BoaNoite As Variant, Nome As String
Agora = Time$
BomDia = "00:00:00"
BoaTarde = "12:00:00"
BoaNoite = "19:00:00"
If Agora > BoaNoite Then
Pic_Noite.Visible = True
Pic_Tarde.Visible = False
Pic_Dia.Visible = False
ElseIf Agora > BoaTarde Then
Pic_Noite.Visible = False
Pic_Tarde.Visible = True
Pic_Dia.Visible = False
ElseIf Agora > BomDia Then
Pic_Noite.Visible = False
Pic_Tarde.Visible = False
Pic_Dia.Visible = True
End If
25 - Metodo de selecao de registros usando SQL Enviado por: Rodrigo Meirelles de Mello
Temos como um exemplo um Banco de dados Agenda com os seguintes camposNOME, TELEFONE, ENDERECO, SEXO
Nao citarei como se deve declarar variaveis visto que ja fiz isso em uma dicaanterior...
Tendo tudo declarado...
9
Definido anteriormente que o campo sexo recebe "M" ou "H"Desejo selecionar dentre todo o banco de dados os registros das pessoas dosexo feminino "M" e que moram no humaita...
--> Set DYNagenda = DBagenda.createdynaset ("select * from agenda where sexo = ' " & TXTprocurasexo & " ' and bairro = ' " & TXTprocuraBairro & " ' ")
Explicando a sintaxe:
("select * from (1)agenda where (2)sexo = ' " & (3)TXTprocurasexo & " ' and (4)bairro = ' " & (5)TXTprocuraBairro & " ' ")
(1) Tabela agenda do banco de dados agenda.mdb
(2) Campo Sexo
(3) TXTProcuraSexo - é onde eu informo o sexo...
(4) Campo bairro
(5) TXTprocurabairro - é onde eu informo o Humaita
Espero ter ajudado, qquer duvida mail-me...
26 - Metodos de procura, Usando o Find... Enviado por: Rodrigo Meirelles de Mello - DJOP
Nesta dica, informarei como se encherga o valor de um campo TXT por exemplo na sintaxe dentro do Find...
Exemplo:
E em um Módulo declara-se as variaveis...Global DBagenda as Database
Global DYNagenda as Dynaset
------- No form.Load
Set DBagenda = OpenDatabase("c:\agenda\arquivo.mdb") ' Define o arquivo de banco de dados
Set DYNagenda = DBagenda.OpenTable("agenda") ' Abri a tabela agenda do banco de dados
Set DYNagenda = DBagenda.CreateDynaset("agenda")
-------
Para se procurar por exemplo uma pessoa que more em botafogo
Posso usar a seguinte sintaxe...DYNagenda.findfirst "bairro = ' " + TXTbairro + " ' "
Desta forma estou procurando no campo bairro o valor do campoTXTbairro se eu nao fizesse esta sintade ( ' " + ??? + " ' ) e coloca-sesomente "bairro = TXTbairro" o programa iria procurar a frase TXTbairro.
OBS.: O findFist procura o primeiro nome da lista... em seguida coloque umarotinhazinha de verificacao... tipo:
if DYNagenda.NoMatch then msgbox "Nao encontrei nenhuma pessoa que more em" & TXTbairro, , "Agenda eletrônica"
Pode-se tb usar o FindFirst, FindNext, FindPrevious e FindLast-----
Esta Sintaxe pode ser usada em varias outras formulas, em SQL por exemploOnde em uma proxima dica colocarei uma sintaxe de selecao em SQL, queÉ muito mais rapido do que o Find, Outro método de pesquisa absurdamentemais rapido que o Find, é o Seek mas o Find se encaixa perfeitamente paraBanco de dados pequenos...
Espero ter ajudado... Qualquer duvida escreva-me.
27 - VB que fala: Bom dia, boa tarde e boa noite nos respectivos horários. 2 Enviado por: Rodrigo Meirelles de Mello - DJOP
10
Analisando uma dica previamente mandada, percebique as pessoas gostam de declarar variaveissem necessidade...
If time$ > "19:00:00" Then
Pic_Noite.Visible = True
Pic_Tarde.Visible = False
Pic_Dia.Visible = False
ElseIf time$ > 12:00:00 Then
Pic_Noite.Visible = False
Pic_Tarde.Visible = True
Pic_Dia.Visible = False
ElseIf time$ > 00:00:00 Then
Pic_Noite.Visible = False
Pic_Tarde.Visible = False
Pic_Dia.Visible = True
End If
Deste modo nao se declara variaveis...
28 - Colocar um "Continua..." em relatórios do Crystal Reports Enviado por: Uriel Papa
Para quem deseja colocar a expressão "Continua..." no final de cada página do relatório, com excessão da última, aqui vai a dica:
Escolha um campo da linha de detalhes que nunca receba valores nulos (Campo_A).
Insira a seguinte fórmula no bottom da página:If NextIsNull({Campo_A}) then "" Else "Continua..."
[]'s,
Uriel
29 - Usando o objeto printer para imprimir formulários. Enviado por: Cecil Weiss
Coloca o vb no modo de impressâo de caracteresPrinter.ScaleMode = 4
Printer.CurrentX = 0 'coluna
Printer.CurrentY = 0 'linha
Printer.Print "Nome="
Printer.CurrentX = 7 'coluna
Printer.CurrentY = 0 'linha
Printer.Print "Nome="Experimente estes códigos, usando "scalemode", voce pode imprimir usando medidas por caracteres, pixels, twips, etc... veja abaixo a tabela.
vbUser = 0: Indica que uma ou mais das propriedades ScaleHeight, ScaleWidth, ScaleLeft e ScaleTop estão configuradas
11
como valores personalizados.
VbTwips = 1: '(Padrão) Twip (1440 twips por polegada lógica; 567 twips por centímetro lógico).
VbPoints = 2: 'Ponto (72 pontos por polegada lógica).
VbPixels = 3: 'Pixel (menor unidade de resolução de monitor ou impressora).
vbCharacters = 4: 'Caractere (horizontal = 120 twips por unidade; vertical = 240 twips por unidade).
VbInches = 5: 'Polegada.
VbMillimeters = 6: 'Milímetro.
VbCentimeters = 7: 'Centímetro.
30 - Mostrar somente seleção em um banco de dados. Enviado por: Cecil Weiss
Use os seguintes comandos para selecionar uma parte de uma string, com isso voce filtra o banco de dados mostrando somente o desejado.
Data1.RecordSource = "Select * from [Clientes]here [Nome] _like '*" & Text1.Text & "*'Order by [Nome]"
Data1.RefreshUse os seguintes comandos para selecionar um mês especifico em um campo data, com isso voce filtra o banco de dados mostrando somente o desejado.
Data1.RecordSource = "Select * from [Clientes] where month([Nasc]) = _'" & Val(Text1.Text) & "'Order by [Nome]"
Data1.Refresh
Obs: A função "Month" retorna um valor de 1 a 12, por isso faça com que o usuário só possa digitar na caixa texto um numero de 1 a 12.
31 - Pesquisa por nome ou sobrenome. Enviado por: Cecil Weiss
Se voce quiser pesquisar por nome ou sobrenome, ou em qualquer parte da string use o seguinte comando:Data1.Recordset.FindFirst "NOME Like '*" & Text1.Text & "*'"
Espero ter ajudado.
32 - Como controlar o MCIwndX e o MCC (para reproduzir arquivos multimídia) Enviado por: Leonardo Motta
Você pode controlar um objeto MCIwndX ou MCC Control (Microsoft Multimedia Control, que já vem com o VB) sem precisar tocar na lista de propriedades. Vamos chamar o objeto de mciMedia.
'Especifica as propriedades principais
mciMedia.filename =
mciMedia.visible = True/False
mciMedia.enabled = True/False
Obs.: a propriedade 'visible' refere-se somente ao controle. Animações/filmes/etc serão exibidos normalmente se o controle estiver oculto.
Os comandos dos objetos MCI: ' Abre o arquivo
mciMedia.Command = "Open"
12
' Reproduz o arquivo
mciMedia.Command = "Play"
' Pausa
mciMedia.Command = "Pause"
' Para
mciMedia.Command = "Stop"
' Fecha o arquivo (sempre use este comando quando for usar animações ou filmes...)
mciMedia.Command = "Close"
Obs.: existem outros comandos para retornar, voltar ao começo, ir ao final, etc. (Ex.: Prev, Back)
Alguns eventos úteis: Done e NotifyCode são eventos que acontecem quando o objeto termina de reproduzir o arquivo. A variável "NotifyCode" especifica se o arquivo foi reproduzido com sucesso, se foi interrompido pelo usuário ou por algum erro do objeto. As constantes referentes ao "NotifyCode" são mciNotify(CRL+ESPACO para listar).
33 - MsgBox não modal 2 Enviado por: Hantan
Para fazer a msgbox não modal com apenas o botão de OK declare o seguinte no módulo .BAS:Public Const MB_OK = &H0&
e substitua em MB_OKCANCEL..
Qualquer coisa veja em Constants no Text API Viewer
34 - MsgBox não modal Enviado por: Hantan
Para fazer um message box que não seja modal faça o seguinte:
Em um módulo .BAS coloque o seguinte:Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, _ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As LongConst MB_OKCANCEL = &H1
Para chamar a função faça:Dim ret%
ret = MessageBox(0, "Sou uma MsgBox não modal.", "Modeless MessageBox ", MB_OKCANCEL)
Até mais.
35 - Resolução da tela Enviado por: Hantan
Este exemplo mostra como saber qual é a resolução da tela sem ter que fazer com API.Dim xTwips%, yTwips%, xPixels#, YPixels#
xTwips = Screen.TwipsPerPixelX
yTwips = Screen.TwipsPerPixelY
YPixels = Screen.Height / yTwips
xPixels = Screen.Width / xTwips
Print "A Resolução é : " & Str$(xPixels) & " por " & Str$(YPixels) & " pixels"
13
A saida vai ser alguma coisa assim:
A Resolução é : 800 por 600 pixels
Espero ter sido útil.
Algum problema com programação em VB me contacte.
36 - Transformar qualquer valor na moeda corrente Enviado por: Robson Batista
Dim dado as string
dado = text1.text
text1.text = format(dado,"CURRENCY")
37 - Fundo degradê Enviado por: Hantan
Para deixar um fundo degrade faça o seguinte:
Crie o seguinte em um módulo .BAS:Sub Fundo(Frm As Object, Vermval&, Verdval&, Azulval&, TopToBottom As Boolean)On Error Resume Next
Dim Step%, Reps%, FillTop%, FillLeft%, FillRight%, FillBottom%, HColor$
Step = (Frm.Height / 63)
If TopToBottom = True Then FillTop = 0 Else FillTop = Frm.Height - Step
FillLeft = 0
FillRight = Frm.Width
FillBottom = FillTop + Step
For Reps = 1 To 63
Frm.Line (FillLeft, FillTop)-(FillRight, FillBottom), RGB(Vermval, Verdval, Azulval), BF
Vermval = Vermval - 4
Verdval = Verdval - 4
Azulval = Azulval - 4
If Vermval <= 0 Then Vermval = 0
If Verdval <= 0 Then Verdval = 0
If Azulval <= 0 Then Azulval = 0
If TopToBottom = True Then FillTop = FillBottom Else FillTop = FillTop - Step
FillBottom = FillTop + Step
NextEnd Sub
A variável chamada TopToBottom é se vai do preto para a cor escolhida ou da cor escolhida para o preto.
39 - Ler e escrever arquivos INI Enviado por: Hantan
Para ler arquivos INI faça o seguinte:
Em um módulo .BAS coloque:
14
Declare Function GetPrivateProfileString Lib "Kernel32" Alias _
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, ByVal _
lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName _
As String) As LongDeclare Function GetProfileString Lib "Kernel32" Alias _
"GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName _
As String, ByVal lpDefault As String, ByVal lpReturnedString As _
String, ByVal nSize As Integer) As IntegerDeclare Function WritePrivateProfileString Lib "Kernel32" Alias _
"WritePrivateProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName _
As String, ByVal lpDefault As String, ByVal lpFileName As String) As Integer
Crie a seguinte função no mesmo módulo .BAS:Function GetIni(section, key, arq)
'section = É o que está entre []
'key = É o nome que se encontra antes do sinal de igual (=)
'arq = É o nome do arquivo INI
Dim Val As String
Dim valor As Integer
Val = String$(255, 0)
valor = GetPrivateProfileString(section, key, "", Val, Len(Val), arq)
If worked = 0 Then
GetIni = ""
Else
GetIni = Left(Val, valor)
End If
End Function
No mesmo módulo .BAS crie a seguinte função para escrever no arquivo INI:Sub WriteIni(section, key, dado, arq)
'section = É o que está entre []
'key = É o nome que se encontra antes do sinal de igual (=)
'dado = É o valor que vai depois do sinal de igual (=)
'arq = É o nome do arquivo INI
Dim Val As String
Dim valor As Integer
Val = String$(255, 0)
valor = WritePrivateProfileString(section, key, dado, arq)
End Sub
Para chamar as funções faça o seguinte:
15
Text1.Text = GetIni("EntreColchetes", "AntesDoIgual", "ARQUIVO.INI")
WrtArqIni "EntreColchetes", "AntesDoIgual", "ValorPosIgual", "ARQUIVO.INI"
40 - Abrir uma conexão da Rede Dial-Up Enviado por: Hantan
Para abrir uma conexão da Rede Dial-Up crie a seguinte:Private Sub AbrirDialUp(Conexão As String)
Dim X
X = Shell("C:\Windows\rundll32.exe rnaui.dll,RnaDial " & Conexão, 1)
DoEvents
End Sub
Na variável Conexão é o nome da conexão que se quer abrir.
41 - Confirmando uma exclusao de registro em banco de dados Enviado por: Sinister Overrider
Para voce deletar um registro em um banco de dados basta apenas digitar o codigo abaixo em qualquer controle que execute a instrucao quando voce manda por exemplo um Botao:
Dim resp As Variant
resp = MsgBox("Voce tem certeza que deseja excluir este registro?", vbYesNo, "Exclusao")
If resp = vbYes Then
NomedoControleData.Recordset.Delete
NomedoControleData.Recordset.MoveNext
End If
42 - Criar multiplos níveis de diretório Enviado por: Hantan
As vezes vc tem um programa que precisa criar multiplos níveis de diretórios(C:\Dir1\Dir2\Dir3....) esta rotina faz isso:Sub LongDir(sDrive as String, sDir as String)
'sDrive = Nome do Drive(C:, D:, E:....)
'sDir = Nível de diretório(Dir1\....)
Dim sBuild As String
While Instr(2, sDir, "\") > 1
sBuild = sBuild & Left(sDir, Instr(2, sDir, "\") - 1)
sDir = Mid$(sDir, InStr (2, sDir, "\")
If Dir$(sDrive & Sbuild, 16) = "" Then MkDir sDrive & sBuild
Wend
End Sub
Call LongDir ("C:", "Dir1\Dir2\Nome Longo\Etc")
16
(Por Jeffrey Renton, aperfeiçoada por mim.)
43 - O arquivo existe ou não Enviado por: Hantan
Se vc quiser saber se existe ou não um arquivo insira o código abaixo em qualquer lugar do seu prg.:If Dir$("X:\XXXX\XXXXX.XXX") <> "" Then
'O arquivo existe
Else
'O arquivo não existe
End If
44 - Modificar caractere de uma string com o comando Mid Enviado por: Hantan
Para modificar algum caracter de uma string com o comando Mid faça o seguinte:Dim MinhaString as String
MinhaString = "Hantan"
If Mid(MinhaString, 2, 1) = "a" Then
Mid(MinhaString, 2, 1) = "A" 'Substituindo o caracter
End If
Abraços a todos, Hantan
45 - "Peneira" de dados Enviado por: Hantan
Se você quiser retirar todas as letras ou todos os número de uma string faça o seguinte:
Crie a seguinte função para retirar os números:Function LimpaNumero (campo As String) As String
Dim VA_Posicao As Integer
Dim VA_Caracter As String * 1
Dim VA_Resultado As String
VA_Resultado = ""
VA_Posicao = 1
Do While VA_Posicao <= Len(campo)
VA_Caracter = Mid$(campo, VA_Posicao, 1)
If IsNumeric(VA_Caracter) Then
VA_Resultado = VA_Resultado & VA_Caracter
End If
VA_Posicao = VA_Posicao + 1
Loop
LimpaNumero = VA_Resultado
17
End Function
Para limpar as letras crie a seguinte função:Function LimpaAlfa (campo As String) As String
Dim VA_Posicao As Integer
Dim VA_Caracter As String * 1
Dim VA_Resultado As String
VA_Resultado = ""
VA_Posicao = 1
campo = UCase(campo)
Do While VA_Posicao <= Len(campo)
VA_Caracter = Mid$(campo, VA_Posicao, 1)
If Asc(VA_Caracter) > 64 And Asc(VA_Caracter) < 91 Then
VA_Resultado = VA_Resultado & VA_Caracter
End If
VA_Posicao = VA_Posicao + 1
Loop
LimpaAlfa = VA_Resultado
End Function
Para chamar as funções faça isso:SemNumero = LimpaNumero("0H1A2N3T4A5N6")
Sairá assim: HANTAN
SemLetra = LimpaAlfa("0H1A2N3T4A5N6")
Sairá assim: 0123456
Espero ter sido útil, abraços.
47 - Fechar todos os forms Enviado por: Hantan
Para fechar todos os forms abertos crie a seguinte função:Public Function FecharForms()
Dim f As Integer
f = Forms.Count
Do While f > 0
Unload Forms(f-1)
If f = Forms.Count Then Exit Do
f = f - 1
Loop
End Function
18
48 - Como abrir um site pelo navegador padrão (Mais fácil) Enviado por: Fabio
Dentro de Windows\Command, existe um programa chamado Start. Basta vc digitarShell "c:\windows\command\start http://www.vbbrasil.com/"
Sem nenhuma declaração de API.
OBS: O própio Shell sozinho não consegue abrir o site, não tenho certeza, mas este pode ser um recurso exclusivo do Internet Explorer 4.0, gostaria que alguém testasse isso em outro navegador e entrasse em contato comigo.
49 - Saber qual o diretório do Windows Enviado por: Hantan
Para saber qual é o diretório do Windows declare a seguinte função em um modulo .BAS:Private Declare Function GetWindowsDirectory Lib "Kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Para saber qual é o diretório do windows chame a função assim:Dim X$
X = GetWindowsDirectory(Space$(255), 255)
Para saber o diretório System do Windows faça o seguinte:Dim X$
X = GetWindowsDirectory(Space$(255), 255) & "\System"
50 - Rotina de extenso com várias funções(Para iniciantes) Enviado por: Hantan
*** ATENÇÃO esta rotina é recomendada para programas simples(Impresão de cheques, etc.), por conter grande número de comandos ***
Decidi criar uma rotina de extenso mas uma bem simples apenas com comandos básicos(If,Mid,For e outros) para quem é iniciante em VB conseguir entender.Para ficar mais fácil entender ao invés de transformar o número em extenso em uma função só criei várias funções.Lembrando que esta função é BETA mais funciona perfeitamente com valores até 9999.
Abaixo vai as funções todas detalhadamente comentadas:
(É só copiar e colar dentro de um módulo .BAS ou no General do Form)'Determinado para que o VB avise qualquer variável não declaradaOption Explicit'Declarando variáveisDim Unidades(19) As StringDim Dezena(9) As StringDim Centena(9) As StringDim Milhares(9) As StringDim Valor(99) As IntegerDim Grupos(99) As StringDim i As IntegerDim Temp As Boolean=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*Public Function Centenas(Nmr3 As Integer)'Determinando os valores das centenas em extenso.Centena(1) = "Cento": Centena(2) = "Duzentos": Centena(3) = "Trezentos": Centena(4) _
= "Quatrocentos": Centena(5) = "Quinhentos": Centena(6) = "Seicentos": Centena(7) _= "Setecentos": Centena(8) = "Oitocentos": Centena(9) = "Novecentos"'Verificando que número é.For i = 1 To 9If Nmr3 = i Then Grupos(1) = Centena(i)Next i
19
'Determinando valor em extenso da função.Centenas = Grupos(1)End Function=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*Public Function Dezenas(Nmr2 As Integer)'Determinando os valores das centenas em extenso.Dezena(2) = "Vinte": Dezena(3) = "Trinta": Dezena(4) = "Quarenta": Dezena(5) = _"Cinquenta": Dezena(6) = "Sessenta": Dezena(7) = "Setenta": Dezena(8) = "Oitenta": Dezena(9) = "Noventa"'Verificando que número é.For i = 2 To 9If Nmr2 = i Then Grupos(1) = Dezena(i)Next i'Determinando valor em extenso da função.Dezenas = Grupos(1)End Function=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*Public Function Extenso(Nmr As Integer)On Error Resume Next'Verificando se o número está entre o suportadoIf IsNull(Nmr) Or Nmr > 9999 Then Extenso = "Valor não suportado!!!": Exit Function'Verificando se o número está entre 1000 e 19999If Nmr > 999 And Nmr < 20000 Then Extenso = Mil(Nmr): Exit Function'Verificando se é centena inteira(100,200,300,etc.)For i = 1 To 9If Nmr = i & "00" Then Extenso = Centena(i): Exit FunctionNext i'Verificando se o número está entre 1 e 19If Nmr > 0 And Nmr < 20 Then 'Determinando valor em extenso da funçãoExtenso = Unitarios(Nmr): Exit FunctionElseIf Nmr > 19 And Nmr < 100 ThenIf Mid(Nmr, 2, 1) > 0 Then 'Determinando valor em extenso da funçãoExtenso = Dezenas(Mid(Nmr, 1, 1)) & " e " & Unitarios(Mid(Nmr, _2, 1)): Exit FunctionElseIf Mid(Nmr, 2, 1) = 0 Then 'Determinando valor em extenso da funçãoExtenso = Dezenas(Mid(Nmr, 1, 1)): Exit FunctionEnd IfEnd If'Verificando se o número está entre 100 e 999If Nmr > 99 And Nmr < 1000 ThenIf Mid(Nmr, 2, 1) = 0 Or Mid(Nmr, 2, 1) = 1 Then 'Determinando valor em extenso da funçãoExtenso = Centenas(Mid(Nmr, 1, 1)) & " e " & Unitarios(Mid(Nmr, _2, 2)): Exit Function 'Verificando se a segunda casa é maior que 1, ou seja >= 2ElseIf Mid(Nmr, 2, 1) > 1 Then 'Verificando se a terceira casa é igual a 0If Mid(Nmr, 3, 1) = 0 Then 'Determinando valor em extenso da funçãoExtenso = Centenas(Mid(Nmr, 1, 1)) & " e " & Dezena(Mid(Nmr, _2, 1)): Exit Function 'Verificando se a terceira casa é maior que 0, _'ou seja, >= 1ElseIf Mid(Nmr, 3, 1) > 0 Then 'Determinando valor em extenso da funçãoExtenso = Centenas(Mid(Nmr, 1, 1)) & " e " & Dezena(Mid(Nmr, 2, _1)) & " e " & Unitarios(Mid(Nmr, 3, 1)): Exit FunctionEnd IfEnd IfEnd IfEnd Function=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*Public Function Mil(Nmr4 As Integer)'Verifica se o número está entre 1000 e 10000If Nmr4 > 999 And Nmr4 < 10000 Then'Determinando os númerosValor(1) = Mid(Nmr4, 1, 1): Valor(2) = Mid(Nmr4, 2, 1): Valor(3) = Mid(Nmr4, _3, 1): Valor(4) = Mid(Nmr4, 4, 1) 'Verificando se é 2 mil, 3 mil, etc.For i = 1 To 9If Valor(1) = i Then Grupos(1) = Unidades(i)Next i
20
'Verifica se a segunda casa é 0If Valor(2) = 0 Then 'Verificando se a terceira casa é 0If Valor(3) = 0 Then 'Verificando se a quarta casa é 0If Valor(4) = 0 Then 'Determinando valor da função em extensoMil = Grupos(1) & " Mil" 'Verificando se a quarta casa é maior que 0, ou seja, >= 1ElseIf Valor(4) > 0 Then 'Determinando valor da função em extensoMil = Grupos(1) & " Mil e " & Unidades(Valor(4)): Exit FunctionEnd If 'Verificando se a terceira casa está entre 2 e 9ElseIf Valor(3) > 1 And Valor(3) > 10 Then 'Verificando se é valor inteiro ou quebrado, _'ou seja, 20 ou 21,22,23,24...For i = 2 To 9If Valor(3) & Valor(4) = i & 0 Then Temp = TrueNext i 'Verificando se a variável de valor inteiro é verdadeiraIf Temp Then Mil = Grupos(1) & " Mil, " & Dezenas(Valor(3)): Exit Function 'Verificando se a variável de valor inteiro não é verdadeiraIf Not Temp Then Mil = Grupos(1) & " Mil e " & Dezenas(Valor(3)) & " _e " & Unidades(Valor(4)): Exit Function 'Verificando se a terceira casa é 1ElseIf Valor(3) = 1 Then 'Determinando valor da função em extensoMil = Grupos(1) & " Mil e " & Unidades(Valor(3) & Valor(4)): Exit FunctionEnd If 'Verificando se a segunda casa é maior que 0, ou seja, >=1ElseIf Valor(2) > 0 Then 'Verificando se a terceira casa é igual a 0If Valor(3) = 0 Then 'Verificando se a quarta casa é 0If Valor(4) = 0 Then 'Determinando valor da função em extensoMil = Grupos(1) & " Mil"ElseIf Valor(4) > 0 Then 'Determinando valor da função em extensoMil = Grupos(1) & " Mil e " & Centenas(Valor(2)) & Unidades(Valor(4)): _Exit FunctionEnd If 'Verificando se a terceira casa está entre 2 e 9ElseIf Valor(3) < 1 And Valor(3) < 10 Then 'Verificando se é valor inteiro ou quebrado, ou seja, _'20 ou 21,22,23,24...For i = 2 To 9If Valor(3) & Valor(4) = i & 0 Then Temp = TrueNext i 'Verificando se a variável de valor inteiro é verdadeiraIf Temp Then Mil = Grupos(1) & " Mil, " & Centenas(Valor(2)) & Dezenas(Valor(3)): _Exit Function 'Verificando se a variável de valor inteiro não é verdadeiraIf Not Temp Then Mil = Grupos(1) & " Mil, " & Centenas(Valor(2)) & " e " & _Dezenas(Valor(3)) & " e " & Unidades(Valor(4)): Exit FunctionElseIf Valor(3) = 1 Then 'Determinando valor da função em extensoMil = Grupos(1) & " Mil, " & Centenas(Valor(2)) & " e " & Unidades(Valor(3) _& Valor(4)): Exit FunctionEnd IfEnd IfEnd IfEnd Function=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*Public Function Unitarios(Nmr1 As Integer)'Determinando os valores das centenas em extenso.Unidades(0) = "": Unidades(1) = "Um": Unidades(2) = "Dois": Unidades(3) = "Três": Unidades(4) _
= "Quatro": Unidades(5) = "Cinco": Unidades(6) = "Seis": Unidades(7) = "Sete": Unidades(8) = _
"Oito": Unidades(9) = "Nove": Unidades(10) = "Dez": Unidades(11) = "Onze": Unidades(12) = "Doze": _
Unidades(13) = "Treze": Unidades(14) = "Quatorze": Unidades(15) = "Quinze": Unidades(16) = _
21
"Dezesseis": Unidades(17) = "Dezessete": Unidades(18) = "Dezoito": Unidades(19) = "Dezenove"'Verificando que número é.For i = 1 To 19If Nmr1 = i Then Grupos(1) = Unidades(i)Next i'Determinando valor em extenso da função.Unitarios = Grupos(1)End Function
Abraços, Hantan
Ps. Se vc não entender esta função, mande um e-mail.
51 - Como ligar o True DbGrid a um Array Enviado por: Fabio C.
O true DbGrid é um controle perfeito, as vezes achamos que outros são melhores ou mais fáceis de se lidar, mas ele é completo. Você pode por exemplo, querer ligá-lo a um array, onde os dados ficarão temporariamente na memória. Siga os passos:1 - Insira um true DbGrid em seu Formulário
2 - Altere a propriedade DataMode dele p/ 4 - Storage.
3 - Em Project - References(VB5), adicione a biblioteca "APEX xarray object", própria dele.
4 - Na Form Load declare:Dim vetor As New XArray
vetor.ReDim r1, r2, c1, c2
Set TDBGrid1.Array = vetor
Onde vc cria um novo objeto XArray, depois o redimensiona considerando que r1 e r2 é o número de linha (Rows) e c1 e c2 é o número de colunas. Depois vc seta a propriedade Array do TrueDbGrid a este objeto.
52 - Como criar uma coluna TOTAL no TrueDbGrid Enviado por: Fabio
Você pode ter várias colunas do TrueDbGrid ligados a um Data ou a um RDC e querer que uma delas não esteja, e receba um valor qualquer, como a soma de todas as colunas. P/ isso, a propriedade DataMode do TrueDbgrid tem que estar como 0 - Unbound. Nesta coluna do Total, vc tem que definir um caption, e deixar a propriedade DataField vazia, assim ele reconhecerá esta coluna como Unbound. Então funciona assim, os dados do Data ou do RDC são puxadas p/ cada coluna. O valor desta coluna do Total, será definido pelo evento UnboundColumnFetch. P/ cada linha(ou registro), ele passará por este evento p/ pegar o valor desta coluna. Vc poderia:
Private Sub TDBGrid1_UnboundColumnFetch(Bookmark As Variant, ByVal _
Col As Integer, Value As Variant) Value = TDBGrid1.Columns(0).CellValue(Bookmark) + _
TDBGrid1.Columns(1).CellValue(Bookmark)
End Sub
Onde esta propriedade CellValue(bookmark) é o valor das colunas que estão no mesmo registro que esta coluna de Total, e Value é o valor desta Coluna.
53 - Como definir um TrueDbGrid com 2 cores Enviado por: Fabio
Defina na Form Load:TDBGrid1.EvenRowStyle.BackColor = QBColor(6)
TDBGrid1.OddRowStyle.BackColor = QBColor(14)
TDBGrid1.AlternatingRowStyle = True
54 - Acesso à área de Transferência Enviado por: Fabio
22
O Objeto Clipboard é uma referência à Área de transferência, vejam:Clipboard.gettext
Retorna o conteúdo da área de transferência:Clipboard.clearClipboard.settext "Teste"
Settext adiciona um novo texto p/ a área de transferência, no entanto p/ funcionar á necessário limpá-la primeiro usando o clear.
55 - Parametros -> Função Command Enviado por: Fabio
Quem quer estabelecer parametros ao programa é só usar a função Command. Por exemplo, vc poderia criar um programa chamado PRG, que qdo vc digitasse PRG executasse o programa, e PRG /? executasse a ajuda do programa. É simples, vc pode criar um módulo, e na Sub_Main deste coloque:
if command$ = "/?" then
frmAjuda.show
elseif command$ = "" then
meuprograma.show
end if
Não se esqueçam de colocar a sub main p/ ser a primeira coisa a ser executada. Menu Project - Properties.
56 - Operações via SQL Enviado por: Guilherme João França Soares
A princípio deve-se declarar a variáveis de database e dynaset:Global DBanco as database
Global DyRec as dynaset
Abrindo o Banco de Dados:Set DBanco = Opendatabase (app.path & "\banco.mdb")
'onde banco é o banco de dados
Selecionando registros:Set DyRec = DBanco.Createdynaset("select * from func")
'onde func é uma tabela do banco.mdb
'seleciona todos registros de func
Inserindo registros:Banco.Execute "insert into func values ('Nome_func',Identidade,'Endereco')
'onde Nome_func,Identidade,Endereco são colunas do banco
'veja que Nome_func e Endereco estão entre aspas simples pois têm atributos do tipo Text
'e Identidade é Number
Excluindo registros:
23
Banco.Execute "delete from func where Nome_func like 'G*')
'exclui todas as linhas onde Nome_func começa com 'G'
Atualizando registros:Banco.Execute "update func set
Nome_func = 'Guilherme',
Endereco = 'Rua 1, Qd. 1, Casa 1' where Identidade = "0000000000"
57 - Acesso ao Oracle via Oracle Objects Enviado por: Guilherme João França Soares
Declarar as variáveis:Global Banco As Object
Global Secao As Object
Criar o objeto:Set Secao = CreateObject("OracleInProcServer.XOraSession")
Abrir o Banco de Dados:Set Banco = Secao.OpenDatabase(Servidor, Usuario/Senha, 0&)
É necessário ter na máquina os arquivos do Oracle Obejects:-Oraclb45.dll
-Oraclb4d.dll
-Oraclbj.dll
-Oraclbjd.dll
-Oraclm.dll
-Oraclmd.dll
-Oraipsrv.reg (rodar o reg)Que se encontram nos discos de instalação do Oracle Objects.
58 - Usando a api GetUserName Enviado por: Guilherme João França Soares
Declare Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String, nSize As Long) As Long
m$ = Space$(255)
i% = GetUserNameA(m$, Len(m$))
TxtLogin = Left(m$, InStr(m$, Chr(0)) - 1)
59 - Animações Enviado por: Henrique Angelo
Crie um novo projeto, coloque no Form uma ImageList, coloque as figuras da animação nesta mesma Imagelist.
Coloque uma PictureBox e um Timer.
24
Na Propriedade Form_Load() coloque:
Set Picture1.Picture = ImageList1.ListImages(1).Picture
Na propriedade Timer1_Timer() coloque:If Picture1.Picture = ImageList1.ListImages(1).Picture Then
Set Picture1.Picture = ImageList1.ListImages(2).Picture
Exit Sub
End If If Picture1.Picture = ImageList1.ListImages(2).Picture Then
Set Picture1.Picture = ImageList1.ListImages(1).Picture
Exit Sub End If
No Timer1, coloque um intervalo de 100.
60 - Cursores Animados em VB Enviado por: Henrique Angelo
Crie um novo projeto, coloque no Form uma ImageList, coloque os ícones e/ou cursores que farão parte da animação nesta mesma Imagelist. Coloque também um Timer.
Coloque na propriedade do Form:MousePointer = 99 - Custom
Na Propriedade Form_Load() coloque:Set Form1.MouseIcon = ImageList1.ListImages(1).Picture
Na propriedade Timer1_Timer() coloque:If Form1.MouseIcon = ImageList1.ListImages(1).Picture Then
Set Form1.MouseIcon = ImageList1.ListImages(2).Picture
Exit Sub
End If If Form1.MouseIcon = ImageList1.ListImages(2).Picture Then
Set Form1.MouseIcon = ImageList1.ListImages(1).Picture
Exit Sub
End If
No Timer1, coloque um intervalo de 100.
61 - Descobrir Path do Aplicativo Enviado por: Mauro Sakamoto
Para descobrir o Path do aplicativo utilize a função App.Path
Ex:
25
Dim MeuDiretorio
IF Len(App.Path)>3 THEN
MeuDiretorio=App.Path & "\"
ELSE
MeuDiretorio=App.Path 'Se estiver na raiz
END IF
62 - Condições (IIF) em consultas Enviado por: Mauro Sakamoto
Para testar o conteúdo de um campo e retornar valores diferentes conforme o conteúdo do campo, pode-se utilizar o comando IIF(condição,se valor1 se verdade ,valor2 se falso ).
Ex:Se a média do aluno for maior ou igual a 5, escrever aprovado, senão reprovado.
SELECT Nome, Média, IIF(Média>=5,"Aprovado","Reprovado") AS Status FROM Alunos
63 - Adicionar conteúdo de uma ou mais tabelas em outra Enviado por: Mauro Sakamoto
Se você tem duas ou mais tabelas com alguns campos em comum e deseja vê-los em uma única tabela, utilize essa consulta.
Insert into tabela3(campo1, campo2, campo3) _
select campo1, campo2, campo3 _
from tabela1 _
where campo1>valor1 _
union _
select campo1, campo2, campo3 _
from tabela2 _
where campoS1>valor2
E assim sucessivamente.Caso você não queira armazenar o valor comece no primeiro SELECT (descartando o INSERT)
64 - Como usar BeginTrans, CommitTrans e Rollback Enviado por: Mauro Sakamoto
Um problema bastante comum é o micro ser desligado acidentalmente ou a energia acabar, no momento de uma operação com o Banco de Dados (Inserção, Atualização ou Exclusão).Para evitar isso você pode utilizar os Métodos BeginTrans (inicia a transação) CommitTrans (Confirma a inserção) e Rollback (volta ao estado inicial).
Ex:Sub CmdInserir_Click()
On error goto Err_CmdInserir_Click
WorkSpaces(0).BeginTrans
26
' executa comandos de (inserção,exclusão ou atualização)
WorkSpaces(0).CommitTrans
Exit_CmdInserir_Click:
Exit Sub
Err_CmdInserir_Click:
MsgBox Error%
WorkSpaces(0).Rollback
Resume Exit_CmdInserir_Click
End Sub
65 - Atualizar conteúdo de ComboBox conforme string digitada Enviado por: Mauro Sakamoto
Caso você tenha um ComboBox que liste o conteúdo de um campo da tabela e deseja que ao digitar a letra "a" o combo mostre todos os nomes iniciados por "a" escreva o código no evento DropDown.
Sub CmbNome_DropDown()
Dim MyDB As Database
Dim MyNome As SnapShot
MySQL$ = "Select Nome from Clientes Where Nome like " Chr(39) & CmbNome.Text & Chr(42) & Chr(39) 'seleciona os nomes
Set MyDB=OpenDataBase("Table.mdb") 'Abre o BD
Set MyNome=MyDB.CreateSnapShot(MySQL$) 'Cria um snapshot
CmbNome.Text = "" 'limpa o texto no combo
CmbNome.Clear 'limpa o conteúdo do combo
If Not MyNome.NoMatch And MyNome.RecordCount>0 then 'verifica se existe nomes
MyNome.MoveLast
Total&=MyNome.RecordCount 'pega o total de nomes
MyNome.First
For i&=1 to Total 'atualiza o combo
If Not Isnull(MyNome("Nome")) then
CmbNome.AddItem(MyNome("Nome"))
CmbNome.MoveNext
End If
Next i&
End if
End sub
66 - Como chamar um arquivo de HELP para sua aplicação Enviado por: Mauro Sakamoto
27
Supondo que você já tenha um arquivo de help para sua aplicação, você pode chamá-lo utilizando a função API WinHelp.Para isso vá crie um modulo (.bas) e declare as seguintes constantes e funções:
Const Help_File = "File.hlp"
Const Help_Index = &H3
Const Help_Context = &H1
Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As Long
Em seguida vá até o controle em que você deseja chamar o help e digite:WinHelp hwnd, Help_File, Help_Context, 20
O Primeiro valor hwnd , se refere ao Handle da Janela e deve ser passado como hwnd mesmo. O segundo é o nome de seu arquivo hlp.O terceiro parâmetro pode ser utilizado ou para abrir o Help_Index (help padrão do windows, independente do valor em Help_File) ou Help_Context (que abrirá o arquivo especificado em Help_File).Já o quarto parâmetro só terá efeito quando o terceiro parâmetro for Help_Context. Esse parâmetro se refere ao valor do tópico definido em seu arquivo de help (funciona como se fosse um link - abre o aquivo no tópico escolhido).
Além do Help_Context e Help_Index existem outros parâmetros que podem ser passados. Porém os mais comuns são esses dois.
67 - Fazer de forma simples um botão do tipo do VB5 Enviado por: Mauro Sakamoto
Para fazer isso você deve inserir um SSPanel (que vem com o Sheridan 3D).Em seguida defina a propriedade BevelWidth=0 e retire o caption. Insira uma picture em cima do seu SSPanel mudando a propriedade apparence para 0-flat e BorderStyle para 0-None.No evento MouseMove do seu SSPanel e de seu Picture faça:
Sub Picture_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
SSPanel.BevelWidth=1
End Sub
Sub SSPanel_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
SSPanel.BevelWidth=1
End Sub
Agora no evento MouseMove do Formulário faça o inversoSub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
SSPanel.BevelWidth=0
End Sub
Dessa forma quando o mouse for posicionado em cima do "botão", este automaticamente ficará em 3D e quando for movido para fora, ficará chapado.É possível também trocar a picture, dando um efeito tipo Internet Explorer 4.
68 - Reproduzir um vídeo com MMControl Enviado por: Mauro Sakamoto
Para reproduzir um vídeo em um formulário, é conveniente antes de mais nada declarar um picture box onde ele será executado. Em seguida insira um MMControl.
Para reproduzir o avi faça:MMControl1.Command = "close"
MMControl1.DeviceType = "avivideo"
28
MMControl1.hWndDisplay = Picture1.hWnd
MMControl1.filename = "File.avi"
MMControl1.Command = "open"
MMControl1.Command = "prev"
MMControl1.Command = "play"
69 - Reproduzir um arquivo wav ou mid Enviado por: Mauro Sakamoto
Para reporduzir um arquivo de som com do tipo wa ou mid, você precisa utilizar o MMControl.
Ex:MMControl1.Command = "close"
MMControl1.DeviceType = "WaveAudio"
MMControl1.filename = "File.wav"
MMControl1.Command = "open"
MMControl1.Command = "prev"
MMControl1.Command = "play"
Se for um arquivo do tipo mid mude a propriedade DeviceType para "sequencer"
Ex:MMControl1.Command = "close"
MMControl1.DeviceType = "Sequencer"
MMControl1.filename = "File.wav"
MMControl1.Command = "open"
MMControl1.Command = "prev"
MMControl1.Command = "play
70 - Trocar vírgula por ponto em um valor digitado Enviado por: Mauro Sakamoto
Function trocavírgulaporponto(NúmeroTexto)
Dim Posição, Tamanho
Dim MidWord, Msg, TstStr, SpcPos1, SpcPos2 ' Declaração de variáveis
Tamanho = Len(Trim(NúmeroTexto))
Posição1 = InStr(1, NúmeroTexto, ",") 'Acha a vírgula If Posição1 <> 0 Then
Posição1 = Posição1 - 1
posição2 = Posição1 + 2 ' Encontra próximo espaço.
29
trocavírgulaporponto = Mid(NúmeroTexto, 1, Posição1) + "." + Mid(NúmeroTexto, posição2)
Else
trocavírgulaporponto = NúmeroTexto
End If
End Function
71 - Como evitar entrar duas vezes Enviado por: Felipe Maion Garcia
Já estou no ar?
Algumas aplicações para Windows podem ter várias instâncias, ou seja, podem ser executadas repetidas vezes ao mesmo tempo no mesmo computador. É o caso do Bloco de Notas, do Paint, da Calculadora e de outros. Existem programas cuja múltipla execução não é interessante, por questões de produtividade ao usuário (como o Word, o File Manager e o Excel) ou segurança (como aplicações que usam banco de dados). Os sistemas comerciais (de banco de dados), em geral, só podem ser executados em uma sessão ao mesmo tempo. O controle disto no VB é feito através do objeto App.
Dim SaveTitle as string
If App.PrevInstance Then
SaveTitle = App.Title
App.Title = "... segunda chamada ao mesmo programa."
Me.Caption = "... segunda chamada ao mesmo programa, serei fechado"
'se for a Sub Main, a linha acima, obviamente, não existe
'as linhas abaixo fecham a segunda chamada e alternam para
'a primeira
AppActivate SaveTitle
SendKeys "% R", True
End
End If
O código acima deve ser a primeira coisa a ser executada na sua aplicação. Assim, ao invés de abrir uma segunda sessão do programa, o Windows irá alternar para a sessão já aberta. Isto também pode ser feito por APIs (FindWindow, ShowWindow e SetFocus, da bilblioteca User), mas, tem o mesmo efeito e é mais trabalhoso.
72 - Como evitar o bug do ano 2000 Enviado por: Felipe Maion Garcia
30
Dim Pdata As Date
Dim Intervalo As String
Dim Qdias As Integer
Intervalo = "d" ' "d" Especifica o dia
Pdata = turini 'data de entrega
Qdias = (Val(TextCarga / 4)) ' - 1 'Quantidade de dias para a soma)
turini.Tag = Format(turini, "w") ' verifica o dia da semana do início do curso
If Val(turini.Tag) = 5 And Qdias > 9 Then Qdias = Qdias + 2
If Val(turini.Tag) = 5 And Qdias = 4 Or Qdias = 5 Then Qdias = Qdias + 1
If Val(turini.Tag) = 4 And Qdias > 9 Then Qdias = Qdias + 3
If Val(turini.Tag) = 4 And Qdias = 4 Or Qdias = 5 Then Qdias = Qdias + 1
If Val(turini.Tag) = 3 And Qdias > 5 Then Qdias = Qdias + 3
If Val(turini.Tag) = 3 And Qdias < 5 Then Qdias = Qdias - 1
If Val(turini.Tag) = 2 And Qdias > 9 Then Qdias = Qdias + 1
turter = DateAdd(Intervalo, Qdias, Pdata)
73 - Menu PopUp Enviado por: Felipe Maion Garcia
Crie um menu normal com o caption de "Popup Menu" e o name "mnufile", desmarque a opção "Visible", agora crie dois submenus do "Popup Menu" o primeiro com o caption que vc quiser e o name "mnusub1" e o segundo também com o caption que vc quiser e com o name "mnusub2",ATENÇÃO: os dois submenus são visible true. agora crie o código para que quando o usuario clicar no formulario aparecer o popup:
Private Sub Form_MouseDown(Button As Integer, Shift As _
Integer, X As Single, Y As Single)
If Button = 2 Then PopupMenu mnufile 'Mostra o menu popup _'se o botão direito for clicado
End Sub
74 - Conexão Dial-Up Enviado por: Felipe Maion Garcia
Private Sub AbrirDialUp(Conexão as String)
Dim X
X = Shell("C:\Windows\rundll32.exe rnaui.dll,RnaDial " & Conexão, 1)
AppActivate X
SendKeys "{enter}"
DoEvents
End Sub
Ex.:call AbrirDialUp ("Infolink") 'onde no lugar de Infolink _
'você vai utilizar o nome de sua conexão
31
75 - Como pegar o nome do computador Enviado por: Felipe Maion Garcia
No módulo você coloca:Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal sBuffer As String, lSize As Long) As Long
A função GetComputerName requer dois argumentos. O primeiro argumento, sBuffer, é o buffer que irá armazenar o nome do computador depois que a função é executada. O tamanho do buffer deve ser grande o suficiente para que o nome inteiro caiba nele. O segundo argumento, lSize, deve ser inicializado com o tamanho de sBuffer.
Depois de ter executado a função GetComputerName, a variável lSize conterá o número de caracteres (contador) armazenados na string sBuffer. Este valor de contagem não inclui o caractere terminador NULL.
Ainda no módulo você coloca:Public Function NameOfPC(MachineName As String) As Long
Dim NameSize As Long
Dim X As Long
MachineName = Space$(16)
NameSize = Len(MachineName)
X = GetComputerName(MachineName, NameSize)
End Function
Exemplo de um procedimento:Private Sub Command1_Click()
Dim PCName As String
Dim P As Long
P = NameOfPC(PCName)
text1.Text = PCName
End Sub
76 - Placa de som? Enviado por: Felipe Maion Garcia
Como detectar se um computador tem uma placa de som ?
Para realizar tal tarefa, você deverá utilizar a função API waveOutGetNumDevs(). Esta função retorna o número de devices capazes de tocar sons. Porém, antes de usá-la, declare-a em um módulo de código. Ai vai a declaração :
Declare Function waveOutGetNumDevs lib "MMSYSTEM" () as integer
Então, crie a função Ver_audio(), escrevendo o seguinte código :Function Ver_Audio() as string
dim i as integer
i = waveOutGetNumDevs()
if i > 0 then
Ver_Audio = "Sistema capaz de tocar sons"
else
Ver_Audio = "Sistema incapaz de tocar sons"
32
end if
end function
77 - Arquivos INI Enviado por: Felipe Maion Garcia
Código - Funções para escrever e ler em arquivos .INI pessoais.
Estas funções (Get_ini e Write_ini) devem ser colocadas em um módulo (.BAS). Troque nome_do_arquivo.ini pelo nome do seu arquivo .INI pessoal. não esqueça de incluir o caminho completo!
A função get_ini serve para ler em arquivos .INI. Porém, para utiliza-la, é necessário declarar a função GetPrivateProfileString, na seção de declarações (declarations) de seu módulo. A declaração é a seguinte ( escreva apenas em uma linha ):
Declare Function GetPrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
Aqui vai o código da função get_ini :Function get_ini (seção$, chave$) As String
arquiv$ = nome_do_arquivo.ini
Returns$ = Space$(128)
x% = GetPrivateProfileString(ByVal seção$, ByVal chave$, "Nenhum valor lido", Returns$, Len(Returns$), ByVal arquiv$)
get_ini = Left$(Returns$, x%)
End Function
A função write_ini serve para escrever informações em um arquivo .INI. Antes de usá-la. declare a função WritePrivateProfileString na seção "Declarations" de seu módulo.
Declare Function WritePrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, lpKeyName As Any, lpString As Any, ByVal lplFileName As String) As Integer
Feito isso, escreva :Function write_ini (ByVal section$, ByVal chv$, ByVal variavel$) As String
arquiv$ = nome_de_arquivo.ini
iRet = WritePrivateProfileString(ByVal section$, ByVal chv$, ByVal variavel$, ByVal arquiv$)
End Function
78 - Tecla tab como enter Enviado por: Felipe Maion Garcia
Como capturar a tecla TAB nos eventos KeyDown e KeyPress?
Os eventos KeyDown ou KeyPress não estão disparando em resposta a tecla TAB, mesmo com a propriedade KeyPreview=True. Existe alguma coisa que pode ser feita?
Colocando o propriedade KeyPreview para True, é possível capturar a tecla TAB no evento KeyPress do formulário, SOMENTE quando não existem controles, OU quando um único controle recebe o focu no formulário OU, quando a propriedade TabStop é colocada para False para todos os controles no formulário. Quando existir mais de um controle no formulário, o VB irá capturar a mensagem e mover o focu para o próximo controle de acordo com a propriedade TabOrder, e o evento KeyPress não será disparado. O mesmo se aplica para os eventos KeyDown e KeyUp.
No entanto, existe uma forma de saber se a tecla TAB foi pressionada ou não, usando uma API do Windows. Use a função API GetAsyncKeyState em um controle Timer. Apesar de você conseguir saber quando a tecla TAB foi pressionada, você não conseguirá evitar que o comportamento padrão ocorra (mover para o próximo controle). Veja o código abaixo:
' Em um arquivo .BAS
Declare Function GetAsyncKeyState% Lib "User" (ByVal vKey%)
33
Global Const KEY_TAB = &H9
' Adicione este código no evento Timer no controle Timer (interval=1).
retn% = GetAsyncKeyState(KEY_TAB)
' o último bit menos significativo será 1 quando a tecla TAB for pressionada
retn% = retn% And 1
If retn% = 1 Then print "Tecla TAB foi pressionada"
79 - Macro Enviado por: Felipe Maion Garcia
O Visual Basic tem macro substituição como o Clipper ?
Macro substituição é um operador, como o operador "&" do Clipper. Em Clipper você pode fazer o seguinte:Test := "good morning"
? "Hello, &Test"
O resultado do print será "Hello, good morning". Isto pode ser feito no Visual Basic?
Infelizmente, este recurso não está disponível em VB. O melhor que pode ser feito neste caso, é escrever uma função que receba alguns nomes de variáveis e devolva o valor associado destas variáveis. Esta função terá um Select Case com o nome da variável passado por parametro e em cada caso (Case) uma apropriada variável é acessada.
Veja o código abaixo:'Na seção general
Dim Test1, Test2
Function MyMacroOperator (given$)
Select Case given
Case "Test1": MyMacroOperator = Test1: Exit Function
Case "Test2": MyMacroOperator = Test2: Exit Function
' e assim com todas as variáveis
Case Else ' Precisa conter alguma outra coisa.
MyMacroOperator = 0 ' valor inválido
End Select
End FunctionSub Form_Click () ' Para testar a função MyMacroOperator
Test1 = "good morning"
Test2 = "bad morning"
MsgBox ("Hello " & MyMacroOperator("Test1"))
MsgBox ("Hello " & MyMacroOperator("Test2"))
End Sub
80 - Message Box 1 Enviado por: Felipe Maion Garcia
Como criar um MsgBox (Message Box) que não seja modal ?
34
A função MsgBox do Visual Basic não contempla esta opção. Porém, é possível fazer usando a função API MessageBox. Declare e chame a API como segue (código VB 3.0):
Declare Function MessageBox% Lib "User" (ByVal hWnd%, ByVal lpText$, _
ByVal lpCaption$, ByVal wType%)
Const MB_OKCANCEL = &H1
Dim ret%
ret = MessageBox(0, "I am a Modeless MessageBox", "Modeless MessageBox " _
, MB_OKCANCEL)Obs.: É possível também criar um formulário com as mesmas características de um MessageBox e exibí-lo de forma não modal.
81 - FRX Enviado por: Felipe Maion Garcia
O Visual Basic grava os forms nos formatos: Binário (padrão) or ASCII.
Quando o desenvolvedor escolhe o formato ASCII (Marcando a opção "Save as Text" na janela "Save File As"; ou no menu "Options", "Environment", marque "Default Save As Format = Text"), o VB então grava os arquivos no formato ASCII. No entanto, alguns controles tem propriedades cuja informação é binária (Por exemplo: propriedade Picture de um PictureBox). O VB grava todas estas informações binárias do formulário, em um arquivo binário, separado do arquivo ASCII. Estes arquivos são armazenados no mesmo diretório que os arquivos .FRM, e com o mesmo nome, mas com a extensão FRX.
O VB lê estes arquivos enquanto os arquivos no formato ASCII são carregados. Se um projeto é gravado no formato ASCII; logo todo o formulário que tiver informações binárias, deverá ser acompanhado de um arquivo FRX correspondente
82 - Resolução Enviado por: Felipe Maion Garcia
Eu preciso obter a resolução da tela, onde a minha aplicação está rodando por várias razões, por exemplo ajustar o tamanho de alguns controles em run-time.
Você pode utilizar algumas propriedades do objeto Screen para calcular a resolução da tela. Veja o seguinte código (VB 3.0):
Dim xTwips%, yTwips%, xPixels#, YPixels#
xTwips = Screen.TwipsPerPixelX
yTwips = Screen.TwipsPerPixelY
YPixels = Screen.Height / yTwips
xPixels = Screen.Width / xTwips
Print "A Resolução é : " & Str$(xPixels) + " por " + Str$(YPixels)
83 - SQL Enviado por: Felipe Maion Garcia
A linguagem SQL(Structured Query Language) é uma linguagem de alto nível para manipulação de dados dentro do modelo relacional. Seu objetivo é fornecer uma interface de alto nível ao usuário. É uma linguagem não procedural, e, não cabe ao usuário definir como o gerenciador de banco de dados executará uma tarefa, mas somente o ele que deve fazer.Uma instrução SQL consiste em três partes: As declarações de parâmetros A instrução manipulativa As declarações de opçõesPara termos uma idéia do seu poder, imagine que temos que atualizar o campo valor em 10% de uma tabela com diversos registros. Na abordagem procedural teriamos os seguintes passoa a seguir:
1. Abrir a tabela
2. Posicionar o ponteiro no início da tabela
35
3. Atualizar o campo valor em 10%
4. Atualizar tabela
5. Movermos o ponteiro para o próximo registro
6. Continuar a atualização do campo valor até o final da tabela
O código poderia Ter o seguinte aspecto:Dim db as database
Dim tabela as recordset
set db=workspaces(0).Opendatabase("c:\base.mdb")
set tabela=db.Openrecordset("tabela")
While not tabela.eof
Tabela.edit
Tabela.valor=tabela.valor*1.10
Tabela.update
Tabela.movenext
Wend
Tabela.close
Agora utilizando uma instrução SQL teriamos o seguinte código:Dim db as Database
Set db=Workspaces(0).Opendatabase("c:\base.mdb")
Db.execute "UPDATE tabela SET valor=valor*1.10"
Db.close
Observe a utilização da instrução UPDATE, bem mais simples, não é?
Vejamos abaixo as cláusulas manipulativas e suas finalidades:
Instrução SELECT - Obtém um grupo de registros e insere os registros em um dynaset ou em uma tabela UPDATE - Define os valores dos campos de uma tabela em uma atualização TRANSFORM - Cria uma tabela de resumo, utilizando o conteúdo de um campo como cabeçalho de cada coluna DELETE FROM - Remove registros de uma tabela INSERT INTO - Acrescenta um grupo de registros a uma tabela.
Vejamos alguns exemplos da instrução SELECT:
1. Seleciona os campos "Primeiro nome" e "Sobrenome" de todos os registros da tabela Empregados.SELECT [Primeiro nome],[Sobrenome] FROM Empregados
2. Seleciona todos os campos da tabela Empregados. Note o uso do parâmetro (*) indicando todos os campos da tabela indicada.
SELECT Empregados.* FROM Empregados
3. Conta o número de registros que têm uma entrada no campo "Código postal" e coloca o título contagem no topo da coluna.
SELECT Count([Código postal]) AS Contagem FROM Clientes
4. Seleciona os campos "Primeiro nome" e "Sobrenome" de cada registro cujo sobrenome seja Pereira.SELECT [Primeiro nome],[Sobrenome] FROM Empregados WHERE [Sobrenome]='Pereira'
5. Seleciona os campos "Primeiro nome" e "Sobrenome" para Empregados cujos sobrenomes começam pela letra S.
36
SELECT [Primeiro nome],[Sobrenome] FROM Empregados WHERE [Sobrenome] Like 'S*'
FROM - Indica as tabelas utilizadas como fonte de dados WHERE - Especifica as condições que os registros devem satisfazer para compor o subconjunto de dados.
84 - Copia o arquivo especificado Enviado por: Felipe Maion Garcia
Copia o arquivo especificado.Sintaxe: FileCopy
Exemplo:Public Function MoveArquivo(Origem As String, Destino As String) As Boolean
On Error GoTo ErroMovendoArquivo
FileCopy Origem, Destino
Kill Origem
MoveArquivo = True
Exit Function
ErroMovendoArquivo:
MoveArquivo = False
Exit Function
End Funciotn
85 - Form circular Enviado por: Felipe Maion Garcia
Adicione nas declarações da form:Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As _
Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd _
As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Agora no form load:Dim hr&, dl&
Dim usew&, useh&
usew& = me.Width / Screen.TwipsPerPixelX
useh& = me.Height / Screen.TwipsPerPixelY
x = 0
hr& = CreateEllipticRgn(0, 0, usew, useh) 'Faz a _
'forma da janela numa forma de um círculo descrito por x1,y1,x2,y2
dl& = SetWindowRgn(me.hWnd, hr, True)
Obs.: mude o nome "Screen" para o nome do seu formulário
37
86 - Centralizando forms Enviado por: Felipe Maion Garcia
Centralizar forms é muito útil, além de ser muito fácil e com pouca codificação. Coloque o seguinte código no evento Form_Load () do form que você quiser centralizar:
Left = (Screen.Width - Width) \ 2
Top = (Screen.Height - Height) \ 2
87 - Bitmap Enviado por: Felipe Maion Garcia
Você pode utilizar o controle PictureBox com a propriedade AutoSize=True. Carregue o bitmap no PictureBox, usando a função LoadPicture. O controle irá ajustar o seu tamanho automaticamente, para que o bitmap caiba nele. As propriedades Height e Width deste controle contém as dimensões do bitmap. Note que os valores destas propriedades estão em Twips.
Uma outra forma, é utilizar a API GetObject. Esta função retorna a estrutura do Bitmap em dois membros, bmWidth e bmHeight representando as dimensões do bitmap em pixels. Veja o exemplo abaixo:
Coloque o seguinte código em um arquivo .BASType BITMAP '14 bytes
Integer
bmHeight As Integer
bmWidthBytes As Integer
bmPlanes As String * 1
bmBitsPixel As String * 1
bmBits As Long
End Type
Declare Function GetObjectAPI% Lib "GDI" Alias "GetObject"(ByVal hObject%, ByVal nCount% , lpObject As Any)
Coloque o seguinte código aonde você quer obter as dimensões do bitmap. (O Bitmap deve ser carregado em um PictureBox chamado Picture1):
Dim bmp As BITMAP, ret%ret = GetObjectAPI(picture1.Picture, Len(bmp), bmp)
Print "width = " + Str$(bmp.bmwidth) + ", height = " + Str$(bmp.bmheight)
88 - Como criar um banco de dados Access, contendo tabelas e índices (index) Enviado por: Felipe Maion Garcia
1. Criando o banco de dados
A criação de um banco de dados é relativamente simples :CHDRIVE App.Path
CHDIR App.Path
dim db as database
CONST DB_LANG_GENERAL = ";LANGID=0x0809;CP=1252;COUNTRY=0"
SET db = CREATEDATABASE("banco.mdb", DB_LANG_GENERAL)
2. Criando uma tabela
Uma tabela contém vários campos, com várias propriedades. Então, para cada campo, deve-se atribuir valores a estas propriedades, assim como se você fosse criar um campo em uma tabela usando o Data Manager, que vem com o VB: Neste exemplo, a tabela conterá dois campos : NOME e IDADE. Veja o código a seguir :
38
CONST DB_TEXT = 10
CONST DB_INTEGER = 3
Dim db as database
Dim tb as New TableDef
Dim campo1 as New field
Dim campo2 as New field
set db = OpenDatabase("banco.mdb")
tb.name = "Tabela"
campo1.Name = "NOME"
campo1.Type = DB_TEXT
campo1.Size = 60
campo2.Name = "IDADE"
campo2.Type = DB_INTEGER
tb.Fields.Append campo1
tb.Fields.Append campo2
db.TableDefs.Append tb
tb.close
set tb = nothing
db.close
set db = nothing
3 - Criando Índices
Índices são muito úteis em rotinas de procura de dados em tabelas. Além de serem mais rápidos, eles requerem menos código para realizar estas buscas. Veja como criar um índice de um campo em uma tabela já existente:
Dim index1 as New Index
Dim index2 as New Index
Dim db as database
Dim tb as tableset db = OpenDatabase("banco.mdb")
set tb = db.OpenTable("tabela")
index1.name = "nome"
index1.fields = "NOME"
index1.unique = true
index1.primary = true
index1.name = "idade"
index2.fields = "IDADE"
index2.unique = false
index2.primary = false
tb.Indexes.Append index1
39
tb.Indexes.Append index2
tb.close
set tb = nothing
db.close
set db = nothing
89 - BeginTrans e CommitTrans Enviado por: Felipe Maion Garcia
Use os comandos BeginTrans e CommitTrans para aumentar a velocidade de operações com banco de dados. O começo de uma transação (operação de atualização de banco de dados) deve ser marcado com o comando BeginTrans e o fim de uma transação, com CommitTrans. A aumento de velocidade se dá porque estas transações se dão sem acesso ao disco toda vez que há um comando para atualizar o banco de dados (o método update). Ao invés disso, as mudanças são armazenadas na memória, até que há o comando CommitTrans, que é quando ocorre a gravação dos dados no disco. Assim, só há acesso ao disco uma vez. Observe o exemplo de como se usa estes comandos.
Dim db as database
dim tb as table
set db = OpenDatabase("data_base.mdb")
set tb = db.OpenTable("table")
BeginTrans
for a = 1 to 10
tb.addnew
tb!numero = "número" & a
tb.update
next a
CommitTrans 'as informações serão atualizadas aqui!
tb.close
set tb = nothing 'libera a memória alocada pela tabela
db.close
set db = nothing 'libera a memória alocada pelo banco de dados
90 - Porque o Visual Basic não faz contas corretas com ponto fluante? Enviado por: Felipe Maion Garcia
Alguém já notou que o Visual Basic não é muito bom em matemática? Tente fazer 18.51 + (-17.59) e você irá receber .9200000000000002.
Isso ocorre, porque no Visual Basic, os valores com ponto flutuante são armazenados no formato padrão IEEE. A representação da máquina sobre valores numéricos é em binário. Qualquer valor inteiro pode ser representado "EXATAMENTE" na forma binária. Mas nos casos de valores com ponto flutuante, isso não é verdade.
40
Por exemplo, o decimal 0.0001 não pode ser representado exatamente em binário (0.0001 é uma fração repetitiva com um período de 104 bits!). Então, os valores com ponto flutuante são aproximados para o próximo valor que pode ser representado em binário. Logo, eles tendem a causar algum erro nos calculos quando são utilizados. No nosso exemplo, ambos 18.51 e 17.59 não podem ser representados exatamente pelo padrão de ponto flutuante. A soma deles incluirá um pequeno erro. Observe que o erro é bastante pequeno e essencialmente a soma (quando vista em uma precisão de 14/15 pontos decimais usando a função Format$) é correta.
Para exibir o resultado exato para o usuário, faça o seguinte:Format$(18.51 + (-17.59), "###.#####")
91 - Banco de dados Enviado por: Felipe Maion Garcia
Podemos entender por banco de dados qualquer sistema que reúna e mantenha organizada uma série de informações relacionadas a um determinado assunto em uma determinada ordem.
A lista telefônica é um exemplo, nela percebemos que todos os dados referentes a uma pessoa estão na mesma linha, a isso chamamos registros.
O tipo ou categoria da informação (nome,telefone,etc.) sobre uma pessoa está separada em colunas, as quais chamamos campos.
Um Sistema Gerenciador de banco de dados relacionais(SGBDR) é usado para armazenar as informações de uma forma que permita às pessoas examiná-las de diversas maneiras.
O Gerenciador relacional de banco de dados do Visual Basic e do Access é o Microsoft Jet, ele pertence a uma categoria diferente dos Gerenciadores tradicionais, como o Dbase e o Paradox, pois possuem características em comum com os banco de dados cliente-servidor. Tais características comuns são: Todas as tabelas, indíces, consultas, relatórios e código são armazenados num único arquivo .MDB Os campos de data suportam informação de hora. Admite o armazenamento permanente de comandos SQL. É possível forçar a integridade referencial entre as tabelas. Os campos suportam valores nulos (Null).No Dbase/Clipper banco de dados significa um arquivo que contém a estrutura de dados(campos) e os dados (Arquivo padrão DBF). Para o padrão MDB este conjunto de dados e sua estrutura denomina-se Tabela.
Portanto aquilo que o Dbase/Clipper considera um banco de dados o Access e o Visual Basic considera como uma Tabela.
Para o Access e o Visual Basic todos os componentes do sistema estão em um único arquivo com extensão MDB, a este "pacote" consideramos o banco de dados.
Logo quando abrimos um arquivo MDB temos acesso a todos os componentes do sistema: tabelas, consultas, macros, relatórios, etc. A esses componentes chamamos objetos do sistema.
92 - Mudar cor do texto conforme resultado Enviado por: Mauro Sakamoto
Supondo que você esteja tirando uma listagem de alunos. Se a média for menor que 5 imprima em vermelho reprovado,senão imprima em preto aprovado. Para fazer isso utilize dois campos fórmula sobrepostos.No primeiro dê o nome de aprovado e insira o seguinte código:
IF({Tabela.Média}>=5) THEN
"Aprovado"
No segundo faça:IF({Tabela.Média}<5) THEN
"Reprovado"
Em seguida formate o segundo para vermelho (clique com o botão direito do mouse e escolha change Font. Escolha a cor Veremlho).
41
Está pronto quando o valor média da tabela for maior que cinco aparecerá no relatório em preto a palavra aprovado, caso contrário aparecerá em vermelho reprovado.
93 - Enviando texto para barra de status Enviado por: Mauro Sakamoto
Suponha que você tenha uma aplicação e ao passar por um botão, você queira que emita uma mensagem na barra de status.Para isso primeiramente vá até o menu Project-Componentes e Selecione Microsoft Windows Common Controls 5.0 (para o vb 5.0)Em seguida escolha o controle StatusBar. Clicando com o botão direito do mouse é possível personalizado (Número de paineis, mostrar data, hora, Status do Coaps Lock e Num Lock, etc).Deixe o segundo painel é o destinado para a mensagem.Uma vez personalizada a barra de status vá até o seu botão e insira os seguintes códigos no evento MouseMove
Sub CmbBotao_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
StatusBar1.Panels(1).Text="Texto desejado" 'inicia no zero
End Sub
Agora vá até o evento MouseMove do seu Form e façaStatusBar1.Panels(1).Text="" 'inicia no zero
94 - Retornar para formulário valor selecionado no DBGrid Enviado por: Mauro Sakamoto
Supondo que vc tenha um formulário "Form1" (sem DataControl) e um botão que chama um outro formulário "Fomr2" que possue um DBGrid.Esse DBGRid é utilizado para pesquisa, ou seja ao selecionar um registro no DBGrid, quero que ao sair do "Form2" esse valor seja exibido no "Form1".Para fazer isso utilize os seguintes códigos no evento Click do botão retornar.
Dim MyDB As Database
Dim MySet As RecordSet 'declaração de variáveis
Set MyDB=OpenDatabase("File.mdb") 'abre o banco de dados
Set MySet=MyDB.OpenRecordSet("MyTable") 'abre a tabela
MySet.Index = "PrimaryKey" 'busca pelo campo chave
MySet.Seek "=",DBGrid.Columns(0).CellValue(DBGrid.GetBookMark(0)) 'valor a ser encontrado
Form1.TxtCampo1.Text=MySet("Campo1")
Form1.TxtCampo2.Text=MySet("Campo2")
Form1.TxtCampo3.Text=MySet("Campo3")
Form1.TxtCampo4.Text=MySet("Campo4")
'e assim sucessivamente
Form1.TxtCampoN.Text=MySet("CampoN")
Unload Me
Obs:
Nesse exemplo estou considerando que a minha coluna 0 tem o valor do índice da minha tabela (Columns(0)).
Já GetBookMark(0) retorna a linha selecionada.
95 - Tenha uma linha 3D entre um menu pulldown e uma barra de ferramentas Enviado por: Henrique Angelo
Desenhe um 3DPanel com um tamanho (height) de 30. Este tamanho não é fácil de ser desenhado manualmente.
42
Apague a Caption, mude o BevelOuter para 1 (inset), border para 1 e Align para Top.Desenhe a barra de ferramentas e o menu.
96 - Livre-se dos zeros inúteis Enviado por: Henrique Angelo
Vamos retirar os zeros inúteis da variável mystring (que contém "00030"). Abaixo, um interessante caminho para isto.Mystring = CStr(CInt(mystring))
Outro caminho é:Mystring = Str(Val(mystring))
97 - Objetos vazios? Enviado por: Henrique Angelo
Não se pode usar a função IsEmpty para determinar se uma variável-objeto (como Form ou qualquer controle) possui valor. É possível, entretanto, usar a implementação abaixo para determinar se uma variável de form (ou outro objeto) está vazia.
If Not frmChild Is Nothing Then
Unload frmChild
End If
98 - Destacando uma linha em um DBGrid Enviado por: Henrique Angelo
Para destacar uma linha no controle DBGrid, adicione o registro corrente à SellBookmarks Collection:Private Sub DBGrid_RowColChange _
(LatRow As Variant, ByVal LasRow As Integer)
If Data1.RecordSet.RecordCount Then
DBGrid.SelBookmarks.Add _
Data1.RecordSet.Bookmark
End If
End Sub
99 - Atualizando Bound Controls por uma List Box Enviado por: Henrique Angelo
Quando você desejar que os Bound Controls (controles associados a dados) sejam atualizados em eventos de listas ou combos, adicione este código no evento click (ou double-click) da lista ou combo:
Data1.RecordSet.Bookmark = DBCombo1.SelectedItem
Como resultado, seu registro corrente passará a ser o registro com a chave indicada na lista ou combo. Todos os Bound Controls são atualizados automaticamente. É necessário definir apenas as propriedades RowSource e ListField. Assim, economiza-se tempo que seria gasto em conversões de dados e atualização de campos.
100 - Valores de retorno não requeridos
43
Enviado por: Henrique Angelo
Você não precisa retornar valores em todas as funções. Mas, é uma implementação um pouco perigosa.Private Sub Form_Load( )
dice
End SubFunction dice ( ) As Integer
dice = Int(Rnd * 6) + 1
MsgBox "Esta é uma rotina que não retorna valor"
End Function
101 - Procurando por nulos retornados por chamadas DLL Enviado por: Henrique Angelo
Após uma chamada a DLL (API), o valor retornado pode conter um nulo. Um dos meios de eliminar este nulo é procurar o caracter Chr$(0), como neste exemplo.
'yourstring é a string retornada pela API, e pode conter um nulo
Dim CheckForNull as Integer
CheckForNull = Instr(YourString, Chr$(0))
If CheckForNull > 0 then Left$(YourString, CheckForNull - 1)
102 - Como calcular as coordenadas (x,y) de qualquer posição de um círculo Enviado por: Henrique Angelo
A rotina abaixo (parte da biblioteca CodeBank) calcula as coordenadas de qualquer ponto, medida em graus, numa circunferência, num círculo ou numa elipse. Como você pode notar, é uma rotina simples, mas extremamente útil no desenho de gráficos ou movimentação de objetos.
Public Sub DegreesToXY(CenterX as Long, CenterY as Long, _
Degree as Double, RadiusX as Long, RadiusY as Long, _
X as Long, Y as Long)
Dim Convert as Double
Convert = 3.141593 /180 ' PI/180
X = CenterX - (Sin(-Degree * Convert) * RadiusX)
Y = CenterY - (Sin((90 + Degree) * Convert) * RadiusX)
End Sub
103 - Movendo itens em uma list box Enviado por: Henrique Angelo
Para, através do mouse, mover a localização de um item numa list box, use o código abaixo.'declarations:
Dim Tmp_Text As String
Dim Old_index As Integer
Dim New_index As Integer
'mouse events:
44
Sub List1_MouseDown (Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Old_index = List1.ListIndex
Tmp_text = List1.text
End SubSub List1_MouseUp (Button As Integer, _
Shift As Integer, X As Single, Y As Single)
New_index = List1.ListIndex
If Old_index <> New_index Then
List1.RemoveItem Old_Index
List1.AddItem TmpText, NewIndex
End If
End Sub
104 - Usando SendKeys Enviado por: Henrique Angelo
A função SendKeys (que simula o aperto de teclas) adiciona ótimos recursos de "intervenção" do programador na operação do sistema. As teclas podem ser enviadas para um form ou controle (neste caso o controle deverá ter o foco). A rotina abaixo simplifica o processo.
Sub SendKeyTo (KeyValue as String, cCnt as Control)
If cCnt.Enabled Then cCnt.SetFocus
SendKeys KeyValue
End Sub
105 - Bloqueando funções Copiar e Colar em caixas de texto Enviado por: Henrique Angelo
As funções Copiar (CTRL+C) e Colar (CTRL+V) estão sempre disponíveis para text boxes, mas e se você não desejar que estas funções funcionem? Você deve supor que o evento KeyDown consegue detectar CTR+C e CTRL+V, mas não detecta. No evento KeyPress, estas teclas podem ser capturadas:
Sub Text1_KeyPress (KeyAscii As Integer)
If KeyAscii = 3 Or KeyAscii = 22 Then KeyAscii = 0
'CTRL+C = 3 e CTRL+V = 22, valores não constantes na tabela ANSI,
'geram estas combinações. Recurso não documentado
End Sub
106 - Forçando caracteres maiúsculos Enviado por: Henrique Angelo
Para facilitar a digitação de maiúsculos, independente do pressionamento de CAPS LOCK, converta cada caracter no evento KeyPress.
45
Private Sub Form_KeyPress (KeyAscii as Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
Para que esta rotina funcione para todos os campos do form, altere a propriedade KeyPreview do mesmo para true.
107 - Bloqueando funções Copiar e Colar em caixas de texto Enviado por: Henrique Angelo
As funções Copiar (CTRL+C) e Colar (CTRL+V) estão sempre disponíveis para text boxes, mas e se você não desejar que estas funções funcionem? Você deve supor que o evento KeyDown consegue detectar CTR+C e CTRL+V, mas não detecta. No evento KeyPress, estas teclas podem ser capturadas:
Sub Text1_KeyPress (KeyAscii As Integer)
If KeyAscii = 3 Or KeyAscii = 22 Then KeyAscii = 0
'CTRL+C = 3 e CTRL+V = 22, valores não constantes na tabela ANSI,
'geram estas combinações. Recurso não documentado
End Sub
108 - Forms redimensionáveis sem barra de título Enviado por: Henrique Angelo
Se você alterar as propriedades (de um form) caption = "" e controlbox = false, uma borderstyle = 3 (fixed) irá ser mostrada. Diferente da borderstyle = 0 (none), as propriedades 3D (VB4) são mantidas. Utilizando borderstyle = 5 (sizable toolwindows, no VB4), você terá um form redimensionável.É possível (VB3/VB4) alternar o conteúdo da Caption, limpando-a quando conveniente. E não se esqueça de acrescentar um botão de Fechar (unload) no seu form!
109 - Removendo o move Enviado por: Henrique Angelo
Em alguns casos, é interessante impedir o usuário de mover um form. No VB isto pode ser implementado com APIs:Declare Function GetMenu% Lib "User" (ByVal hWnd%)
Declare Function RemoveMenu% Lib "User" (ByVal hWnd%, ByVal nPosition%, ByVal wFlags%)'...Dim Res%
Res = RemoveMenu(GetMenu(Form.hWnd), SC_MOVE, MF_BYPOSITION)
110 - Economize memória com uma picture box Enviado por: Henrique Angelo
Mudar a propriedade AutoRedraw para true consiste em redesenhar forms rapidamente e desperdiçar alguma memória. Se seu form é redimensionável, o desperdício pode ser bem maior, pois, o bitmap persistente criado pelo AutoRedraw é tão grande quanto as dimensões máximas do form para revelar a saída oculta, quando o usuário maximiza ou minimiza a janela. Se o gráfico a ser redimensionado (mantido) for pequeno em relação ao form, você economizará memória se utilizar uma picture box com AutoRedraw = true e BorderStyle = 0, enquanto o AutoRedraw do form será desativado (false).
111 - Programando de forma diferente em tempo de desenho e execução Enviado por: Henrique Angelo
Este código habilita ou desabilita funções durante o desenho e teste. O código poderá permanecer durante o desenvolvimento, sem afetar o usuário final. Verifique se o caminho procurado é o caminho do seu projeto e não o diretório final de sua aplicação.
If InsStr(App.Path, "VB") Then
46
'execute os processos próprios
'de debug e não de sistema executável
End IF
Uma variação é:If InsStr(App.Path, "VB") Then Stop
Você pode inserir este código para depuração (debug); se você esquecer, isto não causará - repetimos - problemas ao usuário.
112 - Animação Enviado por: Felipe Maion Garcia
Agora, você dará um grande passo na programação de jogos. Trata-se da Animação de Personagens. Como já foi dito anteriormente, encontrei muitos desenhos para animações simples no SpriteLib. Infelizmente, cada um desses arquivos contém todos os movimentos de um determinado personagem; assim, caberá a vocês recortar cada posição, salvando-a com um novo nome de arquivo. Depois de feito o recorte, abra o Visual Basic e comece um EXE normal. Coloque, então, um PictureBox, um Timer e um ImageList (VB 4 ou superior apenas). No ImageList, selecione as imagens que farão parte da animação. Note que para cada imagem dessa lista há um número. O PictureBox deverá ter sua própriedade "AutoSize" ajustada para "True", uma vez que é praticamente impossível recortar todas as imagens com o mesmo tamanho. Lembre-se também de ajustar, ainda no PictureBox, o estilo normal, e não "3D", que é o padrão. Além disso, você deve tirar a borda do PictureBox e no Form1, programar a propriedade "BackColor" com uma cor preta. Depois disso, no evento Form1_Load, insira o seguinte código:
Set Picture1.Picture = ImageList1.ListImages(1).Picture
Esse comando faz com que a figura que aparecerá no PictureBox seja a mesma com o número 1 do ImageList (o número entre parênteses é o número da imagem na lista). Depois, ajuste o Timer com "Interval" de 100 milissegundos. No evento Timer1_Timer, coloque:
If Picture1.Picture = ImageList1.ListImages(1).Picture Then
Set Picture1.Picture = ImageList1.ListImages(2).Picture
Picture1.Top = Picture1.Top + 50
Exit Sub
End If
If Picture1.Picture = ImageList1.ListImages(2).Picture Then
Set Picture1.Picture = ImageList1.ListImages(1).Picture
Picture1.Top = Picture1.Top + 50
Exit Sub
End If
Apesar de parecerem complexos, esses comandos são simples: a cada 100 milissegundos, o programa irá checar qual é a imagem da animação e a trocará para outra. Ao mesmo tempo, esses comandos farão com que o PictureBox se mova para baixo. Como neste exemplo usei imagens de um homem andando para baixo na tela, a animação conseguiu mesmo passar esta impressão.
113 - Movimento de objeto através do teclado Enviado por: Felipe Maion Garcia
Movimentando Objetos Através do TecladoIsso é simples, apesar de não parecer. Suponhamos que você tenha uma forma (Shape1) emseu projeto, e quer movê-la pela tela usando as setas do teclado. Crie um relógio (Timer1). NoGeneral_Declarations, digite:
Dim Baixo As Integer
Dim Cima As Integer
47
Dim Direita As Integer
Dim Esquerda As Integer
O código acima foi utilizado para declarar as variáveis Baixo, Cima, Direita e Esquerda. Vocêpode alterar o nome das variáveis aqui, mas lembre-se de mudar também TODAS asreferências a estas variáveis pelas condições novas. Agora, no evento Form_KeyDown, digite:
If (KeyCode = vbKeyLeft) Then
Esquerda = True
End If
If (KeyCode = vbKeyRight) Then
Direita = True
End If
If (KeyCode = vbKeyUp) Then
Cima = True
End If
If (KeyCode = vbKeyDown) Then
Baixo = True
End If
Este código programa as setas para interagirem com as variáveis declaradas acima. Logodepois, no evento Form_KeyUp, digite:
If (KeyCode = vbKeyLeft) Then
Esquerda = False
End If
If (KeyCode = vbKeyRight) Then
Direita = False
End If
If (KeyCode = vbKeyUp) Then
Cima = False
End If
If (KeyCode = vbKeyDown) Then
Baixo = False
End If
Repare que este código foi bem parecido com Form_KeyDown. Agora, no eventoTimer1_Timer, digite:
If Esquerda = True Then
Shape1.Left = Shape1.Left - 30
End If
If Direita = True Then
Shape1.Left = Shape1.Left + 30
End If
48
If Cima = True Then
7Shape1.Top = Shape1.Top - 30
End If
If Baixo = True Then
Shape1.Top = Shape1.Top + 30
End If
Repare que a propriedade Interval do objeto Timer1 deve estar ajustada para 1. Agora, bastaexecutar o jogo e ver o funcionamento deste código. NOTA: em todos os lugares onde há algocomo "...Top+30" ou ..."Top-30" ou "...Left+30" ou "...Left-30", você pode mudar o número "30"de acordo com a velocidade do Shape1. Quanto menor o número, menor a velocidade, equanto maior o número, maior a velocidade. Porém, se você aumentar demais a velocidade,passa a perder muito na suavidade dos movimentos. Preferimos usar 30.
114 - Efeitos sonoros Enviado por: Felipe Maion Garcia
Também é possível, além de usar os fundos musicais (MID), usar efeitos sonoros (WAV) semque seja necessário interromper a música de fundo, porém enquanto este efeito sonoro toca, os comandos do jogo "travam" até que ele acabe. O código abaixo se refere ao seguinteexemplo: você quer que, quando o jogo seja fechado, o efeito sonoro "Repique.wav" sejatocado. Para que isso seja possível, insira este código em um Módulo de seu projeto:
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Repare que todo este código deve ser colocado em uma única linha. Depois disso, no eventoForm_Unload, referente ao momento em que o jogo é fechado, coloque o seguinte código:
result = sndPlaySound("C:\Windows\Repique.wav", SND_ASYNC Or SND_NODEFAULT)
PRONTO! Isso é tudo que um jogo precisa para tocar efeitos sonoros. NOTA: você podemesclar os tópicos 01 e 02 para ter uma música de fundo e efeitos sonoros ao mesmo tempo,e o melhor, você não perde velocidade com isso. OBS: Se você estiver usando o Windows3.1, irá perceber que este código não irá funcionar. Calma, basta mudar, no Módulo, apalavra "winmm.dll" por "mmsystem.dll".
115 - Musica de fundo Enviado por: Felipe Maion Garcia
Caso você não saiba, é possível tocar uma música de extensão MID em um programa e realizar outras tarefas ao mesmo tempo. Basta colocar em um módulo de declarações (*.BAS) o seguinte código. NOTA: tudo isso é apenas uma linha de texto e não várias, como aparenta).
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uRetrunLength As Long, ByVal hwndCallback As Long) As Long
Suponhamos que você queira que esta música toque sempre que o programa se iniciar (Form_Load) e pare sempre que o mesmo for fechado (Form_Unload). Então, no evento Form_Load, insira o código:
result = mciSendString("open C:\Windows\Canyon.mid type sequencer alias musica", 0, 0, 0)
result = mciSendString("play musica", 0, 0, 0)
Desta vez, são duas linhas mesmo. Assim, quando você iniciar seu programa, o som"Canyon.mid" irá tocar. Repare, depois da palavra "alias", que a palavra "musica" pode sersubstituida por outra variável, mas não se esqueça de mudar esta variável também nasegunda linha, ou o programa não irá iniciar corretamente. Agora, no evento Form_Unload,insira o seguinte código:
result = mciSendString("open C:\Windows\Canyon.mid type sequencer alias musica", 0, 0, 0)
49
result = mciSendString("stop musica", 0, 0, 0)
Novamente são duas linhas de código. Se você mudou a variável "musica" no evento Form_Load, não esqueça de mudá-la aqui também. PRONTO! Agora, sempre que você iniciar o Jogo, o som escolhido começará a tocar, e, nahora da saída, este som irá parar. NOTA: se você estiver rodando o programa por dentro doVB, não o pare com o botão "Stop", e sim feche o Form. Se você não fizer isso, o som irácontinuar tocando! OBS: Se você estiver usando o Windows 3.1, irá perceber que este códigonão irá funcionar. Calma, basta mudar, no Módulo, a palavra "winmm.dll" por"mmsystem.dll".
116 - Múltipla seleção numa list box. Enviado por: Mauro Sakamto
Para conseguir múltipla seleção numa list box basta mudar uma propriedade MultiSelect para
1-Simple (basta um click para selecionar os itens).
2-Extended (é necessário clicar Shift+click or shift + tecla de direção)
Para utilizar os valores selecionados é preciso fazer um for.
Ex: For n=0 to (List.ListCount-1)
If List.Selected(n)=True then 'se verdadeiro está selecionado
showmessage('o item '+ list.List(n) +' está selecionado')
end if
Next n
117 - Simulando um ToolTipText (VB3 ou VB4) Enviado por: Mauro Sakamoto
Um ToolTipText é aquele texto com um micro help que aparece quando passamos em cima de algum botão (na maioria das vezes). No VB5 ele já vem como sendo uma propriedade dos controles, mas no VB3 ou 4 essa propriedade não existe.Porém existe uma maneira bem simples de criá-la.Primeiramente insira um label próximo de um botão.Em seguida mude o texto (esse vai ser o texto do seu micro help), o BackColor para &H00C0FFFF& e coloque a propriedade visible=falseAgora no evento MouseMove do formulário coloque
If Label1.Visible=True then
Label1.Visible=False
End if Em seguida vá até o evento MouseMove do Botão e coloque
If Label1.Visible=False then
Label1.Visible=True
End if Dessa forma quando você posicionar o cursor do mouse sobre o botão o label ficará visível mostrando seu micro help. E quando você estiver sobre o formulário este ficará invisível.
118 - Imprimindo Relatório do Access a partir do VB Enviado por: Mauro Sakamoto
Se vc está migrando do Access par o VB saiba que é possível aproveitar seus relatórios feitos em access. Para isso utilize os seguintes comandos
50
Dim ObjectAccess As Object
Set ObjectAccess = CreateObject("Access.Application")
With ObjectAccess
.OpenCurrentDatabase filepath:="File.mdb"
.Visible = True
.DoCmd.OpenReport ReportName:="Report File Name", View:=Access.acPreview
End With 'para visualizar
'E
With ObjectAccess
.OpenCurrentDatabase filepath:="File.mdb"
.DoCmd.OpenReport ReportName:="Report File Name"
End With 'para imprimir sem visualizar
119 - Utilizando o pkzip para fazer backup em vários disquetes Enviado por: Mauro Sakamoto
Muitas vezes devido ao grando tamanho de um banco de dados é complicado fazer seu backup para um disquete. Principalmente para usuários leigos. Para simplificar a operação podemos utilizar o pkzip (compactador de arquivos) e uma função chamada shell.
Então basta colocar os seguintes códigos na opção de backupDim X as variant
X=Shell("pkzip.exe a:\file.zip -& c:\path\file.mdb",0) 'executa o pkzip em janela oculta.
SendKeys "%{F4}", True 'fecha a janela
É possivel utilizar outros compactadores como arj ou outro qualquer
Para descompactar utilize o pkunzip:Dim X as variant
X=Shell("pkunzip.exe a:\file.zip c:\path",0) 'executa o pkunzip em janela oculta.
SendKeys "%{F4}", True 'fecha a janela
120 - Permitir apenas números numa caixa de texto (sem utilizar máscara de entrada) Enviado por: Mauro Sakamoto
Para permitir que apenas números sejam digitados em uma caixa de texto insira as seguintes linhas de código no evento KeyPress da caixa de texto.
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
KeyAscii = 0
Beep
End If
51
121 - Mudar a impressora em tempo de execução. Enviado por: Mauro Sakamoto
Para alterar em tempo de execução a impressora é preciso inserir o Controle Common Dialog.Em seguida insira o seguinte código:
CommonDialog1.ShowPrinter
122 - Limpar campos (caixa de texto) do formulário Enviado por: Mauro Sakamoto
Existe uma maneira bem simples e rápida de limpar todos os campos de um formulário de uma única vez.Para isso utiliza a seguinte sintaxe:
Dim i as integer
For i=1 to Form1.Controls.Count-1
If TypdeOf Form1.Controls(i) Is TextBox then 'verifica são caixa de texto
Form1.Controls(i).Text=""
end if
Next i
123 - Utilizando Grid para Simular DBGrid Enviado por: Mauro Sakamoto
Para quem é usuário do VB 3.0 e deseja utilizar um DBGrid para visualizar uma tabela ou uma consulta, isso pode ser feito utilizando-se um Grid.Primeiramente insira o controle Grid.Em seguida vá na prpriedade cols e escolha o número igual ao número de colunas que vc deseja exibir mais um.Agora vá até o evento Load de seu formulário e insira os códigos
Sub Form_Load()
Dim MyDB As DataBase
Dim MyTable As Table
Dim Linhas As integer 'Declaração de variáveis
Grid1.ColWidth(0) = 100 'formata o Grid
Grid1.ColWidth(1) = 3000
'e assim sucessivamente. Os valores são referentes a largura das colunas no Grid. Elas devem ser ajustadas conforme o tamanho do campo a ser exibido.
...
Grid1.ColWidth(N) = 3500 'última coluna
Grid1.Row=0
Grid1.Col=1 'seleciona a primeira linha e a segunda coluna.
52
Grid1.Text = "Campo1"
Grid1.Col=2 'seleciona a primeira linha e a terceira coluna.
Grid1.Text = "Campo2"
'e assim sucessivamente. Os são referentes ao nome dos campos da tabela.
...
Grid1.Col=N 'seleciona a primeira linha e a última coluna.
Grid1.Text = "CampoN"
Set MyDB=OpenDataBase("File.mdb")'abre o Banco de dados
Set MyTable=MyDB.OpenTable("TableName") 'abre a tabela a ser exibida
Linhas = 1 'seta o número de linhas (começa em zero)
MyTable.MoveFirst 'move para primeiro registro da tabela
Do Until MyTable.EOF 'enquanto não chegar ao final do arquivo, mostra registros no Grid
Grid1.Rows = Linhas 'incrementa o número de linhas do Grid
Grid1.Row=Linhas 'seleciona linha
Grid1.Col=1 ' seleciona coluna 1
If Not IsNull(MyTable("Campo1")) then
Grid1.Text=MyTable("Campo1")
Else
Grid1.Text=""
End if
Grid1.Col=2 'seleciona coluna 2
If Not IsNull(MyTable("Campo2")) then
Grid1.Text=MyTable("Campo2")
Else
Grid1.Text=""
End if
' e assim sucessivamente.
Grid1.Col=N 'ultima coluna
If Not IsNull(MyTable("CampoN")) then
Grid1.Text=MyTable("CampoN")
Else
Grid1.Text=""
End if
Linhas=Linhas+1
53
Loop
End Sub
124 - Selecionar registros conforme intervalo de datas digitadas em formulário Enviado por: Mauro Sakamoto
Suponha que vc queira fazer uma consulta que leve em conta todos os registros cujo a Data esteja entre uma Data Inicial e uma DataFinal. Escreva o seguinte código.
Dim MyDB As DataBase
Dim MyQuery As SnapShot
Dim MySQL As String 'Declaração de variáveis.
Set MyDB = OpenDatabase("File.mdb") 'Abre o Banco de Dados
MySQL= " SELECT * FROM [Tabela] "
MySQL= MySQL & " WHERE [Tabela].[Data] BETWEEN "
MySQL= MySQL & Chr(35) & Format(TxtDataInicial.Text,"mm/dd/yy") & Chr(35) & " AND " & Chr(35) & Format(TxtDataFinal.Text,"mm/dd/yy") & Chr(35)
Set MyQuery=MyDB.OpenCreateSnapShot(MySQL)
Supondo que TxtDataInicio="31/01/97" e TxtDataFinal="31/12/97" a Query ficará da seguinte maneira
SELECT * FROM [Tabela] WHERE [Tabela].[Data] BETWEEN #01/31/97# AND #12/31/97#
Obs:- Quando vc utliza campos do tido data é importante observar que a data é no formato mês-dia-ano, porisso é preciso utilizar a função format.
125 - Reparando Banco de Dados Corrompido Enviado por: Mauro Sakamoto
Para reparar o banco de dados quando ele está corrompido (erro que ocorre quando o micro é desligado por algum motivo no momento em que o banco de dados estava sendo acessado) deve utilizar a seguinte sintaxe:
If Err = 3224 Then 'verifica o número do erro
MsgBox "O Banco de Dados está corrompido ! Pressione Ok para Reparar", 16, "Opção"
DBEngine.RepairDatabase ("c:\path\file.mdb") 'repara o Banco de Dados
DBEngine.CompactDatabase "c:\path\file.mdb","c:\path\fileBack.mdb" 'compacta banco de dados e renomeia
Kill ("c:\path\file.mdb") 'apaga o BD antigo
Name "c:\path\fileBack.mdb" As "c:\path\file.mdb" 'renomeia o Banco de Dados
End if É importante compactar o banco de dados após repará-lo devido ao aumento de tamanho do mdb.
126 - Como fazer o mouse desaparecer do form Enviado por: Henrique Angelo
'declare em general:
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
'crie um botao para desativar o mouse:
54
Private Sub "nome do botao"_Click()
ShowCursor False
End Sub
'para aparecer o mouse crie um botão:
Private Sub "Nome do Botão"_Click()
While ShowCursor(True) < 0
Wend
End Sub
127 - Performance com a SQL Passthrough Enviado por: Henrique Angelo
Quando você acessa uma base dados via ODBC (Open Database Connectivity), os drivers ODBC atuarão como tradutores dos seus comandos SQL. A razão disto é que, existe uma linguagem SQL genérica (SQL ANSI) e dialetos SQL distintos nos vários produtos (linguagens e bancos) disponíveis no mercado. Assim, cada fornecedor de banco de dados poderá incluir recursos (como storned procedures) e sintaxes específicas em seus produtos; existem o SQL da Oracle, o SQL da Informix, o SQL da Sybase etc. Escrevendo seus comandos em SQL ANSI, o ODBC irá "interpretar", em tempo de execução, os comandos para a sintaxe SQL do banco que seu usuário acessa. Esta operação tem uma vantagem e uma desvantagem:
1) A vantagem é que um só aplicativo, a priori, poderá ser executado - sem alteração de fontes - em qualquer banco de dados Client Server, pelo padrão ODBC. Além da portabilidade de código fonte, existe o ganho em interoperabilidade: o programa poderá acessar, ao mesmo tempo, bases diferentes. A interoperabilidade é necessária em empresas, por exemplo, que passaram por processos de fusão ou incorporação com outra empresa (que usa outra "marca" de banco de dados).
2) Desvantagem: a "tradução" impacta consideravelmente na performance do sistema, o aplicativo (que pode estar rodando em uma grande rede) tornar-se-á muito mais lento.
A solução é pedir ao ODBC que "pule" a tradução que seria realizada pelos seus drivers. Assim, ganha-se tempo de execução. Veja este exemplo:
Dim VA_Cmd As String 'comando SQL
Dim snapCidade As Snapshop
Dim VA_Cod As Integer 'código da cidade (campo chave)
Const SQLPASSTRHOUGH = 64
'...
VA_Cmd = "Select Cidade, Nome from CIDADE where Cidade = " & VA_Cod
Set snapCidade = db.CreateSnapshop(VA_Cmd, SQLPASSTRHOUGH)A SQL Passthrough é o parâmetro para "pular" a tradução. No VB4, a constante chama-se dbSQLPassThrough.
O comando SQL passado deve estar na sintaxe específica do SGBD (ou DBMS) utilizado. Mesmo assim, o sistema poderá continuar como portável e interoperável, seguindo-se os passos abaixo (código parametrizado):
1) Programe todas as consultas em todos os dialetos SQL utilizados pelos seus usuários, escreva o código de um modo fácil de ser compreendido e alterado.
55
2) Execute a consulta específica do banco tal no momento tal. A informação de qual banco poderá estar em entradas de arquivos INI ou no Registry.
128 - Propriedade Count, de Control Array, não documentada Enviado por: Henrique Angelo
No VB4, cada control array (vetor de controles) é uma collection e possui uma propriedade Count. Isto não ocorre com o VB3. É possível, então, se criar um loop (laço de repetição) tendo o Count como valor máximo.Esta característica não aparece nem nos manuais, nem no help do VB4. Talvez, pelo fato de que uma control array collection não possui todas as propriedades e métodos das demais collections. A propriedade Count e o método Item são suportados, enquanto os métodos Add e Remove não o são.Este pequeno exemplo usa o Count para determinar qual elemento de um vetor de botões de opção foi selecionado.
Private Sub FindSelectedOption ( )
Dim ij As Integer As Integer
For ij = 0 to Option1.Count - 1
If Option(ij).Value Then
MsgBox str(ij),0, "Opção Selecionada"
End If
Next ij
End SubEsta rotina trabalha apenas com números contínuos. Se os elementos forem 0, 1, 3 e 4, ocorrerá um erro (run time error 340), ao se tentar fazer referência ao item 2.
129 - Solução para bug no DBGrid Enviado por: Henrique Angelo
Há um sério bug (erro) em VB4, no controle Databound Grid usado com forms modais. Por exemplo, crie três forms: form1, form2 e form3. Adicione um Command1 (botão) em cada form. No evento click do botão em form1, chame o form2 como modal. No evento click do botão em form2 chame o form3 como modal. Adicione um DBGrid no form3. No evento click do botão em form3, use unload form3.Execute o form1 e aperte nos referidos botões. No clique do terceiro botão, ocorre um erro de pilha (stack error) com o Visual Basic (tanto em 16 como em 32 bits). Rodando em Windows 3.1x, o sistema trava completamente.
Solução: não use DBGrid com forms modais. Se, entretanto, você precisar de um form modal, simule-o. Basta alterar a propriedade do form2 (o que chamou) para false. Você poderá criar uma property para fazer referência ao form que chamou.
With FormModal
.propCaller = Me
.Show
End WithAgora altere Caller.Enabled = false no evento Load do form "modal". Volte para true no evento Unload.
130 - Identificando uma unidade de CD em Rede Enviado por: Henrique Angelo
A API de 32 bits é bem mais rica que a de 16 bits. Entretanto, a função GetDriveType mostra os Drives CDs em Rede, apenas como DRIVE_REMOTE (de rede). Isto é uma verdade, mas não completa. Combine a chamada a GetDriveType com uma chamada a GetVolumeInformation para determinar se o drive é, ao mesmo tempo, de rede e CD.A chamada indica o sistema de arquivos: FAT, NTFS, HPFS ou CDFS (CD File System).
Declare Function GetVolumeInformation _
Lib "Kernel32" _
56
Alias "GetVolumeInformationA" _
(ByVal lPRootPathName as String _
ByVal lpVolumeNameBuffer As String _
ByVal nVolumeNameSize As Long _
ByVal lpVolumeSerialNumber As Long _
ByVal lpMaximumComponentLenght As Long _
ByVal lpFileSystemFlags As Long _
ByVal lpFileSystemNameSize As Long) _
As Long
'...
pstrRootPath = "E:\"
pstrVolName = Space$(256)
pstrSystemType = Space$(32)
plngSysTypeSize = Clng(Len(pstr(SystemType))
plnVolNameSize = Clng(Len(pstrVolName))
plngRtn = GetVolumeInformation _
(pstrRoothPath, pstrVolName, _
plngVolNameSize, plngVolSerialNum,
plngMaxFileNameLen, plngSysFlags, _
pstrSystemType, plngSysTypeSize)
131 - Prevenindo interação do usuário, via MousePointer e Enabled Enviado por: Henrique Angelo
Mudar a propriedade MousePointer do form não impede a ação do usuário, via mouse ou teclado, apenas altera o desenho do ponteiro.Para impedir que o usuário interaja com o sistema em algumas operações, desenvolvi esta dica, aplicável a MDI parent forms (janelas principais de interface múltipla) e seus MDI children forms (janelas filhas). Em alguns processos demorados (como carga de banco de dados) mude a propriedade enabled de um MDI child para false, assim:
'antes
Me.Enabled = False
Me.MousePointer = 11 'hourglass (ampulheta)
ExecutarProcessoDemorado
'depois
Me.Enabled = True
Me.MousePointer = 0 'padrãoNo caso de um MDI com muitos filhos ativos, crie uma Forms Collection e desative (enabled = false) cada form. Depois de desativá-los, use MDIForm.Hourglass = false.
132 - Ordenando Colunas da ListView Enviado por: Henrique Angelo
Dê ao seu controle ListView (32 bits) a funcionalidade de ordenação do Windows 95 Explorer. Este código ordena a lista por qualquer coluna. Se a lista já estiver ordenada por esta coluna, a ordem será invertida.
Private Sub ListView1_ColumnClick _
57
(ByBal ColumnHeader As ColumnHeader)
Whith ListView1
If (ColumnHeader.Index -1) = .SortKey Then
.SortOrder = (.SortOrder + 1) Mod 2
Else
.Sorted = False
.SortOrder = 0
.SortKey = ColumnHeader - 1
.Sorted = True
End IF
End With
End Sub
133 - Limpando Combos Read-Only Enviado por: Henrique Angelo
Numa ComboBox com a propriedade Style = 2 (dropdown list), a propriedade Text é somente-para-leitura. Isto impede limpeza e troca de conteúdo por esta propriedade, em construções como estas:
Combo1.text = "" 'ou
Combo1.text = "novo conteúdo"A solução é limpar a combo com o método clear e adicionar o valor novo.
Combo1.Clear
Combo1.AddItem "novo conteúdo "
134 - Inconsistência no caminho da aplicação (app.path) Enviado por: Henrique Angelo
Esteja atento quando usar a propriedade path (caminho) do objeto Application (App, aplicação). Se seu executável está rodando na raiz de um drive, App.Path retornará o nome (letra:) na unidade e uma barra (algo como C:\). Apareceu quando o executável está em um subdiretório, a barra final não é acrescentada (C:\SUBDIR). Para testar e acrescentar a barra, use o código abaixo que, retornará C:\SUBDIR\.
MyPath = App.Path
If Not Right(MyPath, 1) = Chr(92) then
'chr 92 = "\"
MyPath = MyPath & Chr(92)
End If
135 - Mantendo constantes Enviado por: Henrique Angelo
Melhore o uso do arquivo CONSTANT.TXT. Para um novo projeto, copie o arquivo CONSTANT.TXT para MYCONST.TXT (para o diretório do seu projeto). Inclua MYCONST.TXT no seu projeto (menu File à Add File). Substitua (menu Edit à Replace ou CTRL + R) todas as expressões Global por ' Global neste arquivo.Quando for necessária uma nova constante, basta verificar se a mesma já foi definida pela Microsoft e remover o a ' do comentário (reverter a substituição).
136 - Painel de Percentual com SQL Count
58
Enviado por: Henrique Angelo
Complementando a dica anterior: Em uma operação de consulta a um banco de dados (típica de desenvolvimento comercial), deveremos conhecer o tamanho do retorno da consulta. O número de linhas que irá retornar é calculado por um Select Count (instrução SQL para contador) igual ao Select que, posteriormente, será usado para a consulta. O Count é uma operação rápida, principalmente em bancos Client Server (onde o cálculo é executado no servidor). O retorno do Select Count é um número, contendo o total de linhas que seria trazido pela consulta. Com o Count, poderão ser impedidas consultas longas demais, por exemplo.Para o percentual, já temos o total. O "registro corrente" é obtido dentro do loop. No exemplo abaixo, carregamos um Grid simples com dados de uma tabela. Utilizamos as rotinas SU_Aguarde e SU_BarraPerc (explicadas nas dicas anteriores).
Sub SU_CarregarGrid ()
Dim VA_Cmd As String
Dim dynatemp As dynaset
Dim dynacont As dynaset
Dim VA_Cont, VA_Curr
Dim VA_SevErro
On Error GoTo Erro_Carregar_Grid
SU_Aguarde True, "Carregando tabela de cidades..."
'rotina acima explicada na DICA ANTERIOR
'... limpar o Grid
'... formatar TB_Cidade.text
'query
VA_Cmd = "Select * From CIDADE"
If Len(TB_Cidade.Text) > 0 Then
VA_Cmd = VA_Cmd + " Where CIDADE.Nome >= '" & (TB_Cidade.Text) & "' "
VA_Cmd = VA_Cmd + "And CIDADE.Nome <= '" & (TB_Cidade.Text) & Chr(255) & "' "
End If
Set dynatemp = db.CreateDynaset(VA_Cmd, VGl_SQLop)
'query do contador
VA_Cmd = "Select Count(*) From CIDADE"
If Len(TB_Cidade.Text) > 0 Then
VA_Cmd = VA_Cmd + " Where CIDADE.Nome >= '" & (TB_Cidade.Text) & "' "
VA_Cmd = VA_Cmd + "And CIDADE.Nome <= '" & (TB_Cidade.Text) & Chr(255) & "' "
End If
Set dynacont = db.CreateDynaset(VA_Cmd, VGl_SQLop)
If Not dynacont.EOF Then
VA_Cont = dynacont(0)
Else
VA_Cont = 0
End If If VA_Cont = 0 Then
59
MsgBox "Nenhum registro de cidade encontrado."
SU_Aguarde False, ""
Gr_Grid.Row = 1
'... marcar outra linha do grid
Exit Sub
End If 'carga do grid
Gr_Grid.Rows = VA_Cont + 1
VA_Curr = 1
Do While Not dynatemp.EOF
SU_BarraPerc CInt(VA_Curr * 100 / VA_Cont), False
'rotina explicada na DICA ANTERIOR
Gr_Grid.Row = VA_Curr
Gr_Grid.Col = 0
Gr_Grid.Text = dynatemp("CodCidade")
Gr_Grid.Col = 1
Gr_Grid.Text = dynatemp("NomeCidade")
Gr_Grid.Col = 2
Gr_Grid.Text = dynatemp("UF")
VA_Curr = VA_Curr + 1
dynatemp.MoveNext
Loop
'desliga a barra de percentual
SU_BarraPerc 100, false
'... demais lógicas
'... (tratamento de erro e formatações)
End Sub
Como esta rotina de carga de grid é enorme (e no VB4, o DBGrid faz isto sozinho), o código acima apenas mostra a formação do Select Count e a chamada a SU_BarraPerc.
____________
137 - Painel de Percentual Enviado por: Henrique Angelo
Para mostrar um percentual, é preciso conhecer o tempo (ou tamanho) total da operação e a que ponto se está em dado momento de um loop (laço de repetição). Num programa de instalação, por exemplo, se conhece o tamanho total dos arquivos (ou quantidade de arquivos) a serem instalados e qual o arquivo atual (no loop). Com isto, o usuário vê X% da instalação completa.Para usar um 3D Panel como barra de percentual, siga estes passos:
1) Insira um 3D Panel, com nome PA_Status, no MDIForm (aqui chamado de F00). Atribua Align = Alig Botton.
2) Insira em um módulo (.BAS) a rotina SU_BarraPerc.Sub SU_BarraPerc (Perc As Integer, Acum As Integer)
'recebe perc, um número de 0 a 100
60
'100 = "desliga" a barra
'Acum = boolean, acumula o anterior ou não (true/false)
Static VA_Vez
Static VA_SaveCor As Long
If Acum Then
Perc = Perc + F00.PA_Status.FloodPercent
End If
If Perc > 100 Or Perc < -1 Then
MsgBox "Perc deve estar entre -1 e 100", 16, "Erro de parâmetro _
em SU_BarraPerc"
Exit Sub
End If
If IsEmpty(VA_Vez) Or VA_Vez = 1 Then
'liga barra - altera o painel
F00.PA_Status.Caption = ""
F00.PA_Status.FloodShowPct = True
VA_SaveCor = F00.PA_Status.ForeColor
F00.PA_Status.ForeColor = RGB(0, 0, 0)'preto
F00.PA_Status.BevelOuter = 2 'raised
F00.PA_Status.BevelWidth = 3
F00.PA_Status.BorderWidth = 1
F00.PA_Status.FloodType = 1 'left to right
F00.PA_Status.FontSize = 9.75
End If
If Perc < 100 Then
If Perc > 48 Then
F00.PA_Status.ForeColor = RGB(255, 255, 255)'branco
End If
'mostra perc
F00.PA_Status.FloodPercent = Perc
VA_Vez = 2 'ou mais
Else
'desliga barra - reestrutura painel
F00.PA_Status.BevelOuter = 1 'inset
F00.PA_Status.BevelWidth = 1
F00.PA_Status.BorderWidth = 3
F00.PA_Status.FloodType = 0 'none
61
F00.PA_Status.FontSize = 8.25
F00.PA_Status.ForeColor = VA_SaveCor
F00.PA_Status.FloodShowPct = False
VA_Vez = 1
End If
End Sub
Para chamar a rotina, basta passar o valor atual do percentual. O segundo parâmetro, indicará se o percentual anterior será acumulado com este. No exemplo abaixo, a barra é preenchida de 10% em 10%.
'teste da barra de percentualDim i As Integer
For i = 1 To 10
SU_BarraPerc (i * 10), False
MsgBox "Clique em OK para continuar"
Next i
SU_BarraPerc (100), False 'desliga a barra
138 - Melhorando as declarações API (I) Enviado por: Henrique Angelo
Muitas rotinas API são declaradas como função, mas, o valor de retorno não é sempre utilizado. A função SendMessage, por exemplo, depende da mensagem enviada, não importando o valor de retorno. Outro exemplo é a função Shell (se o objetivo for chamar e não monitorar um programa externo, o retorno não será utilizado).
Ocorrem chamadas assim:
Dim dummy As Integer
dummy = SendMessage(Text1.hWnd, WM_PASTE, 0, 0&)A variável só foi necessária por causa da declaração. Uma alternativa, é declarar a função como Sub e usar um alias (apelido).Declare Sub SUB_SendMessage Lib "User" Alias "SendMessage" (byVal hWnd as _ Integer , byVal msg as Integer, byVal wParam as Any, byVal lParam As Any)Agora, chame pelo nome declarado e não pelo original:
SUB_SendMessage Text1.hWnd, WM_PASTE, 0, 0&Observe que, seu código ficou mais produtivo de ser mantido.
139 - GetModuleUsage em 32 bits Enviado por: Henrique Angelo
Encontrei uma solução para o problema, da API GetModuleUsage não trabalhar em VB4 a 32 bits. A TaskID retornada pela função Shell pode ser usada por AppActivate. Assim:
TaskID = Shell("DOSAPP.exe", vbNormalFocus)
On Error GoTo finished
While True
DoEvents
AppActivate TaskID
Wend
Finished:
62
On Error GoTo 0
140 - Ativando Num Lock por um código Enviado por: Henrique Angelo
Coloque isto nas declrações gerais de um módulo .BASPublic Const VK_NUMLOCK = &H90
Public Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
Public kbArray As KeyboardBytes
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
Public Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Public Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
No form adicione 3 botões (cmdToggle, cmdTurnOn, cmdTurnOff) e um label. Adicione o seguinte código no Form:Private Sub cmdToggle_Click()
GetKeyboardState kbArray
kbArray.kbByte(VK_NUMLOCK) = IIf(kbArray.kbByte(VK_NUMLOCK) = 1, 0, 1)
SetKeyboardState kbArray
End Sub
Private Sub cmdTurnOn_Click()
GetKeyboardState kbArray
kbArray.kbByte(VK_NUMLOCK) = 1
SetKeyboardState kbArray
End Sub
Private Sub cmdTurnOff_Click()
GetKeyboardState kbArray
kbArray.kbByte(VK_NUMLOCK) = 0
SetKeyboardState kbArray
End Sub
141 - Ativando Caps lock por um código Enviado por: Henrique Angelo
Coloque isto nas declarações gerais de um módulo .BASPublic Const VK_CAPITAL = &H14
Public Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
Public kbArray As KeyboardBytes
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
63
Public Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Public Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Em um form, coloque 3 command buttons (cmdToggle, cmdTurnOff, cmdTurnOff) e uma label. Coloque oo seguinte código no form:
Private Function CapsLock() As Integer
CapsLock = GetKeyState(VK_CAPITAL) And 1 = 1
End Function
Private Sub Form_Load()
If CapsLock() = 1 Then Label1 = "On" Else Label1 = "Off"
End Sub
Private Sub cmdToggle_Click()
GetKeyboardState kbArray
kbArray.kbByte(VK_CAPITAL) = IIf(kbArray.kbByte(VK_CAPITAL) = 1, 0, 1)
SetKeyboardState kbArray
Label1 = IIf(CapsLock() = 1, "On", "Off")
End Sub
Private Sub cmdTurnOn_Click()
GetKeyboardState kbArray
kbArray.kbByte(VK_CAPITAL) = 1
SetKeyboardState kbArray
Label1 = IIf(CapsLock() = 1, "On", "Off")
End Sub
Private Sub cmdTurnOff_Click()
GetKeyboardState kbArray
kbArray.kbByte(VK_CAPITAL) = 0
SetKeyboardState kbArray
Label1 = IIf(CapsLock() = 1, "On", "Off")
End Sub
142 - Já estou no ar? Enviado por: Henrique Angelo
Algumas aplicações para Windows podem ter várias instâncias, ou seja, podem ser executadas repetidas vezes ao mesmo tempo no mesmo computador. É o caso do Bloco de Notas, do Paint, da Calculadora e de outros. Existem programas cuja múltipla execução não é interessante, por questões de produtividade ao usuário (como o Word, o File Manager e o Excel) ou segurança (como aplicações que usam banco de dados). Os sistemas comerciais (de banco de dados), em geral, só podem ser executados em uma sessão ao mesmo tempo. O controle disto no VB é feito através do objeto App.
Dim SaveTitle as string
If App.PrevInstance Then
64
SaveTitle = App.Title
App.Title = "... segunda chamada ao mesmo programa."
Me.Caption = "... segunda chamada ao mesmo programa, serei fechado"
'se for a Sub Main, a linha acima, obviamente, não existe
'as linhas abaixo fecham a segunda chamada e alternam para
'a primeira
AppActivate SaveTitle
SendKeys "% R", True
End
End IfO código acima deve ser a primeira coisa a ser executada na sua aplicação. Assim, ao invés de abrir uma segunda sessão do programa, o Windows irá alternar para a sessão já aberta. Isto também pode ser feito por APIs (FindWindow, ShowWindow e SetFocus, da bilblioteca User), mas, tem o mesmo efeito e é mais trabalhoso.
143 - Menu Colar Alternativo Enviado por: Henrique Angelo
Se você usa alguns controles, como o QuickPack Pro (da Crescent), é impossível atribuir CTRL+V para Editar-Colar.
Pois, o texto do Clipboard será colado duas vezes. Para manter a tecla de atalho, atribua:
mnuPaste.caption = "Co&lar" + Chr$(9) + "Ctrl + V"
na Sub Main ou no form_Load.
144 - Listas erradas de API Enviado por: Henrique Angelo
Os utilitários APILOD16.EXE e APILOD32.EXE acessam o arquivo WIN32API para passar os parâmetros de tipos de dados (Type Declarations) necessários para chamar funções Win32 API. Porém existem erros. Por exemplo:WIN32API.TXT (incorretamente)diz:
Type COMSTAT
fCtsHold As Long 'errado
fDsrHold As Long 'errado
fRlsHold As Long 'errado
fXoffHold As Long 'errado
fXoffSnet As Long 'errado
fEof As Long 'errado
fTxim As Long 'errado
fReserved As Long 'errado
cbInQue As Long
cbOutQue As Long
End TypeWINT31APITXT, corretamente, diz:Type COMSTAT
bunch_Of_Bits As Long
cbInQue As Long
cbOutQue As Long
65
End Type
145 - Validando CGC e CPF Enviado por: Henrique Angelo
Essa é brasileiríssima. Os números de CGC e CPF possuem dígitos verificadores para... adivinhem ... verificar!Isto é obvio. A validação deve ser feita (por qualquer sistema decente) para impedir a digitação por engano e os CGCs e CPFs falsos ("que coisa feia, tentando passar a perna na gente"). A função abaixo não é de minha autoria, mas, achei no meu "baú" de código.
Function Fu_consistir_CgcCpf (Vl_CgcCpf As String) ' Esta Rotina Devolverá True Se o Cgc/Cpf Informado For valido' Para Chamar esta Rotina de Consistência' 1 ) Atribuir o valor do CgcCpf a uma Variavel String' 2 ) Chamar a Rotina com : Fu_consistir_CgcCpf (Variavel)' Uma Forma Simples de fazer a Consistencia
' é Copiando as linhas abaixo (exemplo)' para dentro do Programa' Dim Vl_CgcCpf As String' Vl_CgcCpf = Me.CgcCpf.Text' If Fu_consistir_CgcCpf(Vl_CgcCpf) = False then' MsgBox "( Cgc/Cpf Informado Não é um Cgc/Cpf Correto )"' Me.CgcCpf.SetFocus' Exit Sub' End if
Fu_consistir_CgcCpf = FalseDim VA_CgcCpf As StringStatic Numero(15) As IntegerDim VA_Resto As IntegerDim VA_Resultado As IntegerDim VA_SomaDigito10 As IntegerDim VA_resto1 As IntegerVA_CgcCpf = Format(Vl_CgcCpf, "@@@@@@@@@@@@@@")VA_Digito = Mid(VA_CgcCpf, 13, 2)Numero(1) = Val(Mid(VA_CgcCpf, 1, 1))Numero(2) = Val(Mid(VA_CgcCpf, 2, 1))Numero(3) = Val(Mid(VA_CgcCpf, 3, 1))Numero(4) = Val(Mid(VA_CgcCpf, 4, 1))Numero(5) = Val(Mid(VA_CgcCpf, 5, 1))Numero(6) = Val(Mid(VA_CgcCpf, 6, 1))Numero(7) = Val(Mid(VA_CgcCpf, 7, 1))Numero(8) = Val(Mid(VA_CgcCpf, 8, 1))Numero(9) = Val(Mid(VA_CgcCpf, 9, 1))Numero(10) = Val(Mid(VA_CgcCpf, 10, 1))Numero(11) = Val(Mid(VA_CgcCpf, 11, 1))Numero(12) = Val(Mid(VA_CgcCpf, 12, 1))Numero(13) = Val(Mid(VA_CgcCpf, 13, 1))Numero(14) = Val(Mid(VA_CgcCpf, 14, 1))If Len(Trim(Vl_CgcCpf)) > 11 Then ' CgcVA_Resultado = Numero(1) * 2If VA_Resultado > 9 ThenVA_SomaDigito10 = VA_Resultado + 1ElseVA_SomaDigito10 = VA_ResultadoEnd IfVA_Resultado = Numero(3) * 2If VA_Resultado > 9 ThenVA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1ElseVA_SomaDigito10 = VA_SomaDigito10 + VA_ResultadoEnd IfVA_Resultado = Numero(5) * 2If VA_Resultado > 9 ThenVA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1ElseVA_SomaDigito10 = VA_SomaDigito10 + VA_ResultadoEnd IfVA_Resultado = Numero(7) * 2If VA_Resultado > 9 ThenVA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1
66
ElseVA_SomaDigito10 = VA_SomaDigito10 + VA_ResultadoEnd IfVA_SomaDigito10 = VA_SomaDigito10 + Numero(2) + Numero(4) + Numero(6)If Mid(Str(VA_SomaDigito10), Len(Str(VA_SomaDigito10)), 1) = "0" ThenVA_Resto = 0ElseVA_Resto = 10 - Val(Mid(Str(VA_SomaDigito10), _
Len(Str(VA_SomaDigito10)), 1))End IfIf VA_Resto <> Numero(8) ThenExit FunctionEnd IfVA_Resultado = (Numero(1) * 5) + (Numero(2) * 4) _
+ (Numero(3) * 3) + (Numero(4) * 2) _+ (Numero(5) * 9) + (Numero(6) * 8) + _(Numero(7) * 7) + (Numero(8) * 6) + _(Numero(9) * 5) + (Numero(10) * 4) + _(Numero(11) * 3) + (Numero(12) * 2)
' Atribui para resto o resto da divisão' de VA_resultado dividido por 11VA_Resto = VA_Resultado Mod 11If VA_Resto < 2 Then
VA_resto1 = 0ElseVA_resto1 = 11 - VA_RestoEnd IfIf VA_resto1 <> Numero(13) ThenExit FunctionEnd IfVA_Resultado = (Numero(1) * 6) + _
(Numero(2) * 5) + (Numero(3) * 4) + _(Numero(4) * 3) + (Numero(5) * 2) + _(Numero(6) * 9) + (Numero(7) * 8) + _(Numero(8) * 7) + (Numero(9) * 6) + _(Numero(10) * 5) + (Numero(11) * 4) + _(Numero(12) * 3) + (Numero(13) * 2)
' Atribui para resto o resto da divisão' de VA_resultado dividido por 11VA_Resto = VA_Resultado Mod 11
If VA_Resto < 2 ThenVA_resto1 = 0ElseVA_resto1 = 11 - VA_RestoEnd IfIf VA_resto1 <> Numero(14) ThenExit FunctionEnd IfElse ' CpfVA_Resultado = (Numero(4) * 1) + _
(Numero(5) * 2) + (Numero(6) * 3) _+ (Numero(7) * 4) + (Numero(8) * 5) _+ (Numero(9) * 6) + (Numero(10) * 7)_+ (Numero(11) * 8) + (Numero(12) * 9)
VA_Resto = VA_Resultado Mod 11If VA_Resto > 9 ThenVA_resto1 = VA_Resto - 10ElseVA_resto1 = VA_RestoEnd IfIf VA_resto1 <> Numero(13) ThenExit FunctionEnd IfVA_Resultado = (Numero(5) * 1) _
+ (Numero(6) * 2) + (Numero(7) * 3) _+ (Numero(8) * 4) + (Numero(9) * 5) + _(Numero(10) * 6) + (Numero(11) * 7) + _(Numero(12) * 8) + (VA_Resto * 9)
VA_Resto = VA_Resultado Mod 11If VA_Resto > 9 ThenVA_resto1 = VA_Resto - 10ElseVA_resto1 = VA_RestoEnd If
67
If VA_resto1 <> Numero(14) ThenExit FunctionEnd IfEnd If
Fu_consistir_CgcCpf = TrueEnd Function
146 - Problemas com o Print Enviado por: Henrique Angelo
O código abaixo funciona em VB3:Cls
Print Spc(10); "Informe seu nome:";
currentX = 0
currentY = currentY +1
Print Spc(10); "Informe seu nome:";Este código falha em VB4. Retirando o último ponto-e-vírgula do primeiro print:
Print Spc(10); "Informe seu nome:"Acrescente Debug. antes de Print para testar:Cls
Debug.Print Spc(10); "Informe seu nome:"
currentX = 0
currentY = currentY +1
Debug.Print Spc(10); "Informe seu nome:";
Ou mude o comando para:
Print Space(10); "Informe seu nome:";
147 - Desmarcar todos os itens de uma lista Enviado por: Henrique Angelo
Uma forma rápida de retirar qualquer seleção de uma listbox é:list1.selected (-1) = False
Isto não funciona em VB4.
148 - Pinte meu mundo ... nas cores padrão! Enviado por: Henrique Angelo
Apenas após executar o último "make EXE", troque seu esquema de cores e veja quantos fundos de cores você possui fora do padrão (escolhido pelo usuário final, via Painel de Controle). Infelizmente, muitos controles customizados (VBX/OCX) pecam neste detalhe importante.Através do Painel de Controle, tente o esquema "deserto" no Windows 95, ou "verão" no Windows 3.1x, ou ainda, crie um outro esquema horroroso. Isto o ajudará a testar suas aplicações de cores.
O VB4 dispõe de 24 cores de sistema como constantes. No VB Help, procure por "Color Constants" ou "VBTranslateColor". Copie o valor hexadecimal para a propriedade de cor de seu objeto se ele foi erroneamente redefinido (fora do padrão). Também é possível copiar os valores de controles que estejam corretos, mas cuidado, a face do botão por exemplo, pode não ser cinza.Por Clint Walker*
Na nova paleta de cores do VB4, há um botão Default, que altera as cores do objeto selecionado para o padrão do Windows. Verifique se a propriedade Appearance é 3D para obter melhores resultados.
Notas do Fórum Access (Charles A. Müller): 1) É uma regrinha antiga. Nunca mude as cores que, o usuário, que é o cliente, define externamente (no Windows), a menos que isto traga utilidade. Nestes casos, esteja atento para o significado das cores e sua harmonia (afinal, penteadeiras de camarim na tela não são desejáveis). 2) No VB3, existem 19 cores de sistema nas constantes de CONSTANT.TXT. 3) Observamos (no CCE e VBA) que o VB5 terá, em sua paleta
68
de cores, uma lista de alteração automática para as cores padrão (além do botão default).
149 - Brancos no controle Masked Edit Box Enviado por: Henrique Angelo
O controle MS Masked Edit apenas aceita entrada de dados dentro da máscara formatada (mask). Isto impede o programador de limpar a text do controle diretamente (masked1.text = ""), pois, o caracter espaço (ou nulo) pode não se encaixar no formato da máscara. Por exemplo, algumas possuem o formato # (aceitam somente números). Logo, o "" não seria aceito. Este problema é resolvido por este código:
vTemp = masked1.mask
masked1.mask = ""
masked1.text = ""
masked.mask = vTempRemovendo a máscara é possível limpar o texto. Depois, basta devolver a máscara original ao controle. Uso isto no evento Data1_ValidationError quando adiciono um novo registro.
150 - Piscar ou não piscar Enviado por: Henrique Angelo
Geralmente, ao criar uma ajuda de barra de situação (status bar help), você irá adicionar código no evento MouseMove de controles e forms. A barra de status poderá ser uma picture box com um label, um controle statusbar (VB4-32 bits) ou - como mais usado - um painel 3D. O problema é que o mouse se movimenta várias vezes no mesmo controle, fazendo a barra de status "piscar". Para resolver este problema, basta verificar se a frase atual é diferente da frase nova. Criamos ainda uma função que controla a barra de status.
Global Const CG_EXPLICAPADRAO = "Pressione F1 para obter ajuda."
'...
Sub SU_Explica (oque As String)
'rotina em VB3, usa um painel 3D
oque = Trim(oque)
If oque = "" Then oque = CG_EXPLICAPADRAO
If Len(oque) > 1 And Right$(oque, 1) <> "." Then
oque = oque & "." 'acrescenta ponto final
End If
'muda a inicial para maiúscula
If Len(oque) > 1 Then
oque = UCase(Left(oque, 1)) & Right(oque, Len(oque) - 1)
Else
oque = UCase(oque)
End If
'altera a barra se o novo conteúdo for diferente
If MainForm.PA_Status.Caption <> oque Then
MainForm.PA_Status.FloodShowPct = False
MainForm.PA_Status.FloodType = 0
MainForm.PA_Status.Caption = oque
End If
End Sub
69
A função usa uma constante (CG_EXPLICAPADRAO) que, contém uma frase genérica, para quando não houver o que explicar sobre um form ou objeto.
Para chamar a função:Sub CmdOK_MouseMove(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
SU_Explica "Grava as alterações no banco de dados."
End SubPode ser utilizado também o evento GotFocus (para resposta ao teclado). Neste caso, o LostFocus deverá limpar a barra de status (como a frase genérica).
Sub txtNome_LostFocus ( )
SU_Emplica ""
End Sub
151 - F1 e o Help de Contexto Enviado por: Henrique Angelo
As aplicações Windows acessam Help (ajuda) diretamente através do pressionamento da tecla F1. Muitas porém, utilizam menus (?à Conteúdo) ou botões (Ajuda). Nestes casos deve aparecer a página de ajuda indicada na propriedade HelpContextID do form ou controle. A solução ao programador pode ser o uso de API, com a função WinHelp, na biblioteca User (como sugere o exemplo SAMPLES\ICONWRKS). Uma forma mais simples, é simular o pressionamento de F1:
Sub AjudaConteudo_Click ()
SendKeys "{F1}"
End Sub
152 - Onde está o fim? Enviado por: Henrique Angelo
Uma aplicação do Visual Basic pode ser encerrada de várias formas: 1) com o fechamento (unload) do form principal. 2) com o comando Stop (apenas como interrupção na depuração). 3) com o comando End. Este último, fecha todos os arquivos e limpa todas as variáveis. O problema do End é que esta palavra faz parte de outros comandos como End Sub e End If (fechamento de blocos). Imagine se você precisar depurar um programa para descobrir quais os pontos em que ele é encerrado, como diferenciar o End "puro" dos outros? Basta chamar sempre uma função pública (codificada em um .BAS) que "substituirá" o End. Somente esta função terá End, facilitando o controle do código.
Public Sub SU_AbortaSis
End 'único local para o End
End Sub
Private Sub Form_Unload (Cancel As Integer)
...
SU_GravaConfiguracoes
SU_AbortaSis
End Sub
153 - Capturando parâmetros Enviado por: Henrique Angelo
Todos se recordam das velhas linhas de comando nos programas DOS: dir /s, pkunzip -v, del /p, mysys /?, myeditor myfile.txt entre outros. Com estes recursos, os programas já sabiam o que fazer ao serem chamados. No Windows,
70
este recurso ainda é utilizado, principalmente quando se deseja automatizar tarefas. O próprio Registry do Windows passa os devidos parâmetros ao executar uma aplicação associada a um tipo de arquivo. Assim, aplicativos da linha Office podem ser disparados para abertura e impressão de arquivos ou execução de macros. Para "capturar" a linha de comando com os parâmetros de um executável em VB, basta utilizar a função Command:
Select Case UCase(Trim(Command$))
Case "/A"
frmAvanc.Show 'usuários avançados
Case "/M"
frmMedios.Show 'usuários médios
Case Else
frmBasico.Show 'default, usuários novatos
End Select
154 - Sub Main, iniciando um projeto sem interface Enviado por: Henrique Angelo
Sub Main, iniciando um projeto sem interface
Nem sempre é necessário ou útil que um sistema (projeto VB) inicie com uma janela (form). Uma alternativa, nem sempre utilizada, é o de iniciar o projeto executando uma rotina sem form. Alguns exemplos:
1) Processo de inicialização muito longo, com abertura de banco de dados, testes para verificar se o sistema pode ou não ser inicializado, leitura de Registry ou arquivos INI, etc.
2) Quando o sistema rodará em "background", ou seja, em segundo plano. Este sistema não terá janelas (forms) para interação com o usuário.
No Visual Basic, o recurso é bastante simples. Primeiro, se informa ao VB que o projeto iniciará com uma Sub Main (esta informação é passada nas opções de projeto - Options à Project à Start Up Form = Sub Main.) Depois, basta incluir em um dos módulos de código (.BAS), uma rotina com este nome.
Sub Main
'rotinas de inicialização e leitura de opções
'logon, abertura de banco de dados e restante da inicialização
'mostra o primeiro form
form1.show
End Sub
155 - Descarregando DLLs fora de controle Enviado por: Henrique Angelo
Quando uso VB em Windows 95, às vezes ocorre que, um programa torne o sistema operacional instável. Costumava derrubar o Windows 95 e reiniciar para limpar a memória de todos os VBXs e DLLs. Mas descobri, recentemente, uma forma mais prática:
Criei um arquivo DOS Batch chamado RESTART.BAT, no seu disco rígido, com este conteúdo:
EXIT
No Windows 95, criei um atalho para este BAT. O modo DOS é selecionado, nas propriedades, como Program / Advanced. Este caminho é muito mais rápido que um reboot.
Por Michael J. Dyer
156 - Evitando Erros de Atualização em Bases Access Enviado por: Henrique Angelo
Evite o erro de acesso 3260 ("Couldn't update; currently record is locked by user '' on machine ''"), que ocorre quando
71
duas ou mais aplicações acessam a mesma tabela de uma base de dados Access (Jet). O acesso é realizado por objetos recordset (como table ou dynaset), sobre uma tabela que contenha uma chave (primária ou não).Se uma das aplicações está ociosa (apenas abriu o registro e ainda não o alterou) e outra aplicação tenta alterar ou adicionar dados, o erro citado ocorre. Para evitar este problema, inclua o método Idle dbFreeLOcks após o recordset ser aberto. Se for um table recordset, inclua-o após ter definido a propriedade Index. Veja um exemplo:
Set db = Workspaces(0).Opendatabase("Test.mdb")
Set TB = Db.OpenRecordSet("Customer_Master", dbOpenTable)
TB.Index = "PrimaryKey"
DB.Engine.Idle (dbFreeLocks)
157 - O desafio de criar Add-ins Enviado por: Henrique Angelo
Escrever add-ins (recursos adicionais) para o VB4 pode ser desafiador, recompensador e melindroso. Se você não tomar cuidado, o VB poderá "estranhar" algumas coisas e abortar. Podem aparecer várias mensagens, dependendo do sistema operacional. As mensagens são diversas, mas o resultado é o mesmo.Por exemplo, no Windows 95, aparecem mensagens como "Este programa causou um erro e vai ser encerrado" ou "se o problema persistir, contate o fornecedor". No Windows 3.1x, podem ser causados GPFs.Este erros ocorrem quando a IDE está sendo descarregada (unloaded) e será executada numa posterior abertura do VB com o aviso "xxxxx add-in could not be loaded, do you want to remove it from the list of add-ins?"Após isto, você terá que executar novamente o add-in para registrá-lo como relacionado ao VB. Vejamos dois casos destes erros:
1) Referenciando uma propriedade da VBIDE Instance Object, como AcitveProject.FileName no evento ConnectAddin da Conector Class.
2) Conectando mais menus ou submenus que você desconectou.Programação é, predominantemente, uma ciência exata e muitas "regras não documentadas" são uma real necessidade ao se criar um add-in.
158 - Usando o CHR() para ocultar "mensagens" Enviado por: Gerson Keiti Motoyama
Para quem não sabe, infelizmente, é possível "espiar", ou até mesmo "alterar" o código de um executável (somente as "mensagens"), seja ele compilado pelo VB, ou em qualquer outra linguagem, por um usuário de nível intermediário. Para que isso não ocorra, ou pelo menos para dificultar alguma alteração, quando quiser escrever uma mensagem, por exemplo do tipo:msgbox "Olá, blz?"
Utilizando o sintaxe: Chr(charcode), faça o seguinte:msgbox chr(79) & chr(108) & chr(225) & chr(44) & chr(160) & chr(98) & chr(108) & chr(122) & chr(63)
Obs: Consulte os valores para o charcode no Help do VB:
Character Set (0-127)/(128-255)
159 - Determinando se um objeto foi definido (Set) Enviado por: Henrique Angelo
VB4 providencia uma série de novas capacidades de uso de objetos. Porém, um objeto deve ser "setado" (definido) antes de ser referenciado. A única forma de verificar se um objeto já foi definido é através do código de erro (91).Por exemplo:
Public Function IsSomething (ob As Object) As Long
Dim J as Long
Err.Clear
On Error Resume Next
72
If TypeOf ob Is TextBox Then
J = 1
End If
Select Case Err.Number
Case 91
'error 91 = object not set
IsSomethig = false
Case 0
IsSomething = true
Case Else
'... outro erro ocorreu
End Select
On Error GoTo 0
End Function
160 - Depure simultaneamente o servidor OLE e a aplicação Enviado por: Henrique Angelo
O VB4 não apenas permite a criação de servidores OLE, mas, também permite depurar (debug) o servidor e a aplicação cliente ao mesmo tempo. Se você criar um servidor OLE remoto, altere a propriedade Instancing para Creatable SingleUse. Isto tornará o debugging muito mais interessante.
Cada vez que a classe for chamada, a aplicação tentará criar outra instância do servidor. O servidor estará rodando em tempo de desenho, e o VB não iniciará outra cópia de si mesmo para carregar o servidor novamente. A solução, é, temporariamente, definir Instancing = Creatable MultiUse para uso nos testes. Não se esqueça de voltar para Creatable SingleUse antes de compilar o servidor OLE.
161 - Passe nothing aos forms com cautela Enviado por: Henrique Angelo
É uma boa idéia passar o valor nothing a variáveis de form para recuperar memória alocada pelo módulo. Executando este recurso para um form já carregado, entretanto, irá colocar o módulo em um estado confuso. Veja:
Form2.show
Set Form2 = nothing
Form2.show
MsbBox forms.count & " forms carregados"
Unload Form2
Unload Form2A segunda linha do código tornou form2 nothing, mas o segundo use do form2.show irá mostrar uma segunda instância do form2. A Forms Collection irá conhecer as duas instâncias, mas apenas uma será descarregada (Unload Form2).
Para contornar este problema, em VB4, esteja certo que o form está descarregado. Não é possível executar Set Me = Nothing. Mas, com a estrutura For Each (não existente no VB3) é possível se conseguir o Nothing, no evento Form_Unload.
Private Sub Form_Unload (Cancel As Integer)
Dim Form As Form
For Each Form In Forms
If Form Is Me Then
73
Set Form = Nothing
Exit For
End If
Next Form
End Sub
162 - Adicionando segurança a uma base de dados Jet Enviado por: Henrique Angelo
Para dar segurança a uma base de dados Jet (.MDB), versão 2.5 (Access 2/VB3/VB4-16 bit) ou versão 3.0 (Access 7/VB4-32 bit), siga estes passos:
1) Use o Access Workgroup Administrator para criar um novo grupo de trabalho, com uma não nula Workgroup ID.
2) Inicie o Access e altere a senha para o usuário default Admin.
3) Crie um novo usuário, adicione-o no grupo de Administração, com os privilégios de administrador. Remova a conta Admin do grupo de administradores.
4) Reinicie o Access, conectando-se como novo usuário, e altere a senha.
5) Execute o Access Security Wizard (para o Access 2, copie de www.microsoft.com/accdev).
6) Crie o(s) usuários e o(s) grupo(s) de usuário, definindo seus privilégios.
7) Não defina nenhuma permissão para o Admin.
163 - Eliminando o IF quando possível Enviado por: Henrique Angelo
Se você atribui true ou false para uma variável (ou propriedade), após testar certas condições, poderia fazê-lo sem o IF. Veja:
If (age > 18 and sex = "M") and (NecessitaSeContigente = true ) Then ServicoMilitar = truePode substituir por:
ServicoMilitar = (age > 18 and sex = "M") and (NecessitaSeContigente)Outro exemplo:
IF (age > 25 and Category = "M1") or (age > 35 and Category = "C1") or _
(Age > 45 and Category = "P1") then ExecuteDemissaoPoderia ser:
Dim condicao as Integer 'boolean
condição = (age > 25 and Category = "M1") or (age > 35 and Category = "C1")_ or (Age > 45 and Category = "P1")
If condicao Then ExecuteDemissao
164 - Simplificando a condição de um IF Enviado por: Henrique Angelo
Quando você escreve um comando IF (Se) assim:If Category = "CM" or Category = "M2" or Category = "P1" or Category = "ZZ" then
ProcesseEmpregado
End IfPoderia simplificar para:
Dim ValidValues as string
ValidValues = "CM M2 P1 ZZ"
If (InStr(1, ValidValues, Category)) > 0 then
74
ProcesseEmpregado
End IfIsto torna o código mais rápido e mais fácil de ser entendido. Note que separei os valores com " " para não aparecerem strings como "CMM2P1ZZ"; você poderá utilizar espaços ou outros separadores como vírgulas, ponto-e-vírgulas etc.Por Jaspreet Singh*Notas de Redação (Charles A. Müller):1) Este teste ainda aceitará "C", " P", "2 P" e outras expressões inválidas, por conterem o separador ou terem tamanho inválido. Para corrigir esta falha, basta usar espaço (apenas) como separador e testar o tamanho da categoria.
Category = trim(Category)
If (InStr(1, ValidValues, Category)) > 0 and Len(Category) = 2 Then
'...2) Este truque pode ser usado para várias validações, como ValidValues = "abcdefghijlmnopqrstuvxz".3) Outra forma, ainda mais fácil, é criar um pequeno Select Case, separando os valores válidos por vírgulas:
Select Case Category
Case "CM", "M2", "P1", "ZZ"
ProcesseEmpregado
End Select
165 - TAB automático para o próximo campo Enviado por: Henrique Angelo
Esta dica é útil para desenvolvimento de aplicações VB com a forma de edição de terminais 3270 (IBM Mainframe). Quando o usuário termina de preencher um campo em um terminal 3270, o foco é imediatamente transmitido para o próximo campo.
Sub Text1.KeyUp (keycode as integer, shift as integer)
If keycode > 47 and keycode < 123 then
If Len(Me.ActiveControl.Text) = (Me.ActiveControl.MaxLenght) then
Sendkeys "{TAB}"
End If
End If
End Sub
166 - Onde está o Beep? Enviado por: Henrique Angelo
Este código elimina o beep quando se tecla ENTER ou TAB em uma text box que atingiu seu número máximo de caracteres.
Sub Form_KeyPress (keyascii as integer)
If KeyAscii = 13 or KeyAscii = 9 Then
KeyAscii = 0
End If
End Sub
167 - Use o Code Profiler para depuração (debug) Enviado por: Henrique Angelo
Algumas vezes, um erro de execução se manifesta apenas após a criação de um EXE e não em tempo de debug. O add-in Code Profiler poderá ajudá-lo.
75
1) Faça uma cópia do seu fonte.
2) Selecione o add-in Code Profiler.
3) Selecione o(s) arquivo(s) de código a serem analisados.
4) Selecione a opção Line Hit Count.
5) Selecione o botão Add Profiler Code.
6) Compile (make EXE) o programa (MYAPP.EXE).
7) Execute o seu código com erro.
8) Volte ao Code Profiler e selecione View Results no menu File.
Veja a última linha que foi executada ao ocorrer o erro. Você terá que executar seu código em modo debug enquanto olha os resultados do Code Profiler.
168 - Otimizando consultas no Jet 3 Enviado por: Henrique Angelo
Se você precisa analisar a performance de uma query (consulta) no Jet Engine 3.0 (banco .MDB), através de um plano de execução de consultas, você deve adicionar esta chave de Registry e executá-la no RegEdit.\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.0\Engines\DebugPara a nova chave Debug, adicione o nome JETSHOWPLAN (tudo maiúsculo) e valor ON. O Jet irá gerar um arquivo chamado SHOWPLAN.OUT, que irá mostrar planos de execução de queries associados com sua aplicação. Como estes arquivos podem se tornar muito grandes rapidamente, não se esqueça de alterar o valor para OFF ao terminar.Queries e bases de dados bem definidas irão gerar planos que, indicarão o uso de índices e/ou a tecnologia Rushmore. Bases e consultas mal definidas exibem apenas uma leitura de tabela.
169 - Identificando um controle genérico Enviado por: Henrique Angelo
Quando uma rotina pode trabalhar com muitos tipos de controles diferentes, a função TypeOF pode detectar o tipo de controle em tempo de execução:
Function MyFunc (ctl as Control)
If TypeOf ctl Is TextBox Then
'...
ElseIf TypeOf ctl Is CommandButton Then
'...
'...
End If
End FunctionEste código funciona em VB3 e VB4. A diferença é que no VB4, além de controles e forms, qualquer objeto válido pode ser identificado. O VB4 adiciona ainda, a função TypeName que indica (numa string) o nome da classe do objeto:Function MyFunc (ctl as Control)
Dim sClassType As String
'typeName é novidade do VB4
sClassType = TypeName(ctl)
Select Case sClassType
Case "TextBox"
'...
Case "CommandButton"
76
'...
'case ...
End Select
End FunctionOs nomes das classes de controle, no ambiente do VB, aparecem na Properties Window (janela de propriedades, ao lado do nome do controle).
170 - Determinando a classe de qualquer objeto Enviado por: Henrique Angelo
No VB4, o comando TypeOf trabalha com qualquer objeto válido. Exemplo:'Esta rotina imprime informações específicas de objetos
Public Sub PrintObjectInfo (YourObject As Object)
If TypeOf YourObject Is CDesk then
Print "Object Type: Mesa"
Print "Número de pernas: " & YourObject.NumberOfLegs
ElseIf TypeOf YourObject Is CHouse Then
Print "Object Type: Casa"
Print "Número de portas: " & YourObject.NumberOfDoors
End If
'impressão das propriedades de mesmo nome
Print "Data de Venda: " & YourObject.Date
Print "Preço de Venda: " & YourObject.Price
'...
End Sub
171 - Conversão de Nulos Enviado por: Henrique Angelo
Em consultas a bancos de dados, o retorno de uma variável, quando nula, poderá não ser 0 (numérico) ou "" (string). Geralmente se resolve assim:
If Not IsNull(myrecordset.myfield) Then
myvar = myrecordset.myfield
Else
myvar = ""
'myvar = 0, no caso de numéricos
End IfUma forma mais simples é-
myvar = "" & myrecordset.myfield
Ou
myvar = val(0 & myrecordset.myfield) ' para numéricos
172 - Uma história de três beeps Enviado por: Henrique Angelo
Seus programas não estão executando instruções em VB4 como executavam em VB3? Tente isto , em Qbasic, VB3 e VB4.
77
BEEP: BEEP: BEEPAo depurar com passo (F8), este mui complexo código, você irá ouvir três Beeps, exceto no VB4. No VB4, palavras reservadas seguidas de dois pontos (:) são consideradas labels (rótulos de desvio).
Assim funciona:
Beep
Beep
Beep
E você ouvirá os tão esperados três beeps.
173 - Lembra-se do SWAP? Enviado por: Henrique Angelo
Fiquei surpreso quando notei que no Visual Basic, o comando SWAP do Qbasic não havia sido implementado. Na rotina abaixo, que usei para ordenar um arquivo, o SWAP é simulado com strings, mas funciona com outros tipos de dado.
Private Sub Form_Load( )
Dim a,b As String * 4
Dim c As String * 4 ' variável para alternação (Swap)
a = "João"
b = "Francisco"
Debug.Print "Antes do swap: " & a & " " & b
c = a
a = b
b = c
Debug.Print "Após o swap: " & a & " " & b
End Sub
174 - Posicionando uma Common Dialog Enviado por: Henrique Angelo
Ficou triste ao ler a documentação do VB, que dizia "Note: you cannot specify where a common dialog is displayed" (você não poderá especificar onde é mostrada uma common dialog)? Então tente isto:
Inicie um novo form (que será usado apenas para isto) em vez de chamar a abertura do diálogo diretamente do form principal.
(FrmDummy_OpenSaveAs.Hide)
Defina as propriedades Left e Top conforme desejar e inicie a common dialog deste form. No Windows 95 (VB 4-32 bits) , a common dialog irá aparecer na posição do form que a chamou. Como o form hide (oculto), isto é imperceptível para o usuário.
176 - Criando senhas para banco de dados Enviado por: Henrique Angelo
O Jet Engine 3 (exclusivo32 bits) inclui um novo sistema de segurança baseado em senhas de BD mais complexas e mais seguras que o antigo modelo de grupos. Este sistema disponibiliza uma senha para abertura da base de dados . Este sistema é mais simples de ser utilizado mas é facilmente comprometido, pois, todos os usuários possuem a mesma senha. Entretanto, você poderá usar tanto o recurso de DB Password (senha de BD) como o de workgroup (grupos), ao mesmo tempo (isto é, que dará mais segurança).Manipule uma DB Password no VB, usando o novo método NewPassword (database object), com códigos como este:
Dim wrk As Workspace
Dim db As Database
Set wrk = DBEngine. Workspace(0)
78
Set db = wrk.OpenDatabase("MYDB.MDB",true)
'note que a base deve ser aberta como exclusiva
'alterando a senha atual (em branco) para "NewPass"
db.NewPassword "","NewPass
177 - Simplificando chamadas API através de funções próprias Enviado por: Henrique Angelo
Algumas chamadas à função API (DLL) são bastante complexas. Uma dica é criar uma função de código VB que chama a API. Assim, a complexidade da API só irá aparecer uma vez.
Por exemplo, a função GetPrivateProfileString que, captura uma configuração de arquivo INI.Declare Function GetPrivateProfileString Lib "Kernel" (ByVal _
lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault _
As String, ByVal lpReturnedString As String, ByVal nSize As Integer, _
ByVal lpFileName As String) As IntegerA chamada da função ficaria assim:
Global Const Ini_File = App.path & "\Myapp.INI)
'...
Dim VA_LastUser
'chamada a API para capturar o conteúdo de "lastuser" na seção "options"
On Error GoTo Erro_INI
Dim VL_Sec As String, VL_Key As String, VL_Size As Integer
Dim VL_Return As String, VL_FileName As String
Dim VL_SizeHandle As Integer, VL_Valid As Integer
Dim Va_Msg As String
Const CL_Default = "" 'retorno no caso de não encontrar
VL_Sec = "options"
VL_Key = "lastuser"
VL_Size = 30
VL_Return = Space$(VL_Size) 'string a retornar
VL_SizeHandle = Len(VL_Return) 'tamanho da string de retorno
VL_FileName = Ini_File 'arquivo no formato INI
VL_Valid = GetPrivateProfileString(VL_Sec, VL_Key, CL_Default, _
VL_Return, VL_SizeHandle, VL_FileName)
VA_LastUser = Left$(VL_Return, VL_Valid)
Exit Function 'ou Exit Sub
Erro_LeMeuINI:
VA_LastUser = CL_Default
Nota-se uma complexa e grande quantidade de código. A API não retorna a string procurada e sim um buffer. O conteúdo é retornado por um argumento (!) e precisa ser formatado com o tamanho do buffer (função left). Para eliminar todo este código a cada necessidade (cada campo INI) foi implementada uma chamada assim:
79
Global Const Ini_File = App.path & "\Myapp.INI)
'...
Dim VA_LastUser
'chamada a API para capturar o conteúdo de "lastuser" na seção "options"
Global Const Ini_File = "MYAPP.INI"
...
VA_LastUser = FU_Le_MeuINI ("options", "lastuser", 30)Abaixo, um exemplo de função "tradutora" de API:
Function FU_Le_MeuIni (VL_Sec As String, VL_Key As String, VL_Size As Integer) As String
'recebe nome da seção e do parágrafo e tamanho da string de retorno
'retorna valor encontrado (string) ou ""
'usa a constante Ini_File e
'a API (Windows 3.1 Kernel) GetPrivateProfileString
On Error GoTo Erro_LeMeuINI
Dim VL_Return As String, VL_FileName As String
Dim VL_SizeHandle As Integer, VL_Valid As Integer
Dim Va_Msg As String
Const CL_Default = "" 'retorno no caso de não encontrar
VL_Return = Space$(VL_Size) 'string a retornar
VL_SizeHandle = Len(VL_Return) 'tamanho da string de retorno
VL_FileName = Ini_File 'arquivo no formato INI
VL_Valid = GetPrivateProfileString(VL_Sec, VL_Key, CL_Default, _
VL_Return , VL_SizeHandle, VL_FileName)
FU_Le_MeuIni = Left$(VL_Return, VL_Valid)
Exit Function
Erro_LeMeuINI:
FU_Le_MeuIni = CL_Default
Resume Next
End FunctionA função usada como exemplo é do VB3, podendo ser usada em VB4 se sua aplicação for em 16 bits. Mas, o conceito de criar funções "traduzidas" ou "facilitadas" de API é aplicável a qualquer versão do Visual Basic.
178 - Melhorando as declarações API (II - a volta do SendMessage) Enviado por: Henrique Angelo
Quando falava de SendMessage (veja dica anterior), lembrei de um outro truque que pode ser interessante para ser incluído em seus hábitos de programação. Quando uso algumas mensagens em particular, o argumento lParam é, na verdade, considerado uma combinação de dois valores (words) . A mensagem EM_LINESCROLL pode rolar uma text box multilinha; a primeira word (low word) contém o número de linhas para rolar verticalmente e a segunda (hight word), contém o número de linhas para rolar horizontalmente.
'rola uma caixa de texto em "HO" linhas
'horizontalmente e "VE" linhas verticalmente
'obs.: isto não funciona corretamente
longValue& = HO * 65536 + VE
80
...
SUB_SendMessage Text1.hWnd, EM_LINESCROLL, 0, longValueO código acima não trabalha corretamente se HO for positivo e VE for negativo.
A solução é dividir o número long de lParam em dois, na declaraçãoDeclare Sub SUB_SendMessage2 Lib "User" Alias "SendMessage" (byVal hWnd as _ Integer , byVal msg as Integer, byVal wParam as Any, byVal lParam1%,_ lParam2)
A chamada passa a ser:SUB_SendMessage2 Text1.hWnd, EM_LINESCROLL, 0, HO, VE
Este truque funciona, pois um valor long integer na "pilha" corresponde a combinação de dois valores word combinados.
179 - Mova e redimensione controles com precisão Enviado por: Henrique Angelo
Ao desenhar um form, você pode utilizar mouse e teclado para obter melhor precisão. Esta dica serve também para Access 2 e 7 (95).A - Quando você desejar alterar o tamanho de um controle:
1. Selecione-o
2. Pressione SHIFT e use as teclas de navegação para alterar o tamanho.B - Quando você desejar mover um controle:
1. Selecione-o
2. Pressione CTRL e use as teclas de navegação para alterar a posição.Por Chris Kunicki, repassada por John Chmela (VB Developer's Network)*
Nota da Redação: Os autores informam que a dica (A e B) se aplica ao VB3, mas, não funciona. Acrescentamos, ainda, alguns dados abaixo.C - Evitando acidentes
1. O VB4 possui o recurso de trava (lock) de tamanho e posição em tempo de desenho. Selecione o(s) controle(s) e clique no botão "cadeado", na barra de ferramentas.
2. O VB3 não possui o recurso de "cadeado", mas, é possível mover ou selecionar os controles com maior cuidado (para alterar várias propriedades ao mesmo tempo, por exemplo). Basta selecionar, passando o mouse no form, uma área em volta dos controles. Isto não se aplica a controles contidos em outros objetos (como painéis, frames e picture boxes).D - Maior precisão
Use os valores numéricos de tamanho e posição: left, top, height e width - correspondentes a x, y' (eixo y do topo para baixo) , h (altura) e b (base), respectivamente - na Janela de Propriedades ou Janela de Código. Esta tarefa é um pouco árdua, então, desenhe o controle com medidas aproximadas para depois, ajustar, via digitação de valores.
180 - Alterações com Mid Enviado por: Henrique Angelo
Você provavelmente já conhece a função e o comando Mid, que retorna uma substring com um número específico de caracteres, ou seja, uma parte da string usada como parâmetro. Mas, você sabe como usar o Mid para substituir caracteres no meio de uma string? O Mid é uma pequena excentricidade do VB, pois, altera um de seus próprios argumentos. Mas, isto economiza uma série de instruções de concatenação, observe:
Dim mystring as String
mystring = "SOME STRING"
If Mid(mystring, 2, 1) = "O" Then
Mid(mystring, 2, 1) = "A" ' substituindo caracter
End If
181 - Destacando uma linha em um DBGrid Enviado por: Henrique Angelo
Para destacar uma linha no controle DBGrid, adicione o registro corrente à SellBookmarks Collection:
81
Private Sub DBGrid_RowColChange _
(LatRow As Variant, ByVal LasRow As Integer)
If Data1.RecordSet.RecordCount Then
DBGrid.SelBookmarks.Add _
Data1.RecordSet.Bookmark
End If
End Sub
182 - Mostra o nome que foi usado pelo usuário para se logar no Win95/NT Enviado por: Henrique Angelo
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
gsUserId = ClipNull(GetUser())
Function GetUser() As String
Dim lpUserID As String
Dim nBuffer As Long
Dim Ret As Long
lpUserID = String(25, 0)
nBuffer = 25
Ret = GetUserName(lpUserID, nBuffer)
If Ret Then
GetUser$ = lpUserID$
End If
End Function
Function ClipNull(InString As String) As String
Dim intpos As Integer
If Len(InString) Then
intpos = InStr(InString, vbNullChar)
If intpos > 0 Then
ClipNull = Left(InString, intpos - 1)
Else
ClipNull = InString
End If
End If
End Function
183 - Movimentando um label pela tela Enviado por: Henrique Angelo
82
Inicie um novo projeto, coloque um label(name=Label1) e um timer(name=Timer1).
Nas prorpiedades do timer coloque:Interval = 1
Enabled = False
No Form_Load()
timer1.enabled = true
No Timer1_Timer()
While Label1.left <= 5000
Label1.left = label1.left + 2
wend
184 - Apagando todo o conteúdo de todos os campos texto Enviado por: Henrique Angelo
'Essa rotina varre o formulário e apaga o conteúdo dos campos texto
Public Sub ClearTxt(NomeForm As Form)
Dim Controle As Control
For Each Controle In NomeForm.Controls
If TypeOf Controle Is TextBox Then Controle.Text = ""
Next Controle
End Sub
185 - Fechando todos os MdiForms abertos Enviado por: Henrique Angelo
'Varre um MdiForm e fecha as janelas abertas
Sub CloseChild()
Dim i As Integer
While Forms.Count > 1
i = Forms.Count - 1
If Forms(i).MDIChild Then Unload Forms(i)
Wend
End Sub
186 - Abrindo o Bloco de Notas a partir de um programa Enviado por: Henrique Angelo
1-Coloque um Command Button em um form
2-Coloque o seguinte nas declarações do form:Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal
83
dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const SYNCHRONIZE = 1048576
Const NORMAL_PRIORITY_CLASS = &H20&
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
3-Agora coloque no Command1_Click:Dim pInfo As PROCESS_INFORMATION
Dim sInfo As STARTUPINFO
Dim sNull As String
84
sInfo.cb = Len(sInfo)
success& = CreateProcess(sNull, "notepad.exe e:\anexis\vbpage\vbisland.html", ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo)
MsgBox "Notepad has been started. Click OK to end it."
ret& = TerminateProcess(pInfo.hProcess, 0&)
ret& = CloseHandle(pInfo.hThread)
ret& = CloseHandle(pInfo.hProcess)
MsgBox "Notepad has been shut down."
187 - Usando UNLOAD e HIDE Enviado por: Gerson Keiti Motoyama
Use o Hide para apenas esconder o formulário, sendo que a propriedade Visible do formulário recebe o valor False.Mas se não quiser mais utilizar os dados alterados no formulário pelo usuário, então use o Unload, que estará realmente descarregando, e voltando aos valores padrões definido no código.
188 - Utilize o Registro do Windows Enviado por: Gerson Keiti Motoyama
Armazene qualquer informação no registro do Windows, e depois retorne para ser utilizado no programa.
Por exemplo, para salvar o nome e n. de telefone do proprietário do programa, faça assim:SaveSetting "MyApp","User", "Name", "Gerson"
SaveSetting "MyApp","User", "Tel", "12345678"E para retornar este valor ao programa:
Nome = GetSetting("MyApp","User", "Name")
Telefone = GetSetting("MyApp","User", "Tel")
Se quiser excluir:DeleteSetting "MyApp", "User"
189 - Deixe seu programa menor Enviado por: Gerson Keiti Motoyama
Algumas dicas para diminuir o tamanho do seu arquivo compilado:
- Evite deixar espaços (caracteres) no código.
- Utilize o 'With Statement' para não ter que repetir nomes de objetos no código.
- Os comentários, embora sejam úteis, são uns ocupadores de espaço. Portanto, se tiver muito deles, quando for compilar, retire todos os comentários e salve então em um *.exe. Mas não salve no projeto.
- Se seu código possuir estruturas de controle multiniveladas, retire-o ao compilar. Afinal, para o programa, não tem diferença nenhuma. Mas não salve no projeto.
190 - Como detectar erros inexplicáveis? Enviado por: Gerson Keiti Motoyama
É comum as pessoas, para quem vc destrubuiu um programa, receber mensagens de erros do tipo: Run-time error, e em seguida ser finalizado sem saber a origem em que causou o erro. Para isso faça o programa detectar o erro (embora não aponte específicamente) dessa forma:Insira o seguinte código no INÍCIO da procedure em que quiser detectar:
On Error GoTo Erro:
Em seguida no final da procedure, coloque:MsgBox "O (Nome do programa) causou um erro desconhecido. Informe as _
85
seguintes 'instruções de erro' ao desenvolvedor :" & Chr(10) & _
Err.Number & Chr(10) & Err.Description & Chr(10) & Err.Source & _
Chr(10) & App.Revision, 16, "Erro Desconhecido"
191 - Como saber se o programa está rodando no Windows95 (ou em suas futuras versões)? Enviado por: Gerson Keiti Motoyama
Insira no módulo .BAS, o seguinte:Declare Function GetWinPlatform Lib "VB5STKIT.DLL" () As Long
Agora chame a função assim:Function IsWindows95() As Boolean
Const dwMask95 = &H2&
If GetWinPlatform() And dwMask95 Then
IsWindows95 = True
Else
IsWindows95 = False
End If
End Function
192 - Usando o CHR() para ocultar "mensagens" Enviado por: Gerson Keiti Motoyama
Para quem não sabe, infelizmente, é possível "espiar", ou até mesmo "alterar" o código de um executável (somente as "mensagens"), seja ele compilado pelo VB, ou em qualquer outra linguagem, por um usuário de nível intermediário. Para que isso não ocorra, ou pelo menos para dificultar alguma alteração, quando quiser escrever uma mensagem, por exemplo do tipo:msgbox "Olá, blz?"
Utilizando o sintaxe: Chr(charcode), faça o seguinte:msgbox chr(79) & chr(108) & chr(225) & chr(44) & chr(160) & chr(98) & chr(108) & chr(122) & chr(63)
Obs: Consulte os valores para o charcode no Help do VB:
Character Set (0-127)/(128-255)
193 - Criar Atalhos no Menu Iniciar usando DDE Enviado por: Antonio f. Marques Junior
Uma maneira fácil de criar atalhos no menu iniciar é usando os comandos DDE usados anteriormente no Windows 3.1, que também vale para Win95. Os comandos são:AddItem, CreateGroup, DeleteGroup, DeleteItem, ShowGroup, ReplaceItem, Reload.
Por exemplo, para se criar uma pasta no menu iniciar, e um atalho dentro dela, faz-se o seguinte:
1. Crie um Form adicione uma TextBox e um CommandButton.
2. No evento Load do Form, escreva o código: Sub Form_Load
Text1.LinkTopic = "Progman|Progman"
Text1.LinkMode = 2
End Sub3. No evento Click do Botão, escreva o código:
Sub Command1_Click
cmd = "[CreateGroup(Teste)]"
86
cmd = cmd & "[AddItem(c:\windows\calc.exe, Calculadora)]"
Text1.linkexecute cmd
Se por acaso você quer exibir uma pasta do menu Iniciar existente defina a string cmd como:cmd = "[showgroup(" & "Acessórios" & ",1" & ")]"
Se quiser que apareça Minimizada, mude o parâmetro para 2.
194 - Arquivo que guarda as Preferencias do Programa Enviado por: Anderson Calixto
Faz um tempo que tive difículdade em fazer um programa que guardasse as suas preferencias (local do banco de dados, cor do form, usuários registrados, e local das imagens, etc). Aí descobri que poderia fazer um arquivo com a função "open" e assim poderia estar gravando e alterando a qualquer momento as preferencias do meu programa.1 - Crie um modulo.bas onde vc vai declarar uma variável de Registro:
'Cria uma varial de gravação
Type record
dbLocalFile As String * 200 'Variavel onde será guardada o local do Banco de Dados
vRegistroDoUsuario As String * 40
vCorDeFundo As String * 10
vImagemDeFundo as String * 200
End Type
Global vPreferencias As record
2- Sub Rotina Para Gravar as InformaçõesA=FreeFile
Open "preferencias.dat" For Random As #A Len = Len(vPreferencias) 'Abre o arquivo
vPreferencias.dbLocalFile = RTrim(txtLocalDoBanco.Text)
vPreferencias.vRegistroDoUsuario = RTrim(txtNome.Text)
vPrefetencias.vCorDeFundo = RTrim(txtCorDeFundo.Text)
vPrefetencias.vImagemDeFundo = RTrim(txtImagemDeFundo.Text)
Put #A, 1, vPreferencias ' Faz a Gravaçao do arquivo.
Close #A
3- Sub Rotina Para Ler as InformaçõesA = FreeFile
Open vArquivo For Random As #A Len = Len(vPreferencias) 'Abre o arquivo
Get #A, 1, vPreferencias ' Faz Leitura do arquivo.
txtLocalDoBanco.Text = RTrim(vPreferencias.dbLocalFile)
txtNome.Text = RTrim(vPreferencias.vRegistroDoUsuario)
txtCorDeFundo.Text = RTrim(vPrefetencias.vCorDeFundo)
txtImagemDeFundo.Text = RTrim(vPrefetencias.vImagemDeFundo)
Close #A
195 - Verificar precisão a resolução do monitor Enviado por: Anderson Calixto
87
É muito simples a rotina que verifica com precisão a resolução do monitor para VB4.0 e VB 5.0 usando o Sistema API:'Declaração da Função de busca da ResoluçãoDeclare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Integer) as Integer
Sub Form_Resize( )
dim xResolucao As Integer
dim yResolucao As Integer
xResolucao = GetSystemMetrics(0)
yResolucao = GetSystemMetrics(1)
If xResolucao < 1024 and yResolucao < 768 Then
'Rotina que será ativada ao verificar que a resolução do monitor é menor que 1024x768
End If
End Sub
196 - Video .AVI Enviado por: Felipe Maion Garcia
Como visualizar um vídeo .AVI em tela cheia.
A função API mciSendString serve para manipular recursos de multimidia, como visualização de vídeos .AVI, tocar sons MIDI e .WAV. Em relação aos vídeos, pode-se, ainda, visualizá-los em tela cheia. Para obter este efeito, siga os passos a seguir :
1 - Declare a função mciSenString em um módulo de código:
Declare Function mciSendString lib "MMSystem" (byval lpstrCommand$, byval lpstrReturnStr as Any, Byval wReturnLen%, byval hCallBack%) as Long
2 - No evento Load do form, escreva o seguinte código :arquivo$ = InputBox ("Digite o caminho completo e o nome do arquivo a ser visualizado:")
comando$ = "play " & arquivo$ & " fullscreen"
x& = mciSendString (comando$, 0&, 0, 0&)
Rode o programa. Assim que ele for carregado aparecerá uma caixa onde você deverá o nome e o caminho completo do arquivo .AVI a ser visualizado.
197 - Janela de Sobre Enviado por: Julio Gavioli
Esta API é muito interessante: ShellAbout. Com ela vc pode abrir a janela padrao de 'sobres' do Windows.
Nas declaracoes gerais vc coloca(se vc colocar em um modulo, remova o "Private"):Private Declare Function ShellAbout Lib "shell32.dll" Alias "ShellAboutA" _
(ByVal hWnd As Long, ByVal szApp As String, ByVal szOtherStuff _
As String, ByVal hIcon As Long) As Long
Esta funcao pede 4 parametros:
1) Handle da janela
2) Nome do aplicativo
3) Algum Oba-Oba que vc queira colocar
4) Um icone
Ex.:
88
ShellAbout Form1.hWnd, "Meu Programa", "Desenvolvido por: Mim", Form1.IconObs.: vc pode utilizar no ultimo parametro uma imagem(tem que ser no formato .ico) que esteja em um objeto Picture ou Image. Caso vc coloque um valor nulo, a funcao ira colocar o icone padrao do Windows.
198 - Configurar Porta Enviado por: Julio Gavioli
Seria muito legal se tivessemos uma area so para API!!
Para vc configurar uma das portas do seu computador, vc precisa utilizar uma API: ConfigurePort(Declare Function ConfigurePort Lib "winspool.drv" Alias "ConfigurePortA" (ByVal pName As String, ByVal hWnd As Long, ByVal pPortName As String) As Boolean).
Ela pede 3 parametros:
1) Nome do servidor
2) Handle da janela
3) Nome da portaEx.:
ConfigurePort "", Form1.hWnd, "COM1"
Substitua "COM1" pela porta que deseja configurar!
Para certificar se a funcao funcionou, verifique se ela retornou uma valor igual a 1 ou True.
199 - Funções práticas Enviado por: Sirlon Farnei J. Oliveira
' Uma função que formata CEP e um If sem um End IfPublic Function FormataCEP(Q_Cep As String) As String
FormataCEP = IIf(Len(Q_Cep) > 7, Format(Q_Cep, "@@@@@-@@@"), Q_Cep)
End Function
' Uma função que formata CIC e outro exemplo de IfPublic Function FormataCIC(Q_Cic As String) As String
FormataCIC = IIf(Len(Q_Cic) > 11, _
Format(Q_Cic, "@@.@@@.@@@/@@@@-@@"), _
Format(Q_Cic, "@@@.@@@.@@@-@@"))
End Function
' Uma função que testa entrada de teclado para somente númerosPublic Function Testa_NumAbs(KeyNum) As Integer
' Permite a digitação do BackSpace
If KeyNum = 8 Then
Testa_NumAbs = (KeyNum)
Exit Function
End If
Testa_NumAbs = IIf(KeyNum < 48 Or KeyNum > 57, 0, KeyNum)
End Function
' Uma função que testa entrada de valores ou percentuais
(funciona em conjunto com a função Testa_NumAbs)Public Function Testa_Moeda(KeyAscii) As Integer
89
' Permite a digitaçao do ponto como separador decimal
Testa_Moeda = IIf(KeyAscii = 46, KeyAscii, Testa_NumAbs(KeyAscii))
End Function
' Uma função que limpa campos formatados com CIC, CEP e outrosPublic Function LimpaCampo(Q_Campo) As String
Dim CampoLimpo As String, X As Integer
For X = 1 To Len(Q_Campo)
If Mid(Q_Campo, X, 1) <> "/" And Mid(Q_Campo, X, 1) <> "-" And _
Mid(Q_Campo, X, 1) <> "." And Mid(Q_Campo, X, 1) <> ":" And _
Mid(Q_Campo, X, 1) <> "," And Mid(Q_Campo, X, 1) <> "_" And _
Mid(Q_Campo, X, 1) <> "," Then CampoLimpo = CampoLimpo & Mid(Q_Campo, X, 1)
Next X
LimpaCampo = IIf(Len(CampoLimpo) = 0, "", CampoLimpo)
End Function
' Uma função que prepara um campo para ser repassado para um MainframePublic Function Texto_MainFrame(QTexto As String) As String
Dim y As Integer
For y = 1 To Len(QTexto)
Select Case Mid(QTexto, y, 1)
Case "á", "ã", "â", "Á", "Ã", "Â"
Mid(QTexto, y, 1) = "A"
Case "ç", "Ç"
Mid(QTexto, y, 1) = "C"
Case "é", "ê", "É", "Ê"
Mid(QTexto, y, 1) = "E"
Case "í", "î", "Í", "Î"
Mid(QTexto, y, 1) = "I"
Case "ó", "õ", "ô", "Ó", "Õ", "Ô"
Mid(QTexto, y, 1) = "O"
Case "ú", "û", "Ú", "Û"
Mid(QTexto, y, 1) = "U"
End Select
Next
Texto_MainFrame = UCase(QTexto)
End Function
' Uma função que monta uma grade utilizando o MsFlexGrid
' Devem ser passados como parametros o Recordset e o Objeto da grade
90
' Os títulos das colunas assim bem como o seu tamanho serão obtidos
' diretamente no banco de dados
'
Public Sub Faz_Grade(Rs_X As Recordset, Q_Grade As Object)
Dim Linha, Coluna As Integer
Dim DaoRs As DAO.Property
' Define o numero de colunas da grade
Q_Grade.Cols = Rs_X.Fields.Count
' Monta o cabeçalho da grade
Q_Grade.Rows = 1
Q_Grade.Row = 0
For Coluna = 0 To Q_Grade.Cols - 1
Q_Grade.Col = Coluna
For Each DaoRs In Rs_X.Fields(Coluna).Properties
If DaoRs.Name = "Caption" Then
Q_Grade.Text = DaoRs.Value
Q_Grade.ColWidth(Coluna) = 99 * IIf(Len(Q_Grade.Text) > Rs_X.Fields(Coluna).Size, Len(Q_Grade.Text), Rs_X.Fields(Coluna).Size) + 200
End If
Next
Next
If Rs_X.RecordCount = 0 Then
Q_Grade.Rows = 2
Exit Sub
End If
Rs_X.MoveFirst
Do Until Rs_X.EOF
Coluna = 0
Linha = Rs_X.AbsolutePosition + 1
With Q_Grade
.Rows = Linha + 1
.Row = Linha
For Coluna = 0 To .Cols - 1
.Col = Coluna
.Text = IIf(Not IsNull(Rs_X.Fields(Coluna)), Rs_X.Fields(Coluna), "")
Next
End With
91
Rs_X.MoveNext
Loop
End Sub
' Uma função para contar os registros de uma tabela
' O nome da tabela deve ser passado como parâmetro e dever ser uma stringPublic Function ContaRegistros(QTab As String)
Dim RsQ As Recordset
Dim Sql As String
Sql = "SELECT Count(*) AS QuantReg FROM " & QTab
Set RsQ = CobDB.OpenRecordset(Sql, dbOpenSnapshot)
ContaRegistros = RsQ!QuantReg
RsQ.Close
End Function
'
' As funções a seguir trabalham em conjuto e calculam dígitos
' verificadores nas bases 10 e 11, incluindo CGC, CPF
'
' Função de direcionamento para teste de CIC
'
Public Function Valida_CIC(Q_Cic As String) As Boolean
Q_Cic = LimpaCampo(Q_Cic)
Select Case Len(Q_Cic)
Case Is < 11
Valida_CIC = False
Case Is > 14
Valida_CIC = False
Case 12 To 14
Valida_CIC = ValidaCGC(Q_Cic)
Case Else
Valida_CIC = ValidaCPF(Q_Cic)
End Select
End Function
' Testa digito verificador do CPFPublic Function ValidaCPF(CPF As String) As Boolean
Dim Digito, X, Soma, Resto As Integer, Regua As Variant
If Len(Trim(CPF)) < 11 Then
92
ValidaCPF = False
Exit Function
End If
' Calcula o primeiro dígito verificador
Regua = Array(11, 10, 9, 8, 7, 6, 5, 4, 3, 2)
For X = 1 To 9
Soma = Soma + (Regua(X) * Mid(CPF, X, 1))
Next X
Resto = Soma Mod 11
Digito = IIf(Resto = 0 Or Resto = 1, "0", Trim(11 - Resto))
' Calcula o segundo dígito verificador
Soma = 0
Resto = 0
For X = 0 To 9
Soma = Soma + (Regua(X) * Mid(CPF, X + 1, 1))
Next X
Resto = Soma Mod 11
Digito = Digito + IIf(Resto = 0 Or Resto = 1, "0", Trim(11 - Resto))
ValidaCPF = IIf(Mid(CPF, 10, 2) <> Digito, False, True)
End Function
' Testa digito verificador do CGCPublic Function ValidaCGC(CGC As String) As Boolean
' Valida primeiro digito
ValidaCGC = TestaDig(Left(CGC, 13), 11)
' Valida segundo digito
If ValidaCGC = True Then ValidaCGC = TestaDig(Trim(CGC), 11)
End Function
' Função que testa outros dígitos verificadores
' O dado a ser testado e a base desejada devem ser passados como parâmetroPublic Function TestaDig(Q_Dado As String, Q_Base As Integer) As Boolean
If Q_Base = 10 Then
' Testa dígito na base 10
TestaDig = IIf(Base_10(Left(Trim(Q_Dado), Len(Trim(Q_Dado)) - 1)) <> Right(Trim(Q_Dado), 1), False, True)
ElseIf Q_Base = 11 Then
' Testa dígito na base 11
TestaDig = IIf(Base_11(Left(Trim(Q_Dado), Len(Trim(Q_Dado)) - 1)) <> Right(Trim(Q_Dado), 1), False, True)
End If
End Function
93
' Calcula dígito no módulo 10Public Function Base_10(Q_Dado) As String
Dim DadoCalc, Peso, Soma, Resto, X As Integer, Regua As String
DadoCalc = LimpaCampo(Q_Dado)
Peso = 2
For X = Len(DadoCalc) To 1 Step -1
Regua = Regua + Trim((Mid(DadoCalc, X, 1) * Peso))
Peso = IIf(Peso = 1, 2, 1)
Next X
X = 1
For X = 1 To Len(Regua)
Soma = Soma + Val(Mid(Regua, X, 1))
Next X
Resto = Soma Mod 10
Base_10 = Right(Trim(10 - Resto), 1)
End Function
' Calculo do digito modulo 11Public Function Base_11(QNumero As String) As String
Dim Numero, i, Produto, Multiplicador, Digito As Integer
Numero = Trim(QNumero)
' Calcula digito do modulo 11
Multiplicador = 2
For i = Len(Numero) To 1 Step -1
Produto = Produto + Val(Mid(Numero, i, 1)) * Multiplicador
Multiplicador = IIf(Multiplicador = 9, 2, Multiplicador + 1)
Next
' Exceção
Digito = 11 - Int(Produto Mod 11)
Digito = IIf(Digito = 10 Or Digito = 11, 0, Digito)
Base_11 = Trim(Str(Digito))
End Function
Qualquer sugestão para melhorias das funções acima ou dúvidas com relação ao uso, poderão ser enviadas para o meu e-mail [email protected] ou pelofone abaixo.
200 - Programa com ícone animado Enviado por: Henrique Angelo
Crie um novo projeto, coloque no Form uma ImageList, coloque os ícones da animação nesta mesma Imagelist.
Coloque um Timer.
Na Propriedade Form_Load() coloque:
94
Set Form1.icon = ImageList1.ListImages(1).Picture
Na propriedade Timer1_Timer() coloque:
If Form1.icon = ImageList1.ListImages(1).Picture Then
Set Form1.icon = ImageList1.ListImages(2).Picture
Exit Sub
End If
If Form1.icon = ImageList1.ListImages(2).Picture Then
Set Form1.icon = ImageList1.ListImages(1).Picture
Exit Sub
End If
No Timer1, coloque um intervalo de 100.
201 - Título Animado Enviado por: Henrique Angelo
Coloque um Timer no form com intervalo de 1.
No Form_Load coloque:Form1.caption = "T"
No Timer1_Timer() coloque:If Form1.caption = "T"
form1.caption = " e"
If Form1.caption = " e"
form1.caption = " s"
If Form1.caption = " s"
form1.caption = " t"
If Form1.caption = " t"
form1.caption = " e"
If Form1.caption = " e"
form1.caption = "T"
endif
202 - Relatórios via código-quebre uma string em x linhas e por n colunas Enviado por: Mauricio Cunha
Caros amigos, para aqueles que utilizam relatórios programados aí uma dica de como deve ser feito para o relatório ser impresso:
Sub parag()'============================================================================='Cria um parágrafo, para utilizar basta jogar o texto e NL entre os campos'=============================================================================NL = Chr(13) + Chr(10)End SubFunction QuebrarLinhas(ByVal S As String, N As Integer) As String'===================================='Esta função alinha o String "s" em linhas de no máximo n caracteres(colunas)
95
'São utilizadas a função Token e a sub Parag'====================================paragDim L As StringDim R As StringDim P As StringL = ""R = ""Do While S <> ""P = Token(S)If P = NL ThenR = R & L & NLL = ""ElseIf Len(L) + Len(P) > N ThenR = R & L & NLL = PElseL = L & IIf(L = "", P, " " & P)End IfIf S = "" ThenR = R & LEnd IfLoopQuebrarLinhas = REnd FunctionPrivate Function Token(S As Variant) As String'===================================='Esta função quebra as linhas com divisores'====================================Dim separadores As String: separadores = "<>/\ " & Chr(13)Dim divisores As String: divisores = ",;.:!" & Chr(10)Dim X As IntegerDim R As StringS = LTrim(S)X = 1DoIf InStr(1, separadores, Mid$(S, X + 1, 1)) Or InStr(1, divisores, Mid$(S, X, 1)) ThenExit DoEnd IfX = X + 1Loop Until X >= Len(S)R = Left(S, X)S = Right(S, Len(S) - Len(R))Token = REnd Function
Para chamar a função, basta utilizar:(...)
DETALHE = DETALHE & "Expectativas..: "Printer.Print DETALHETEXTO = IIf(IsNull(RS!EXPEC), "", UCase(RS!EXPEC))S = TEXTOc = QuebrarLinhas(TEXTO, 115)If S = "" ThenExpectativa = "[Nenhuma]"ElseExpectativa = Expectativa + cEnd IfPrinter.Print Expectativa
203 - Localizando uma rotina perdida Enviado por: Cláudio Rocha
Vai aí uma dica simplesInclua mensagens entre as linhas do seu programa, para identificar um loop, rotina, ou erro não localizado. Assim o mesmo pode ser monitotado.
EX: msgbox "ERRO 1"
204 - Como Executar Um Aplicativo .EXE Através de Um Command Button
96
Enviado por: Anderson da S. Nogueira
Coloque em Command1_Click Isso:
Shell "Local do .Exe, Incluindo o Drive e Pastas !!!)
205 - Parametros iniciais VB5 Enviado por: Fabio F. Moreirao
Para fazer com que um programa receba parâmetros externos, use a funcão 'command' no Form_Load. Ex:
Dim sParametro as String
sParametro = Command
206 - Reiniciando o Computador através do seu programa ( BOOT ) Enviado por: Paulo Costa
No Modulo ( General) adicione a seguinte linha :
Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Essa linha seguinte Vai dar o Boot, coloque a em um botão por exemplo :
Call ExitWindowsEx(2, 0)
207 - Microsoft Internet Transfer Protocol Enviado por: marcio fritsch
Bem, minha sugestão da transferência automatizada via ftp é o seguinte:
Crie o controle no seu forms e um botão de comando com o seguinte:******************************Dim strURL As String*Dim bData() As Byte*Dim intFile As Integer*strURL = "ftp://aaaaa:[email protected]/home/user/mercur/usuario.txt"*intFile = FreeFile()*bData() = Inet1.OpenURL(strURL, icByteArray)*Open "C:\usuario.txt" For Binary Access Write As #intFile*Put #intFile, , bData()*Close #intFile'***************************************************'Além disso, crie no inet1:'esse procedimento faz com que o arquivo seja'copiado integralmente.'***********************************************Private Sub Inet1_StateChanged(ByVal State As Integer)On Error GoTo fim_anormal2Select Case StateCase icError, icDisconnectedMsgBox "Erro na comunicação --> " & Err.DescriptionGoTo Fim_aCase icResponseReceived ' 12Dim vtData As Variant ' Data variable.Dim strData As String: strData = ""Dim bDone As Boolean: bDone = FalsevtData = Inet1.GetChunk(1024, icString)Do While Not bDonestrData = Data & vtDatavtData = Inet1.GetChunk(1024, icString)If Len(vtData) = 0 ThenbDone = TrueEnd IfMe.Text1 = Me.Text1 + 1If Me.Text1 > 100 ThenMe.Text1 = 1
97
End IfProgressBar1.Value = Me.Text1Dim TempoDePausa, Início, Fim, TempoTotalTempoDePausa = 1 ' Define a duração.Início = Timer ' Define a hora inicial.Do While Timer < Início + TempoDePausaDoEvents ' Submete-se a outros processos.LoopFim = Timer ' Define a hora final.TempoTotal = Fim - Início ' Calcula o tempo total.LoopEnd SelectGoTo Fim_afim_anormal2:Dim aa = MsgBox("Erro de copia! " & Err.Description, vbCritical, "Erro")Fim_a:End.
208 - Gravando e Reutilizando informacões no registry VB5 Enviado por: Fabio F. Moreirao
Você pode manipular suas informacões que ficam armazenadas banco de dados do Windows. Ex:
Para salvar informações:Dim sValor as String
SaveSetting "Nome da Aplicacao", "Secao", Chave", sValor
Para recuperar informações 'sValor receberá o retorno':
Dim sValor as String
sValor = GetSetting(AppName:="Nome daAplicacao", section:="Secao", Key:="Chave")
Para excluir informações:
DeleteSetting "Nome da Aplicacao", "Secao", "Chave"
Obs: Se você informar apenas o Nome da aplicacão com a Secão todas as Chaves serão excluídas
209 - Mapear unidade de rede Enviado por: Fabio P. Araújo
Mapear uma unidade de rede;
Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal _
lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName _
As String) As Long
Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" _
(ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName _
As Long) As Long
Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" _
(ByVal lpszName As String, ByVal bForce As Long) As Long
Dim Caminho As String, Unidade as String
Caminho = "\\Computador\Caminho"
Unidade = "I:"
98
'Realiza conexão
WNetAddConnection Caminho , "Se tiver senha, digite á aqui", unidade
'Consulta caminho de uma determinada conexão, _
'neste caso, na variável caminho será armazenado o local do caminho _
'atual ref. a unidade
WNetGetConnection Unidade, Caminho, 255)
'Desconecta
WNetCancelConnection Unidade, True
210 - Saber qual o nome do Usuário atual e da Máquina Enviado por: Fabio Pereira Araújo
Para vc verificar qual o usuário atual que logou no windows, basta criar um módulo e adcionar o seguinte:
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
'Depois, crie a variáve usuário
Dim Usuario As String
Usuario = Space(256)
GetUserName Usuario, 256
'Na variável usuário estará guardado o nome do usuário.
'Para vc verificar qual o nome da máquina atual;
'No módulo coloque
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Dim maquina As String
maquina = Space(30)
GetComputerName maquina, 30
'Na variável maquina estará guardado o nome do computador.
211 - Travar Ctrl+Alt+Del Enviado por: Fabio Pereira Araújo
Travar pressionamento das teclas Ctrl + Alt + Del:
Private Const SPI_SCREENSAVERRUNNING = 97&
Private Declare Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam As Long, _
lpvParam As Any, ByVal fuWinIni As Long) As Long
Dim lngRet As Long
Dim blnOld As Boolean
'Para desabilitar estas teclas:
99
lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING, _
True, blnOld, 0&)
'Para abilitar:
lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, blnOld, 0&)
212 - Calculo do digitos de CGC e CPF Enviado por: Antonio CArlos e Carlos Gama
Vimos uma função de calculo digito para controle de CPF e CGC muito extensa;Temos a mesma função mais simples para ler.
Abaixo segue o Código:
Public Function Calc_CGC(VALOR As String) As BooleanDim Mult1 As StringDim Mult2 As StringDim dig1 As IntegerDim dig2 As IntegerDim X As IntegerMult1 = "543298765432"Mult2 = "6543298765432"For X = 1 To 12dig1 = dig1 + (Val(Mid$(VALOR, X, 1)) * Val(Mid$(Mult1, X, 1)))NextFor X = 1 To 13dig2 = dig2 + (Val(Mid$(VALOR, X, 1)) * Val(Mid$(Mult2, X, 1)))Nextdig1 = (dig1 * 10) Mod 11dig2 = (dig2 * 10) Mod 11If dig1 = 10 Then dig1 = 0If dig2 = 10 Then dig2 = 0Calc_CGC = TrueIf dig1 <> Val(Mid$(VALOR, 13, 1)) Then Calc_CGC = FalseIf dig2 <> Val(Mid$(VALOR, 14, 1)) Then Calc_CGC = FalseEnd FunctionPublic Function Calc_CPF(VALOR As String) As Boolean 'Inicializa variaveisDim dig1 As IntegerDim dig2 As IntegerDim Mult1 As IntegerDim Mult2 As IntegerDim X As IntegerMult1 = 10Mult2 = 11For X = 1 To 9dig1 = dig1 + (Val(Mid$(VALOR, X, 1)) * Mult1)Mult1 = Mult1 - 1NextFor X = 1 To 10dig2 = dig2 + (Val(Mid$(VALOR, X, 1)) * Mult2)Mult2 = Mult2 - 1Nextdig1 = (dig1 * 10) Mod 11dig2 = (dig2 * 10) Mod 11If dig1 = 10 Then dig1 = 0If dig2 = 10 Then dig2 = 0Calc_CPF = TrueIf Val(Mid$(VALOR, 10, 1)) <> dig1 Then Calc_CPF = FalseIf Val(Mid$(VALOR, 11, 1)) <> dig2 Then Calc_CPF = FalseEnd Function
Modo de uso:x = calc_CPf(11111111111)if x = true then msgbox "CPF Correto"x = Calc_CGC(11111111111111)if x = true then msgbox "CGC Correto"
100
213 - Diretorio da App Enviado por: Death Angel
Para vc abrir um programa que esteja no mesmo diretório que o seu projeto, sem ter que especificar um diretório para ele, é soh' fazer o seguinte comando!!'Abre no mesmo diretórioShell (".\nome_do_programa.xxx")'Fim da String
214 - Forçando a caixa de texto a ler somente Valores Numéricos Enviado por: Klayton Marcio Fratoni
No Módulo crie uma variavel pública chamada - Tecla.
public tecla as integer
Na propriedade da caixa de texto ( text3 ), deixe a "text = 0".
'****
Private Sub Text3_GotFocus()
Text3.SelStart = 0
Text3.SelLength = Len(Text3)
End Sub
'****
Private Sub Text3_Change()
If Text3.Enabled = True Then
If Tecla = 0 Then
Text3 = Val(Text3)
End If
Tecla = 0
Text3.SelStart = Len(Text3)
End If
End Sub
'****
Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 96 Or KeyCode = 110 Then
Tecla = 1
End If
End Sub
215 - Abrindo arquivos com senha
101
Enviado por: Marcos Sixel
Após algum tempo sempre recebendo a mensagemsenha inválida no VB consegui algo nomínimo interessante. Só faltava eu especificaros padrões default...
set base = opendatabase("tal.mdb",,,";PWD=SENHA")
' sempre dava errado :(
set base = opendatabase("tal.mdb",false,false,";PWD=SENHA")
' funciona. :o)
Detalhe... os valores false são default :)
Espero ter ajudado alguém...
216 - Como impossibilitar que o form seja fechado. Enviado por: Ricardo
Ele só é fechado se o micro é renicializado, isso fui eu que descobri, e é bem simples:
Private Sub Form_Unload(Cancel As Integer)
Dim ReAbre as string
ReAbre = Shell("Nome do Programa em EXE",1)
End Sub
OBS: Atenção para que de certo, você precisa transformar o Form em exe, e coloca-lo no comando shell explicado anteriormente.
217 - Verifica se o programa já está aberto Enviado por: Fernando Bettine
No load do formulário adicionar a linha de comando abaixo:Private Sub Form_Unload(Cancel As Integer)If App.PrevInstance Then
MsgBox "O sistema já está aberto."
Unload Me
End If
218 - Limpando strings de funções API Enviado por: Gregório V. Dettmann
Private Sub Form_Unload(Cancel As Integer)'Envie a string retornada de uma função API como por exemplo GetWindowsDirectoryA para essa função e ela retornará uma string limpa.
Function SpaceCut(ByVal strString As String) As String
Dim intZeroPos As Integer
intZeroPos = InStr(strString, Chr$(0))
If intZeroPos > 0 Then
StripTerminator = Left$(strString, intZeroPos - 1)
Else
StripTerminator = strString
102
End If
End Function
219 - Criptografar e Descriptografar Senhas de seu Programa Enviado por: Klayton Marcio Fratoni
Criptografar e Descriptografar é usado geralmente para segurança nos programas, se você guarda no seu bando de dados as senhas do sistema, qualquer pessoa pode acessa-ló ( por exemplo utilizando o Access ) .No módulo ( .bas ), crie uma variável "SENHA" tipo String.
Private Sub Form_Unload(Cancel As Integer)Global Senha As String
Sugiro que as rotinas aqui mencionadas sejam editadas dentro do módulo para poderem ser utilizadas a qualquer momento dentro de seu programa.
Private Sub Form_Unload(Cancel As Integer)'****
Public Function Criptografar(Texto)
Senha = ""
Dim I As Integer
Dim P As Integer
Dim LN1 As Currency
I = 0
Do While Not I = Len(Texto)
I = I + 1
LN1 = Asc(Mid(Texto, I, 1)) + 16
Senha = Senha & Chr(LN1)
Loop
End Function
'****
Essa função vai transformar a senha em uma outra palavra ou conjunto de caracteres, na sintaxe :Private Sub Form_Unload(Cancel As Integer)Criptografar suasenha
senha = caracteres
'ex:
Criptografar klayton
senha = {|lq%@#
'****
Para Descriptografar e só inverter a função.Private Sub Form_Unload(Cancel As Integer)Public Function Descriptografar(Texto)
Senha = ""
Dim I As Integer
Dim P As Integer
Dim LN1 As Currency
I = 0
103
Do While Not I = Len(Texto)
I = I + 1
LN1 = Asc(Mid(Texto, I, 1)) - 16
Senha = Senha & Chr(LN1)
Loop
End Function
'****
'ex :
Descriptografar {|lq%@#
senha = klayton
'****
Reparem que o número 16 foi utilizado nas funções.Se alterar o número 16, a senha a ser transformada muda de valor.Podendo assim utilizar qualquer número no lugar de 16 a senha terá valor diferente.
220 - Acessando uma Tabela do Access 97 com VBA Enviado por: MARCELO C SANTOS
No evento "Form_Load" do Formulário desejado devemos incluir os seguintes códigos:Private Sub Form_Unload(Cancel As Integer)Dim Banco as Database 'variável do tipo Banco de Dados
Dim Tabela as RecordSet 'variável do tipo conjunto de registros
Set Banco = CurrentDB 'Carrega a variável Banco com o Banco de Dados Ativo
Set Tabela = Banco.OpenRecordSet("Nome_da_Tabela") 'Carrega a variável Tabela com a tabela "Nome_da_Tabela"
Me.Campo_Do_formulário = Tabela!Nome_do_Campo_da_Tabela 'Carrega o Campo do formulário atual com o campo da tabela.
Qualquer dúvida ou sugestão enviar E-Mail.
221 - Icone animado de maneira mais simples Enviado por: Paulo Bezerra
Inicialmente adicione um timer e um imagelist ao seu form logo apos é só seguir os passos.
Primeiro: Você coloca no imagelist os icones que serviram para a animação.
Segundo: Você declara no general uma variável denominada "icone", tipo integer.
Terceiro: Declare um valor para a variavel no form_load, um valor = 0.
Quarto: Você coloca as seguintes linhas de codigo no componente timer.Private Sub Form_Unload(Cancel As Integer)icone = icone + 1: If icone = (total de figuras + 1) Then icone = 1
MousePointer = 99
MouseIcon = ImageList1.ListImages(icone).Picture
Enfim o programa devera ficar assim:Private Sub Form_Unload(Cancel As Integer)'Declaração no general
Dim icone As Integer
'Declaração no form_load
Private Sub Form_Load()
104
icone = 0
End Sub
'Declaração no timer1_timer
Private Sub Timer1_Timer()
icone = icone + 1: If icone = (total de figuras + 1) Then icone = 1
MousePointer = 99
MouseIcon = ImageList1.ListImages(icone).Picture
End Sub
Bem é so isso assim as linhas de código ficam reduzidas a bem menos.Qualquer dúvida ou sugestão enviar E-Mail.
222 - Como não deixar que o form feche Enviado por: Pedro Henrique
Para não deixar que a form feche, é só digitar na linha de código:Private Sub Form_Unload(Cancel As Integer)Private Sub Form_Unload(Cancel As Integer)
Cancel = 1
End Sub
223 - Selecionar todo o texto em um textbox (em 2 linhas de codigo) Enviado por: Rogério Barreto
Para selecionar um text em um text box é só usar este comando:Private Sub Form_Unload(Cancel As Integer)textbox1.selstart = 0textbox1.sellenght = (len(textbox1.text))
224 - Digitação fácil nas caixas de texto Enviado por: Thiago Rosso Adams
Quando precisar entrar com vários dados através de caixas de texto pode-se usarestas rotinas abaixo para facilitar a entrada de dados.Através delas após digitar um valor em uma caixa de texto com "Index" e for pressionado"Enter" ou seta para baixo a próxima caixa de texto será selecionada se for pressionadaseta para cima a caixa anterior será selecionada.
Private Sub Form_Unload(Cancel As Integer)' Esta sub faz com que o texto fique selecionado
Private Sub Dado_GotFocus(Index As Integer)
Dado(Index).SelStart = 0
Dado(Index).SelLength = Len(Dado(Index))
End Sub
Private Sub Dado_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyDown, 13
If Index < Dado.uBound Then Index = Index + 1 Else Index = Dado.lBound
Dado(Index).SetFocus
105
Case vbKeyUp
If Index > Dado.lBound Then Index = Index - 1 Else Index = Dado.uBound
Dado(Index).SetFocus
End Select
End Sub
225 - Defina uma lista de valores para uma propriedade no seu UserControl. Enviado por: Clark
Para definir uma lista de valores para uma determinada propriedade do seu UserControl, siga o exemplo abaixo:1) Crie um ENUMERAÇÃO contendo os valores:
Private Sub Form_Unload(Cancel As Integer)Public Enum MeusValores
mvLeft = 0
mvCenter = 1
mvRight = 2
End Enum
2) Crie a propriedade declarando seu parâmetro como sendo a enumeração criada acima:Private Sub Form_Unload(Cancel As Integer)Public Property Let Alinhamento( byVal vValor as MeusValores )
.
.
.
End Property
vValor as MeusValores - Define que vValor é a enumeração MeusValores, ou seja, quando a propriedade for publicada na janela Properties do VB, a mesma apresentará uma lista (Combo) contendo os valores definidos na emumeração.Legal, não ?
Clark
226 - Consulta no Data Link(vb6) Enviado por: Cristiano Azevedo Costa
Basta inserir o seguinte código:Private Sub Form_Unload(Cancel As Integer)sql = "Select * from MinhaTabela"
MeuDataLink.rsMeuComando.Close
MeuDataLink.rsMeuComando.Source = sql
MeuDataLink.rsMeuComando.Open
MeuDataLink.rsMeuComando.Properties.Refresh
Sql é um comado sql
106
MeuDataLink é um data link
rsMeuComando é um command(recorset)
227 - Piscar um texto na tela Enviado por: Fernando D.
Para fazer um texto piscar basta adicionar uma Label contendo o texto que deseja fazer piscar e digitar a seguinte linha no evento Timer.
Private Sub Form_Unload(Cancel As Integer)label1.visible = not(label1.visible)
228 - Busca Rápida Enviado por: Régis Augusto Quinelato
Private Sub Form_Unload(Cancel As Integer) 'Vou precisar de um text1, List, quando _
'vc digitar a primeira letra automaticamente, _
'a palavra que vc procura será marcada.
'---Declaro as Variáveis---
Dim Search As String
Dim Searchlen As String
'--------------------------
Search = UCase(TxtProcura.Text)
Searchlen = Len(Search)
If Searchlen Then
For Contador = 0 To Lista.ListCount - 1
If UCase(Left(Lista.List(Contador), Searchlen)) = Search Then
Lista.ListIndex = Contador
Exit For
End If
Next Contador
End If
229 - Utilização de um Combo Magico Enviado por: WIlliam Rogerio Correa
Rotina para posicionar o texto e o item data de um combo de acordo com que for digitado.
O combo devera esta com o style = 0 - dropDown Combo.
Colocar esta rotina no modulo basPrivate Sub Form_Unload(Cancel As Integer)Public Const CB_ERR = -1
Public Const CB_FINDSTRING = &H14C
Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Sub ComboMagico(cbo As ComboBox, KeyAscii As Integer)
107
Dim sBuffer As String
Dim lRetVal As Long
sBuffer = Left(cbo.Text, cbo.SelStart) & Chr(KeyAscii)
lRetVal = SendMessage((cbo.hWnd), CB_FINDSTRING, -1, ByVal sBuffer)
If lRetVal <> CB_ERR Then
cbo.ListIndex = lRetVal
cbo.Text = cbo.List(lRetVal)
cbo.SelStart = Len(sBuffer)
cbo.SelLength = Len(cbo.Text)
KeyAscii = 0
End If
End Sub
e no combo no change colocar o seguinte :Private Sub Form_Unload(Cancel As Integer)call ComboMagico(,keyascii)
e pronto...
230 - Menu com texto animado Enviado por: André Barros
Na propriedade do menu você coloca...Private Sub menu_Load()
Menu.Caption = "M"
Timer1.Enabled = True
End Sub
´Você coloca 4 timers no form
´o primeiro timer com 1000
´o segundo timer com 2000
´o terceiro timer com 3000
´o quarto timer com 4000
Private Sub Timer1_Timer()
Menu.Caption = " e"
Timer1.Enabled = False
Timer2.Enabled = True
End Sub
Private Sub Timer2_Timer()
Menu.Caption = " n"
Timer2.Enabled = False
Timer3.Enabled = True
End Sub
108
Private Sub Timer3_Timer()
Menu.Caption = " u"
Timer3.Enabled = False
Timer4.Enabled = True
End Sub
Private Sub Timer4_Timer()
Menu.Caption = "Menu"
Timer4.Enabled = False
End Sub
231 - Pesquisando por nome, sobrenome sem Data Enviado por: angelo da silva
dim texto as boolean
dim pat as string
pat="Silva"
texto = InStr(1, UCase(Trim(rsequi("uti_equi"))), UCase(Trim(pat)))
Instr=true se estiver contindo, ou false se não.
232 - Minimizando Todas as Janelas Enviado por: Antonio Ferreira Marques Junior
Para minimizar todas as janelas de uma maneira bem simples, basta simularmos, via API, o pressionamento das teclas Alt+M, que seria vc clicando com o botão direito do mouse na barra de tarefas e escolhendo a opção Minimizar todas as janelas. É simples:
Num módulo:Declare Sub Keybd_event lib "user32" (ByVal bvk as byte, byval bscan as byte, byval dwflags as long, byval dwextrainfo as long
const vk_lwin = &H5B
const keyeventf_keyup = &H2const vk_apps = &H5D
Num evento click de um botãokeybd_event vk_lwin,0,0,0
keybd_event &H4D, 0,0,0
keybd_event vk_lwin,0,keyeventf_keyup,0
Boa Sorte
233 - Aplicações Client/Server Enviado por: Daniel(Shadow)
Para fazer um cliente de qualquer aplicação em Visual Basic, para qualquer tipo de aplicativo server. Você tem apenas que colocar um controle Microsoft Winsock 6.0 no form, e em qualquer botão ou na propriedade load do form, você coloca o seguinte comando:
109
winsock1.connect (endereço ip),(porta)
Por exemplo:winsock1.connect 127.0.0.1, 5555
234 - Nomes das letras maiúsculas e sem espacós a mais Enviado por: Eduardo Mazzarino Costa
Public Function Maiusc(Palavra As String) As String
'converte as primeiras letra dos nomes em maiúsculas(menos: de, da, do, das,
'dos, a, e e)
'retira os espaços em branco excedentes entre as palavras, exemplo:
'string inicial = "nome sobrenome1 dos sobrenome2 "
'string de retorno = "Nome Sobrenome1 dos Sobrenome2"
' EDUARDO MAZZARINO COSTA, 21 / 3 / 99
Dim Resto As String, Parte As String, Posic As Byte
Resto = Trim(LCase(Palavra)) & " "
Do Until Resto = " "
Posic = InStr(1, Resto, " ")
Parte = Mid(Resto, 1, Posic)
If Trim(Parte) <> "e" And Trim(Parte) <> "a" And Trim(Parte) _
<> "do" And Trim(Parte) <> "dos" And Trim(Parte) <> "da" _
And Trim(Parte) <> "das" And Trim(Parte) <> "de" Then
Parte = UCase(Left(Parte, 1)) & Mid(Parte, 2)
End If
Maiusc = Maiusc & Parte
Resto = Trim(Mid(Resto, Posic)) & " "Loop
Maiusc = Trim(Maiusc)
End Function
235 - Proibindo campos nulos Enviado por: FÁBIO FUR
Na Proc LostFocus de uma caixa de texto você digita:if trim(text1.text) = "" then
msgbox "Preenchimento do campo é obrigatório!"
text1.text = ""
text1.setfocus
Exit sub
End If
110
236 - Organizando números numa Combo Box Enviado por: Gregório V. Dettmann
'Sub que orderna os números de uma ComboBox em ordem crescente ou decrescente.
'ByRef:
'Combo-> Objeto(ComboBox) onde seus números serão organizados na ordem de SortType
'ByVal:
'SortType-> Tipo de ordem (constantes abaixo)
'Obs: Este sub gerará um erro se em alguma entrada houver caracteres não-numéricos, por isso,
'certifique-se de que só existam números em todas os Itens do ComboBox.
Const COMBOSORTASCENDING% = 0
Const COMBOSORTDESCENDING% = 1
Sub SortComboBox(ByRef Combo As ComboBox, ByVal SortType As Long)
Const ASCEND% = 1
Const DESCEND% = -1
'Variáveis de organização
Dim Sort As Boolean
Dim I As Long
Dim I2 As Long
Dim Itens() As Long
Dim TmpValue As Long
If Combo.ListCount = Empty Then Exit Sub
ReDim Preserve Itens(Combo.ListCount - 1) As Long
For I = 0 To UBound(Itens) Step 1
Itens(I) = Combo.List(I)
Next I
Combo.Clear
Sort = (SortType = COMBOSORTASCENDING)
For I = 0 To UBound(Itens) Step 1
For I2 = IIf(Sort, I + 1, UBound(Itens)) To IIf(Sort, UBound(Itens), UBound(Itens) _
- (UBound(Itens) - I)) Step IIf(Sort, ASCEND, DESCEND)
If Sort Xor (CLng(Itens(I2)) > CLng(Itens(I))) Then
Swap Itens(I), Itens(I2)
End If
Next I2
Combo.AddItem Itens(I)
Next I
End Sub
111
237 - Limpando Combos Read-Only 2 Enviado por: Jeferson Luiz Ravate
Complementando dica enviada por Henrique AngeloComo diz o autor da dica, não pode-se usar apropriedade Text para limpar um Combo Read-Only.Mas pode posicionar o List da Combo numa posiçãocom conteúdo vazio.
Ao invés de Combo.Text = "", faz-se Combo.List = -1
O texto da combo ficará em branco sem alterar seu conteúdo.
238 - Mensagem randonica Enviado por: José Roberto de Paula
Passe para esta funçao sua mensagem e o tamanho do objeto que a contemex: Randon_Msg(Label1.Caption,Label1.Width)
Function Randon_Msg(MENSAGEM, TAMANHO As Integer)
Dim ESPAÇO As String
Dim Z As Integer
On Error Resume Next
If TAMANHO > Len(MENSAGEM) Then TAMANHO = Len(MENSAGEM)
For Z = 0 To TAMANHO
ESPAÇO = ESPAÇO & " "
Next
If X < Len(ESPAÇO) Then
X = X + 1
NEWS = Mid(ESPAÇO, X, Len(ESPAÇO)) & Mid(MENSAGEM, 1, X)
End If
If X = Len(ESPAÇO) Or X = Len(ESPAÇO) + 1 Then
Y = Y + 1
NEWS = Mid(MENSAGEM, Y, Len(MENSAGEM))
If Y = Len(MENSAGEM) Then
Y = 0
X = 0
End If
End If
End Function
239 - Propriedades da Barra de Tarefas Enviado por: Junior
112
Digamos que vc quer realizar as operações daquelas que vc clica com o Direito do mouse, tipo minimizar todas janelas, lado a lado, etc, Pois bem, o código é este:
Const WM_COMMAND As Long = &H111
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As
Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Enum AçõesWindows
Cascata = 403
LadoLadoV = 405
LadoLadoH = 404
Propriedades = 413
MinimizarTudo = 416
DesfazMinimizeCascata = 419
End Enum
Sub ExecutaTarefas(Ação as AçõesWindows)
Dim lRetVal As Long
Dim hwnd As Long
hwnd = FindWindow("Shell_TrayWnd", vbNullString)
lRetVal = PostMessage(hwnd, WM_COMMAND, Ação, 0&)
End Sub
Agora no evento click de um botão:ExecutaTarefas Açao
Obs.: Se vc tiver usando VB5 ou superior, o argumento ação vc escolherá automaticamente depois de vc digitar o ExecutaTarefas.Se vc tiver usando VB4, despreze o bloco Enum/End Enum e coloque no Click do botão: ExecutaTarefas 416 (Por Ex.: para minimizar todas as janelas).
240 - Abrindo qualquer tipo de objeto do Access Enviado por: Luiz
Dim objAccess As Access.Application
Set objAccess = New Access.Application
'Abre o MDB
'GetSetting e usado na inicializacao junto com
'SaveSetting salvando o local do arquivo
objAccess.OpenCurrentDatabase _ filepath:=GetSetting (NOME_SISTEMA, "MDB", "0")
'se for relatorio
objAccess.DoCmd.OpenReport reportname:=rptname _(1), View:=Access.acPreview, _
wherecondition:=Condicoes
objAccess.Visible = True
objAccess.Docmd.Maximize
113
'se for macro
objAccess.DoCmd.RunMacro ("NomedaMacro")
'e assim por diante
Set objAccess = Nothing
241 - fundo degrade Enviado por: Marcio fritsch
'no Resize() de um formulário qualquer coloque:
'simples e rápido.
Dim i as Integer
Dim y as Integer
Me.AutoRedraw = True
Me.DrawStyle = 6
Me.DrawMode = 13
Me.DrawWidth = 2
Me.ScaleMode = 3
Me.ScaleHeight = (256 * 2)
For i = 255 To 0 Step -1
Me.Line (0, y)-(Me.Width, y + 2), RGB(0, 0, i), BF
y = y + 2
Next i
242 - Verificar se programa esta ativo Enviado por: Nilson M. Uehara
Private Declare Function FindWindow Lib "User32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Sub()
Dim hWindow As Long
Dim lngResult As Long
Dim lngReturnValue As Long
'Verifica se a calculadora esta ativa
hWindow = FindWindow(vbNullString, "Calculadora")
If IsWindow(hWindow) < 0 Then
'esta Ativa
Else
114
'esta Inativa
End If
243 - Mover o Botão de lugar ao passar o Mouse por cima Enviado por: O Sensacional®
Use a propriedade Mouse Move, e 2 command button. O 2º, com o false do "Visible" ativado.Dentro do command1, digite :
Command1.visible = false
Command2.visible = true
Dentro do command2, digite:Command2.visible = false
Command1.visible = true
244 - Marcar o Texto de um Campo... Enviado por: Pablo R. Till
Crie um módulo (.Bas) e dentro do mesmo digite...Public Function MarcaTexto(Campo)
With Campo
.SelStart = 0
.SelLenght = Len(.Text)
End With
End Function
A função é bem simples mas pode ajudar...
245 - Mudar a cor do Label quando o mouse passar sobre o label, dando a aparencia de um link Enviado por: Thadeu R. Ferraz
Para vc mudar a cor da label conforme o mouse passa sobre ele, basta colocar o seguinte comando abaixo.Private Sub Form_MouseMove(Button As Integer,
Label1.ForeColor = &H80000012
End Sub
Private Sub Label1_MouseMove(Button As Integer,
Label1.ForeColor = &HFF&
End Sub
246 - Como Listar os registros de um campo de uma tabela num Textbox (sem SQL) Enviado por: Thiago
Para listar todos os registros de um Campo de uma Tabela separando os mesmo por uma vígula, sem utilizar SQL, utilize o seguinte código:
RS.MoveFirst
TXT.Text = RS("Campo")
RS.MoveNext
115
While Not RS.EOF
texto = RS("Campo")
TXT.Text = TXT.Text & ", " & texto
RS.MoveNext
Wend
Obs: O textbox (no caso TXT), deve ter a propriedade Multiline = True e ScroolsBar = 2 (vertical).
RS: Nome da variavel declarada como Recordset
DB: Nome da variavel declarada como DataBase
247 - Comando Printer Enviado por: Anderson A Lopes
Com o comando printer podemos imprimir várias coisas rapidamente, por exemplo:Printer.Print "String a ser Impressa"
Você pode definir margem de quantos centímetros você quiser usando:Printer.ScaleLeft = - Valor da margem...
Bom é isso aí pessoal....
248 - Testando um Laço For... Enviado por: AndreRP
Escreva em um botão de Comando a seguinte codificação :var1 = "TESTANDO"For i = 1 To 8MsgBox Mid(var1, i, 1)Next i
249 - Buscar data/hora em outro computador da rede Enviado por: Antonio Aristides Mochi Junior
Option ExplicitPrivate Declare Function NetRemoteTOD Lib "NETAPI32.DLL" (ByVal server As String, buffer As Any) As LongPrivate Declare Function NetApiBufferFree Lib "NETAPI32.DLL" (ByVal buffer As Long) As LongPrivate Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)Private Type TIME_OF_DAYt_elapsedt As Longt_msecs As Longt_hours As Longt_mins As Longt_secs As Longt_hunds As Longt_timezone As Longt_tinterval As Longt_day As Longt_month As Longt_year As Longt_weekday As LongEnd Type
'' Função para retornar a Data/Hora de um computador na rede' RETORNO:' string no formato dd/mm/yyyy-hh:mm:ss' PARAMETROS:' sComputador: Nome de um computador da rede. Ex: \\SERVIDOR1'
116
Private Function BuscarDataHora(sComputador As String) As StringDim sRetorno As StringDim todTime As TIME_OF_DAYDim ptrTime As LongDim lRetorno As LongDim sServidor As StringDim dRemoto As DateOn Error GoTo ERROsRetorno = ""Screen.MousePointer = vbHourglasssServidor = StrConv(sComputador, vbUnicode)lRetorno = NetRemoteTOD(sServidor, ptrTime)If lRetorno = 0 ThenCopyMemory todTime, ByVal ptrTime, Len(todTime) 'COPIA O PONTEIRO RETORNADO PARA A ESTRUTURA TIME_OF_DAYdRemoto = DateSerial(70, 1, 1) + (todTime.t_elapsedt / 60 / 60 / 24) 'CONVERTE O TEMPO DECORRIDO DESDE 1/Jan/70 PARA UMA DATAdRemoto = dRemoto - (todTime.t_timezone / 60 / 24) 'AJUSTAR PARA DIFERENÇAS DO TimeZonesRetorno = Format(dRemoto, "dd/mm/yyyy") & "-" & Format(dRemoto, "hh:mm:ss")NetApiBufferFree (ptrTime) 'LIBERA O PONTEIRO DA MEMÓRIAElse'Erro 53: cannot find serverMsgBox "Não pode encontrar o servidor." & vbCrLf & vbCrLf & sServidor, vbExclamation, "Atenção"End IfGoTo FIMERRO:MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Erro"FIM:Screen.MousePointer = vbDefaultBuscarDataHora = sRetornoExit FunctionEnd Function
250 - Iniciando programa de E-Mail e Browser pelo VB Enviado por: Daniel Sitnik
'Este tutorial não serve só para abrir o programa de E-Mail ou o Browser, pode ser usado para qualquer outro programa. E o melhor, o comando é de apenas 1 linha!!'Para abrir o programa de E-Mail, coloque um Command Button no form e digite o seguinte no seu evento Click:
Private Sub Command1_Click()Shell "start mailto:[email protected]"End Sub'Para iniciar o Browser digite o código abaixo, também no evento Click de um botão:Private Sub Command2_Click()Shell "start http://www.homepage.com.br"End Sub'Muito simples não? Também pode ser usado para abrir um arquivo de texto no notepad:Private Sub Command3_Click()Shell "start arquivo.txt"'E assim por diante, você pode abrir qualquer programa que quiser!!
251 - Desligando o computador pelo VB Enviado por: Daniel Sitnik
'Primeiro adicione um Módulo .BAS no seu programa e coloque a declaração abaixo nele:Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long'Pronto, agora volta para o formulário e coloque o código abaixo num botão de comando ou no evento Form_Click():Private Sub Form_Click()If MsgBox("Sair do Windows?", 36, "Sair") = 6 ThenCall ExitWindowsEx(1, 1)ElseExit Sub
117
End IfEnd Sub'Ao clicar o botão ou o formulário uma MsgBox aparecerá perguntando se você quer desligar o Windows, se você clicar 'Sim' aquela famosa tela 'Seu Computador Já Pode Ser Desligado....' vai aparecer e o computador será desligado. Ao clicar 'Não' nada acontecerá.
252 - Imprimindo Enviado por: Elder Paes
Para vc imprimir um documento, utilize o comando Printer ao invés do comando PrintForm. Vamos fazer com um TextBox e um PictureBox:
Private Sub command1_click()Printer.Print Text1.TextPrinter.Print Picture1.Picture
253 - Função para transformar sifras em extenso Enviado por: Evandro Massini
'Função para transformar sifras em extensoOption ExplicitDim unidade(1 To 9) As StringDim dezena(17) As StringDim centena(1 To 9) As StringDim inteiro As StringDim tamanho As IntegerPublic Function unidades(numero As String) As Stringunidades = unidade(numero)End FunctionPublic Function dezenas(numero As String) As StringIf numero > 9 And numero < 21 Thendezenas = dezena(numero - 10)ElseIf numero >= 21 And numero <= 99 ThenIf Right(numero, 1) = "0" Thendezenas = dezena(Int(Left(numero, 1) + 8))Elsedezenas = dezena(Int(1 & Int(Left(numero, 1) - 2))) & " e " & unidade(Int(Right(numero, 1)))End IfEnd IfEnd FunctionPublic Function centenas(numero As String) As StringIf Mid(numero, 2, 2) = 0 ThenIf numero = 100 Thencentenas = "cem"Elsecentenas = centena(Left(numero, 1))End IfElseIf Mid(numero, 3, 1) = 0 Thencentenas = centena(Left(numero, 1)) & " e " & dezenas(Mid(numero, 2, 2))ElseIf Mid(numero, 2, 1) = 0 Thencentenas = centena(Int(Left(numero, 1))) & " e " & unidade(Int(Right(numero, 1)))Elsecentenas = centena(Int(Left(numero, 1))) & " e " & dezenas(Int(Right(numero, 2)))End IfEnd FunctionPublic Function ext(numero As Currency) As StringIf numero > 999999.99 Then ext = "Número fora dos padrões válidos !": Exit Functionunidade(1) = "um"unidade(2) = "dois"unidade(3) = "três"unidade(4) = "quatro"unidade(5) = "cinco"unidade(6) = "seis"unidade(7) = "sete"unidade(8) = "oito"unidade(9) = "nove"dezena(0) = "dez"dezena(1) = "onze"
118
dezena(2) = "doze"dezena(3) = "treze"dezena(4) = "quatorze"dezena(5) = "quinze"dezena(6) = "dezesseis"dezena(7) = "dezessete"dezena(8) = "dezoito"dezena(9) = "dezenove"dezena(10) = "vinte"dezena(11) = "trinta"dezena(12) = "quarenta"dezena(13) = "cinquenta"dezena(14) = "sessenta"dezena(15) = "setenta"dezena(16) = "oitenta"dezena(17) = "noventa"centena(1) = "cento"centena(2) = "duzentos"centena(3) = "trezentos"centena(4) = "quatrocentos"centena(5) = "quinhentos"centena(6) = "seissentos"centena(7) = "setessentos"centena(8) = "oitocentos"centena(9) = "novecentos"inteiro = Int(numero)tamanho = Len(inteiro)Select Case tamanhoCase 1ext = unidades(inteiro)Case 2ext = dezenas(inteiro)Case 3ext = centenas(inteiro)Case 4If Right(inteiro, 3) = 0 Thenext = unidades(Left(inteiro, 1)) & " mil"ElseIf Int(Right(inteiro, 3)) > 99 Thenext = unidades(Left(inteiro, 1)) & " mil e " & centenas(Int(Right(inteiro, 3)))ElseIf Int(Right(inteiro, 3)) > 9 And Int(Right(inteiro, 3)) < 100 Thenext = unidades(Left(inteiro, 1)) & " mil e " & dezenas(Int(Right(inteiro, 3)))ElseIf Int(Right(inteiro, 3)) < 10 Thenext = unidades(Left(inteiro, 1)) & " mil e " & unidades(Int(Right(inteiro, 3)))End IfEnd IfCase 5If Right(inteiro, 3) = 0 Thenext = dezenas(Left(inteiro, 2)) & " mil "ElseIf Int(Right(inteiro, 3)) > 99 Thenext = dezenas(Left(inteiro, 2)) & " mil e " & centenas(Right(inteiro, 3))ElseIf Int(Right(inteiro, 3)) > 9 And Int(Right(inteiro, 3)) < 100 Thenext = dezenas(Left(inteiro, 2)) & " mil e " & dezenas(Int(Right(inteiro, 3)))ElseIf Int(Right(inteiro, 3)) < 10 Thenext = dezenas(Left(inteiro, 2)) & " mil e " & unidades(Int(Right(inteiro, 3)))End IfEnd IfCase 6If Right(inteiro, 3) = 0 Thenext = centenas(Left(inteiro, 3)) & " mil "ElseIf Int(Right(inteiro, 3)) > 99 Thenext = centenas(Left(inteiro, 3)) & " mil e " & centenas(Int(Right(inteiro, 3)))ElseIf Int(Right(inteiro, 3)) > 9 And Int(Right(inteiro, 3)) < 100 Thenext = centenas(Left(inteiro, 3)) & " mil e " & dezenas(Int(Right(inteiro, 3)))ElseIf Int(Right(inteiro, 3)) < 10 Thenext = centenas(Left(inteiro, 3)) & " mil e " & unidades(Int(Right(inteiro, 3)))End IfEnd Selectext = ext & " reais"If numero - Int(numero) <> 0 ThenDim fra As Stringfra = Right(numero, 2)If InStr(1, fra, ",") <> 0 Then fra = Right(fra, 1) * 10
119
If fra >= 10 Thenext = ext & " e " & dezenas(fra) & " centavos"ElseIf fra < 10 Thenext = ext & " e " & unidades(fra) & " centavos"End IfEnd IfEnd Function
254 - Usando o controle MsFlexGrid Enviado por: FabioFur
Usando o controle MsFlexGrid Para adicionar Dados:Declare uma Variável em um botão de comando com o nome messes
Dim messes(12) as string 'logo abaixo digite:messes(1) = "Janeiro"messes(2) = "Fevereiro"messes(3) = "Março"messes(4) = "Abril"messes(5) = "Maio"messes(6) = "Junho"messes(7) = "Julho"messes(8) = "Agosto"messes(9) = "Setembro"messes(10) = "Outubro"messes(11) = "Novembro"messes(12) = "Dezembro"Dim contador as integerfor contador = 1 to 12grid1.TextMatrix(contador,1) = messes(contador)Next contador
Obs.: A propriedade Rows do controle MsFlexGrid deve ser definida com o Mínimo 13.
255 - Efeito de profundidade Enviado por: Fernando Augusto dos Santos
É muito simples. Se quiser colocar essa oba-oba no seu projeto :
1 - adicione um label.2 - deixe o fontsize dele com tamanho 10.3 - deixe a propriedade alignment = 24 - no MouseDown adicione o seguinte código :label1.fontsize = 85 - no MouseUp adicione o seguinte código :label1.fontsize = 10
OBS : Utilize este recurso para substituir botões,usando o evento click do label para executar ações.
256 - Flip Horizontal e Vertical Enviado por: Gustavo (Toni)
'coloque os dados abaixo em um module#If Win32 ThenDeclare Function StretchBlt% Lib "GDI32" (ByVal hDC%, ByVal x%, ByVal y%, ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%, ByVal YSrc%, ByVal nSrcWidth%, ByVal nSrcHeight%, ByVal dwRop&)#ElseIf Win16 ThenDeclare Function StretchBlt% Lib "GDI" (ByVal hDC%, ByVal x%, ByVal y%, ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%, ByVal YSrc%, ByVal nSrcWidth%, ByVal nSrcHeight%, ByVal dwRop&)#End IfConst SRCCOPY = &HCC0020'Flip HorizontalPublic Sub imgFlipH(PicOrigem As PictureBox, PicDestino As PictureBox)Dim xX As Integer, yY As Integer, ReturnV As IntegerPicOrigem.ScaleMode = 3
120
PicDestino.ScaleMode = 3PicDestino.ClsxX = PicOrigem.ScaleWidthyY = PicOrigem.ScaleHeightReturnV = StretchBlt(PicDestino.hDC, xX, 0, -xX, yY, PicOrigem.hDC, 0, 0, xX, yY, SRCCOPY)End Sub'Flip VerticalPublic Sub imgFlipV(PicOrigem As PictureBox, PicDestino As PictureBox)Dim xX As Integer, yY As Integer, ReturnV As IntegerPicOrigem.ScaleMode = 3PicDestino.ScaleMode = 3PicDestino.ClsxX = PicOrigem.ScaleWidthyY = PicOrigem.ScaleHeightReturnV = StretchBlt(PicDestino.hDC, 0, yY, xX, -yY, PicOrigem.hDC, 0, 0, xX, yY, SRCCOPY)End Sub
257 - Cores do Sistema Enviado por: Ivan
Para nao ocorrer de você colocar um controleem cor Cinza, por exemplo, e o seu usuario trocar as cores dosistema para o padrao "Deserto" e seu controle continuar cinza,use o SystemColorConstantsEx:
Controle.BackColor = SystemColorConstants.vb3DDKShadowControle.BackColor = SystemColorConstants.vb3DFaceControle.BackColor = SystemColorConstants.vbActiveTitleBar
E assim por diante.
258 - Como sair no msgbox... Enviado por: José Pereira
Crie um MsgBox com sinal de interrogação e com os botões Vbyes e Vbno.Crie um botão:Private Sub comman1_Click()resp = MsgBox("Tem certeza que deseja sair?", 36, "SAÍDA")If resp = vbYes ThenEndElseMsgBox ("Continue seu trabalho!")End IfEnd Sub
259 - Criando toolbars dockaveis Enviado por: Leon Serfaty Kacowicz
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As LongDeclare Function ReleaseCapture Lib "user32" () As LongSub Toolbar1_MouseDown(Button as integer, Shift as integer, X as single, Y as single)ReleaseCaptureDim a&a& = SendMessage(ToolBar1.hwnd, 161, 2, 0&)End Sub
121
260 - Apagando todos os registros de uma tabela com apenas um click!! Enviado por: Lucas Belkys
Insira um controle timer no formulário e defina a propiedade interval = 10;Defina a propiedade enabled = false do timer;em um botão de comando digite:
timer1.enabled = true
No timer:on error resume nextdata1.recordset.deletedata1.recordset.movenext
Espero ter ajudado!!
261 - Enviando registros para Excel Enviado por: luiz
Private Sub Command1_Click() 'aconselhavel para poucos registrosDim rs As RecordsetDim cn As ConnectionSet cn = New ConnectionSet rs = New Recordset 'estabelece coneccaocn.Open "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=D:\Program Files\Microsoft Visual Studio\VB98\Biblio.mdb" 'abre recordsetrs.Open "Select * From Authors", cn, adOpenStatic, adLockReadOnlyExporta rsrs.Closecn.CloseSet cn = NothingSet rs = NothingEnd SubSub Exporta(ByVal RSConeccao As Recordset)Dim MCampos() As StringDim mExcelApp As Excel.ApplicationDim c As RangeConst ALFABETICO As String = "ABCDEFGHIJKLMNOPQRSTUVXYWZ"Set mExcelApp = New Excel.ApplicationReDim MCampos(RSConeccao.Fields.Count) 'armazena nomes dos camposDim temp As LongFor temp = 0 To RSConeccao.Fields.Count - 1MCampos(temp) = RSConeccao.Fields(temp).NameNextIf Not RSConeccao.EOF Then 'popula recordsetRSConeccao.MoveLastRSConeccao.MoveFirstElseRSConeccao.CloseExit SubEnd If 'instancia excelSet mExcelApp = New Excel.ApplicationmExcelApp.Visible = TruemExcelApp.Workbooks.Add 'imprime nome dos camposDim ABCDFor temp = 1 To RSConeccao.Fields.CountABCD = Mid(ALFABETICO, temp, 1) & "1"For Each c In mExcelApp.ActiveWorkbook.Worksheets.Application.Range(ABCD)c.Value = MCampos(temp - 1)Next cNextDim TTemp2TTemp2 = 1 'para cada registroDo
122
TTemp2 = TTemp2 + 1 'para cada campo'imprime dados do registro For temp = 1 To RSConeccao.Fields.CountFor Each c In mExcelApp.ActiveWorkbook.Worksheets.Application.Range(Mid(ALFABETICO, temp, 1) & TTemp2)c.Value = RSConeccao(MCampos(temp - 1))Next cNextRSConeccao.MoveNext 'ate fim dos registrosLoop While Not RSConeccao.EOFSet RSConeccao = NothingSet mExcelApp = NothingEnd Sub
262 - Max lenght Combo-box Enviado por: Marcelo
'Maxlenght no Combo-box
Private Sub Combo1_Change()If Len(Combo1.Text) >= 10 ThenCombo1.Text = Left$(Trim(Combo1.Text), 10)End ifEnd SubPrivate Sub Combo1_KeyPress(KeyAscii As Integer) 'use send keys quando o form tiver mais 1 controle'que receba o focoIf KeyAscii = 13 Then SendKeys "{Tab}"If Len(Combo1.Text) = 10 ThenIf KeyAscii <> 8 And KeyAscii <> 13 ThenKeyAscii = 0Combo1.Locked = TrueBeepCombo1.Locked = FalseEnd IfEnd IfEnd Sub
263 - Preencher Combo Datas Enviado por: Marcelo
'Rotina para adicionar datas do mes corrente, desde o dia de hoje até o ultimo dia do mês:'código para o módulo:Option ExplicitSub G_Preenche_Combo_Data(ComboDatas As Control)Dim I, DiaCorrente, MesCorrente, AnoCorrente, UltimoDia As IntegerDiaCorrente = Day(Now)MesCorrente = Month(Now)AnoCorrente = Year(Now)UltimoDia = Day(DateValue("01/" & _Str(MesCorrente + 1) & _"/" & Str(AnoCorrente)) - 1)If MesCorrente = 12 ThenUltimoDia = Day(DateValue("31/" & "12/" & Str(AnoCorrente)))End IfFor I = DiaCorrente To UltimoDiaComboDatas.AddItem Format(I, "0#") & "/" & Format(Now, "mm") & "/" & Format(Now, "yyyy")NextEnd Sub 'código para o formulário:'insira 1 Combo-box no formulárioPrivate Sub Form_Load()G_Preenche_Combo_Data Combo1End Sub
123
264 - Centralizar Form Enviado por: Mimo
Para centralizar um Form siga estes passos:Clique no Form, tecle F4, em Properties altere StartUpPosition para 2.
265 - Como saber se o seu Computador está preparado para o ano 2000. Enviado por: MPS Informática Ltda.
Private Sub Command1_Click()Dim Test As DateTest = Text1Text2 = Format(Test, "long date")End Sub
266 - Tab Automático sem codificação Enviado por: Nildo Veras
Use o MaskEdBox setando o valor da propriedade autotab com true. todas as vezes que for preenchido com o valor igual ao de maxlength automáticamente passará para o próximo controle sem codificação...
267 - TROCAR PONTO POR VÍRGULA Enviado por: PAULO EDUARDO PACHECO
Função para trocar o ponto de um TEXTBOX por vírgula.
Recentemente, estava importando uma base de dados do DATAFLEX, e deparei com o problema com a casa decimal. Após uma pequena surra, descobri a solução: Importe a base de dados, e onde aparecer este campo com o ponto decimal, mude a propriedade para TEXTO (estou falando da importação do ACCESS). Execute a função abaixo. E depois volte ao ACCESS e mude para MOEDA. O problema estará resolvido.
Exemplo: TEXT1.TEXT=TROCAR(TEXT2.TEXT)Function trocar(NumeroTexto)Dim Posicao1, Posicao2, Tamanho As IntegerTamanho = Len(Trim(NumeroTexto))Posicao1 = InStr(1, NumeroTexto, ".") 'Achar o pontoTamanho = Tamanho - Posicao1 'Para saber qtos item serão coletadosIf Posicao1 <> 0 Then 'Achou o pontoPosicao1 = Posicao1 - 1Posicao2 = Posicao1 + 1 'P/ encontrar o próximo espaçotrocar = Mid(NumeroTexto, 1, Posicao1) + "," + Right(NumeroTexto, Tamanho)Elsetrocar = NumeroTextoEnd IfEnd Function
268 - Como Não Deixar que o form se feche 2 Enviado por: Pedro
No form unload ponha o seguinte comando:Cancel =-1
Não sei se funciona em outras versões do VB alem da 5.0.
269 - Como re-abrir um projeto do VB6 no VB5 Enviado por: Robson
Tive uma grande supresa quando abri e rodei um projeto no VB6 e depois quis abrir-lo no VB5. Ao tentar fazer isto o VB5 mostrou a seguinte mensagem:
124
"'Retained' is an invalid key. The file .... can´t be loaded"Para quem quiser consertar o problema, abra o arquivo nomedoprojeto.vbp com o notepad (ou outro editor de texto) e retire a linha com o seguinte comando:Retained=0.
Boa sorte.
270 - Nome do processador Enviado por: Rodolfo Nunez Lacé
Private Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)Private Type SYSTEM_INFOdwOemID As LongdwPageSize As LonglpMinimumApplicationAddress As LonglpMaximumApplicationAddress As LongdwActiveProcessorMask As LongdwNumberOrfProcessors As LongdwProcessorType As LongdwAllocationGranularity As LongdwReserved As LongEnd TypeFunction GetCPUInfo() As StringDim Proc As StringDim INFO As SYSTEM_INFOINFO.dwOemID = Len(INFO)Call GetSystemInfo(INFO)Select Case INFO.dwProcessorTypeCase Is = 860Proc = INFO.dwNumberOrfProcessors & " Intel 8086"Case Is = 386Proc = INFO.dwNumberOrfProcessors & " Intel 80386"Case Is = 486Proc = INFO.dwNumberOrfProcessors & " Intel 80486"Case Is = 586Proc = INFO.dwNumberOrfProcessors & " Intel Pentuim"Case Is = 2000Proc = INFO.dwNumberOrfProcessors & " MIPS R2000"Case Is = 3000Proc = INFO.dwNumberOrfProcessors & " MIPS R3000"Case Is = 4000Proc = INFO.dwNumberOrfProcessors & " MIPS R4000"Case Is = 21064Proc = INFO.dwNumberOrfProcessors & " ALPHA 21064"Case Is = 601Proc = INFO.dwNumberOrfProcessors & " Power PC 601"Case Is = 603Proc = INFO.dwNumberOrfProcessors & " Power PC 603"Case Is = 604Proc = INFO.dwNumberOrfProcessors & " Power PC 604"Case Is = 620Proc = INFO.dwNumberOrfProcessors & " Power PC 620"End SelectGetSysInfo = ProcEnd Function
271 - Salvando uma Picture Enviado por: ton
SAVEPICTURE picture1.image, "c:\imagem.bmp"
272 - Validar conteudo do MaskEdit Enviado por: Vava
Private Sub Command1_Click()If Mask1.Mask = "(###)###-####" ThenIf Mask1.Text = "(___)___-____" Then
125
MsgBox "Vazio"Else: Dim dd = 1Do While Not d = Mask1.MaxLength + 1texto = Mid(Mask1.Text, d, 1)If texto = "_" ThenMsgBox "Vazio"Exit SubElsed = d + 1End IfLoopMsgBox "cheio"End IfEnd IfEnd Sub
273 - Limpar todos os TextBox de todos os Formularios Enviado por: Alexandre Sergio Nakano
Outra dica de como limpar os textbox dos formulários.Dim formulario As FormDim controle As ControlFor Each formulario In Forms For Each controle In formulario.Controls If TypeOf controle Is TextBox Then controle.Text = "" End If Next controleNext formulario
274 - Verificaçao de Data Enviado por: André Luiz Ribeiro de Araújo
Public Function Verifica_Data(Datas As String) As BooleanDim DiasMes, Dia, Mes, Ano, Primeiro_Numero_Ano As IntegerDim Mensagem As String On Error GoTo Tratamento_Data Dia = CInt(Mid(Datas, 1, 2)) Mes = CInt(Mid(Datas, 4, 2)) Ano = CInt(Mid(Datas, 7, 4)) Primeiro_Numero_Ano = CInt(Mid(Datas, 7, 1)) If Primeiro_Numero_Ano = 0 Then Verifica_Data = False Exit Function End If If Mes = 4 Or Mes = 6 Or Mes = 9 Or Mes = 11 Then DiasMes = 30 Else If Ano Mod 4 = 0 Then DiasMes = 29 Else DiasMes = 28 End If If Mes = 1 Or Mes = 3 Or Mes = 5 Or Mes = 7 Or Mes = 8 Or Mes = 10 Or Mes = 12 Then DiasMes = 31 End If End If ' determina quantos dias tera o mes
126
If (Ano > 0) And (Mes >= 1) And (Mes <= 12) And (Dia >= 1) And (Dia <= DiasMes) Then Verifica_Data = True Else Verifica_Data = False End If
Tratamento_Data:
If Err.Number = 13 Then End IfEnd Function
Um exemplo de como funciona:Dim Verificação as boolean Verificação = Verifica_Data(Text1.Text)'Irá Retornar Verificação = True se a Data Digitada for Válida, caso contrário, RetornaVerificação = False 'se a Data Digitada for Inválida.
Espero que ajude a resolver seu problema
275 - Qual data ou mês/ano é maior Enviado por: Douglas Henrique Castelluber
Simples declare essa função no .Bas e passe as datas, se for uma string converta com o CDATE e passe, no caso de mês/ano, não tem problema não passe o dia, o importante é ser um parametro do tipo data. Boa Sorte.
Function FirstDate(Date1 As Date, Date2 As Date) As Integer'FirstDate**************************************************************************************'Programador..: Castelluber, Douglas Henrique'Data/Hora....: 01/12/98 - 19:00'Função.......: Retorna a maior data 1 ou 2 para as datas passadas'Retorno......: 0 (igual),1 (primeira data + antiga) ou 2 (segunda data + antiga)'Dependência..: Nenhuma'Observação...:'***********************************************************************************************FirstDate = 0Select Case DateDiff("d", Date1, Date2) Case Is > 0 FirstDate = 1 Case Is < 0 FirstDate = 2End SelectEnd Function
276 - Enviar E-Mail Enviado por: Erica Pimentel Souza
Dim objSession As ObjectDim objMessage As ObjectSet objSession = CreateObject("MAPI.SESSION")objSession.Logon "Your Profile Name", , False,FalseSet objMessage = objSession.Inbox.Messages.AddobjMessage.Subject = "Mensagem do subject"objMessage.Text = "Texto da Mensagem"objMessage.Attachments.Add "Anexo", , , "C:\anexo.XLS" 'caminho do arquivo em anexoobjMessage.Recipients.Add "endereço do e-mail"objMessage.Recipients.ResolveobjMessage.Send'Este codigo funciona adequadamente, quando o outlook da pessoa que envia o e-mail está aberto, caso não quera assim, retire este codigo(,,false,false) da quarta linha. E dará certo !'Espero que tirem proveito'Tchau !'Erica P.
127
277 - Como usar os Common Dialogs Enviado por: Marcio A. P.
Private Sub Command1_Click()'para utilizarmos aquelas caixas padrão de abrir 'arquivo use:.Filter = "arquivos de texto (*.txt)|*.txt|todos_ os arquivos (*.*)|*.*|"'a propriedade acima aplica um filtro para os 'arquivos que podem ser abertos.Action = 1'a propriedade acima abre a caixa abrir'obs.: a propriedade .filename retorna o nome do 'arquivo, mas'se o usuário clicar em "cancelar" o valor 'retornado será nulo podendo causar errosEnd WithEnd SubPrivate Sub Command2_Click()With CommonDialog1'para usar a caixa padrão "salvar como:" use isto:.Filter = "arquivos de texto (*.txt)|*.txt|todos_ os arquivos (*.*)|*.*|"'a propriedade acima aplica um filtro para os 'arquivos que podem ser gravados.Action = 2'a propriedade acima abre a caixa "salvar como:"End WithEnd SubWith CommonDialog1'para usar a caixa padrão "cores" use:.Flags = 1'a propriedade acima muda o estilo da caixa.Action = 3'a propriedade acima chama a caixa "cores"'obs. a propriedade .color retorna o valor da cor 'em hexa. podendo ser usada direto no controleEnd WithEnd SubPrivate Sub Command4_Click()With CommonDialog1'para usar a caixa fontes tente:.Flags = 2'a propriedade acima muda o tipo da caixa.Action = 4'a propriedade acima chama a caixa'as propiedades fontename, fontitalic, fontsize 'etc'retornam os valores para voce usarEnd WithEnd SubPrivate Sub Command5_Click()With CommonDialog1'para usar a caixa impressoras.Action = 5End WithEnd Sub'o resto das propriedades voce mesmo descobre senão o texto ficaria muito longo.
278 - Discando com o VB Enviado por: Olavo Henrique Dias
Para efetuar uma discagem pelo VB, é muito simples, insira o seguinte código:Crie um MsComm no seu Form;
Depois Digite:Mscomm1.CommPort = 2 '(Nº da porta em que está seu FAX/MODEM)Mscomm1.PortOpen = TrueMscomm1.Output = "ATDT 1234567" '(Discagem por Tom)MScomm1.Output = "ATDP 1234567" '(Discagem por Pulso)
279 - Limpando Combos Read-Only 3 Enviado por: Pablo R. Till
Vale ressaltar que se as opções 1 e 2 não funcionarem faça o seguinte:
128
Combo.Listindex = -1
Assim também o combo somente leitura vai ficar em branco, ficando também seu conteúdo inalterado.
280 - Correção dos ítens "Validando CPF" Enviado por: Adgenor L. Neto & Bernardo T. Lemelle
As duas funções descritas nas dicas existentes não funcionam quando o primeiro dígito do CPF é "0".Aqui está a função com as devidas correções :
Public Function Calc_CPF(VALOR As String)As Boolean 'Inicializa variaveis Dim dig1 As Integer Dim dig2 As Integer Dim Mult1 As Integer Dim Mult2 As Integer Dim x As Integer Dim y1 As Integer Dim y2 As Integer Let y1 = 9 Let y2 = 10 Let z2 = 11 Mult1 = 10 Mult2 = 11 If Len(VALOR) = 10 Then Let Mult1 = 9 Let Mult2 = 10 Let z2 = 10 Let y1 = 8 Let y2 = 9 End If For x = 1 To y1 dig1 = dig1 + (Val(Mid(VALOR, x, 1)) * Mult1) Mult1 = Mult1 - 1 Next For x = 1 To y2 dig2 = dig2 + (Val(Mid(VALOR, x, 1)) * Mult2) Mult2 = Mult2 - 1 Next dig1 = (dig1 * 10) Mod 11 dig2 = (dig2 * 10) Mod 11 If dig1 = 10 Then dig1 = 0 If dig2 = 10 Then dig2 = 0 Calc_CPF = True If Val(Mid$(VALOR, y2, 1)) <> dig1 Then Calc_CPF = False If Val(Mid$(VALOR, z2, 1)) <> dig2 Then Calc_CPF = False End Function
281 - Passando parâmetros via Form para filtrar registros no Crystal Reports Enviado por: Adriano Faria
Este exemplo utiliza um combobox em um form para filtrar dados em relatorio do Crystal Report (VB6 e CR6):Dim Auxrel as stringauxrel = ""auxrel = auxrel & "ToText({Tabela.Campo}) like '*" & Combo1.Text & "*'"CrystalReport1.SelectionFormula = auxrelCrystalReport1.CopiesToPrinter = 1CrystalReport1.ReportFileName = "c:\caminho\report.rpt"CrystalReport1.Action = 1
129
282 - Abrir Banco de Dados com senha Enviado por: Alvaro Cesar Falido
Private Sub Command1_Click() Dim Arq As Database Dim Tabela As Recordset Dim Senha As String Senha = ";pwd=teste" 'Atribua a mesma senha que foi definida no Access Set Arq = OpenDatabase(App.Path + "\dbsenha.Mdb", False, False, Senha) Set Tabela = Arq.OpenRecordset("Tabela1", dbOpenTable) Tabela.MoveFirst While Not Tabela.EOF List1.AddItem Tabela!nome Tabela.MoveNext WendEnd Sub
283 - Adicionar Hora e Data no Form Enviado por: Alyson de Lima Holanda
Crie dois Labels. Ex.: Labe1 e Label2.
Crie um objeto timer com a propriedade interval = 1000
E coloque essas linhas de código no timer1:label1 . caption = timelabel2 . caption = date
E aparecerá automaticamente a hora e a data atualizando de 1 em 1 segundo.
284 - Localização Detalhada. Enviado por: Antonio Mochi
Errar é humano por isto constantemente é colocado uma palavra escrita erroneamente em vários pontos de um sistema, como exemplo podemos escrever "Eclusão" no título de um botão e ao demostrar o sistema só nos resta dar um daqueles sorrisos amarelos e falar que será ajustado na próxima versão.A ferramenta localizar/substituir do editor de código é bem poderosa porém não verifica erros nas propriedades dos objetos, como o Caption de um botão.Para procurar isto utilize a seguinte linha de comando no prompt do DOS no local onde encontra os arquivos FRM:
FOR %i IN (*.FRM) DO FIND /I "palavra" %i
Com isto podemos verificar se há alguma palavra desejada a ser pesquisada tanto no código quanto na propriedade, se desejar insira
TempFile.TXT
No final da linha de instrução para enviar a saida para um arquivo texto e facilitar a procura.
285 - Definindo quais caracteres digitar num objeto textbox Enviado por: Caco
Para aceitar só números digite:Private Sub Text1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 13 '{Enter}, passa para o próximo campo. KeyAscii = 0 SendKeys "{TAB}" Case 8, 44, 48 To 57 ' {Backspace}, {,}, {0} a {9}, aceita estes caracteres. ' Continua Case 46 ' {.}, troca ponto por virgula. KeyAscii = 44 ' {,} Case Else KeyAscii = 0 ' Demais teclas, não aceita. End SelectEnd Sub
130
286 - Travando o Computador Enviado por: Carlos Assunção
Essa dica vai abrir novos programas iguais aos executados, até a memória acabar e travar tudo!No Form, no evento Load, Coloque a linha:
Dim REPRO as stringrepro = shell ("nome do programa.exe" ,1)'Se colocar essa linha 10 vezes, ira abrir 10 programas, e assim por diante!
287 - Objeto Printer e sua principais propriedades Enviado por: Carlos Peixoto
As propriedades principais do Printer são:ColorMode: Determina ou mostra a capacidade de impressão colorida do dispositivo.Copies: Especifica a quantidade de cópias de uma página que deve ser impressa.CurrentX: Determina a coordenada horizontal que a impressora irá imprimir.CurrentY: Determina a coordenada vertical que a impressora irá imprimir.DeviceName: Mostra o nome da impressora padrão suportada pelo dispositivoFontName: Determina qual fonte de letra a impressora usará para impressão.FontBold: Determina se a fonte será em negrito.FontItalic: Determina se a fonte será em itálico.Fonts: Fornece uma lista de todas as fontes disponíveis para impressão.FontSize: Determina o tamanho que a fonte de letra escolhida usará.FontUnderline: Determina se a fonte será sublinhada.Orientation: Determina a orientação do papel: Retrato ou Paisagem.
Usamos as constantes para definir o tipo escolhido:vbPRORPortrait 1 RetratovbPRORLandscape 2 PaisagemPage : Retorna o número da página que esta sendo impressa.PaperSize: Determinamos o tamanho do papel. Podemos usamos as seguintes constantes:vbPRPSLetter 1 Letter, 8 1/2 x 11 in.VbPRPSLetterSmall 2 Letter Small, 8 1/2 x 11 in.VbPRPSTabloid 3 Tabloid, 11 x 17 in.VbPRPSLedger 4 Ledger, 17 x 11 in.VbPRPSLegal 5 Legal, 8 1/2 x 14 in.VbPRPSStatement 6 Statement, 5 1/2 x 8 1/2 in.VbPRPSExecutive 7 Executive, 7 1/2 x 10 1/2 in.vbPRPSA3 8 A3, 297 x 420 mmvbPRPSA4 9 A4, 210 x 297 mmvbPRPSA4Small 10 A4 Small, 210 x 297 mmvbPRPSA5 11 A5, 148 x 210 mmvbPRPSB4 12 B4, 250 x 354 mmvbPRPSB5 13 B5, 182 x 257 mmvbPRPSFolio 14 Folio, 8 1/2 x 13 in.VbPRPSQuarto 15 Quarto, 215 x 275 mmvbPRPS10x14 16 10 x 14 in.vbPRPS11x17 17 11 x 17 in.VbPRPSNote 18 Note, 8 1/2 x 11 in.vbPRPSEnv919 Envelope #9, 3 7/8 x 8 7/8 in.vbPRPSEnv10 20 Envelope #10, 4 1/8 x 9 1/2 in.vbPRPSEnv11 21 Envelope #11, 4 1/2 x 10 3/8 in.vbPRPSEnv12 22 Envelope #12, 4 1/2 x 11 in.vbPRPSEnv14 23 Envelope #14, 5 x 11 1/2 in.VbPRPSCSheet 24 C size sheetvbPRPSDSheet 25 D size sheetvbPRPSESheet 26 E size sheetvbPRPSEnvDL 27 Envelope DL, 110 x 220 mmvbPRPSEnvC3 29 Envelope C3, 324 x 458 mmvbPRPSEnvC4 30 Envelope C4, 229 x 324 mmvbPRPSEnvC5 28 Envelope C5, 162 x 229 mmvbPRPSEnvC6 31 Envelope C6, 114 x 162 mmvbPRPSEnvC65 32 Envelope C65, 114 x 229 mmvbPRPSEnvB4 33 Envelope B4, 250 x 353 mmvbPRPSEnvB5 34 Envelope B5, 176 x 250 mmvbPRPSEnvB6 35 Envelope B6, 176 x 125 mmvbPRPSEnvItaly 36 Envelope, 110 x 230 mm
131
vbPRPSEnvMonarch 37 Envelope Monarch, 3 7/8 x 7 1/2 in.vbPRPSEnvPersonal 38 Envelope, 3 5/8 x 6 1/2 in.vbPRPSFanfoldUS 39 U.S. Standard Fanfold, 14 7/8 x 11 in.vbPRPSFanfoldStdGerman 40 German Standard Fanfold, 8 1/2 x 12 in.vbPRPSFanfoldLglGerman 41 German Legal Fanfold, 8 1/2 x 13 in.vbPRPSUser 256 User-definedPort: Retorna o nome da porta de impressão que será usada pela impressora padrão.PrintQuality: Determina ou seta a resolução que a impressora irá usar.VbPRPQDraft -1 Resolução DraftvbPRPQLow -2 Baixa ResoluçãovbPRPQMedium -3 Média ResoluçãovbPRPQHigh -4 Alta Resolução
Os métodos:
EndDoc: Finaliza a impressão de um relatórioKillDoc: Termina imediatamente a impressãoNewPage: Força a impressão passar para a próxima página.Print {expressão} : Imprime uma expressão ou variável especificada.
O Objeto Printer não aparece na caixa de ferramentas, nem possui um ícone como outros objetos. Ele é interno que não possui formato visual.
288 - Usuário logado (Novel) Enviado por: Davi Diogo
Uma das variáveis de ambiente da Novel consegue descobrir o nome do usuário que está logado.Dim Usuario as stringUsuario = Environ("User")
289 - Ao escolher um item de um menu, proteger todos os outros menus do formulário. Enviado por: Emerson Nascimento
Quando o usuário escolher uma determinada opção de um menu qualquer deum formulário, tornar todos os outros menus do formulário protegidos, ou seja, o usuário so pode abrir um menu, e escolher somente uma opção do menu aberto.
Option Explicit . . .Private Sub opcao1menu1_Click()gl_chamador = 1 ' gl_chamador = 1 indica que o formulário foi chamado
' pelo menu e não por outro formuláriosetar_true_false (False)Form1.MousePointer = 11Load Form2Form2.ShowForm1.MousePointer = 1End Sub . . .Private Sub opcao2menu1_Click()gl_chamador = 1setar_true_false (False)Form1.MousePointer = 11Load Form3Form3.ShowForm1.MousePointer = 1End Sub . . .Private Sub opcao1menu2_Click()gl_chamador = 1setar_true_false (False)
132
Form1.MousePointer = 11Load Form4Form4.ShowForm1.MousePointer = 1End Sub . . .Private Sub opcao2menu2_Click()gl_chamador = 1setar_true_false (False)Form1.MousePointer = 11Load Form5Form5.ShowForm1.MousePointer = 1End Sub . . .'Modulo1Option Explicit . . .Public gl_chamador As IntegerFunction setar_true_false(tf As Boolean)Form1.menu1.Item(1).Enabled = tfForm1.menu2.Item(2).Enabled = tfForm1.menu3.Item(3).Enabled = tfEnd Function . . .'Form2Private Sub sair_Click()If gl_chamador = 1 Then setar_true_false (True)End IfUnload MeEnd Sub'Form3Private Sub sair_Click()If gl_chamador = 1 Then setar_true_false (True)End IfUnload MeEnd Sub'Form4Private Sub sair_Click()If gl_chamador = 1 Then setar_true_false (True)End IfUnload MeEnd Sub'Form5Private Sub sair_Click()If gl_chamador = 1 Then setar_true_false (True)End IfUnload MeEnd Sub
290 - Como filtrar registros usando uma instrução SQL Enviado por: Fabio Feitoza
* Insira um controle DATA no seu formulário
* Vá até as propriedades Databasename e especifique o caminho e o nome do arquivo de banco de dados.
* Depois verifique se a propriedade RecordsetType é do tipo Dynaset ou Snapshot.
133
* Abaixo da propriedade RecordsetType estará a Recordsource onde você poderá especificar o nome da Tabela ou um instrução SQL.
OBS. Especificando a instrução SQL na propriedade Recordsource de um Data Control quando seu projeto for iniciado o DATA é atualizado automaticamente. Mas se você especificar esse comando dentro da área de codificação, terá que incluir o código para atualizar o controle.
Por exemplo:DATA1.RECORDSOURCE = "SELECT [Campo] FROM [Tabela] WHERE [Campo] [Condição]'"& "[Expressão]" & "'" DATA1.REFRESH[Campo] - Nome do campo do banco de dados[Tabela] - Nome da tabela do banco de dados[Condição] - LIKE, = , > ,< ,<> ,<= ,>=.[Expressão] - O que você quer filtrar.[texto digitado].
291 - Mudança de caractéres em uma string ( + fácil ) Enviado por: Fabio J. P. Silva
Para usar esta função é preciso um textboxe um label para visualizar o resultado.Exemplo:
Private Sub Text1_Change()Label1.Caption = MudaTexto(Text1.Text)
End SubFunction MudaTexto(palavra As String) As String
Dim i As IntegerFor i = 0 To Len(palavra)
palavra = Replace(palavra, "<", "[")palavra = Replace(palavra, ">", "]")palavra = Replace(palavra, "\", "|")palavra = Replace(palavra, ".", ",")'Quantas mudanças forem nescessárias
NextMudaTexto = palavra
End Function
292 - Como travar o mouse dentro de um formulário Enviado por: gabriel
Esta dica é muito boa. Com o código a seguir, você vai poder prender o cursor do mouse dentro de um formulário qualquer.Primeiro você cria um módulo contendo o seguinte código:
#If Win16 Then Type Retang esquerda As Integer topo As Integer direita As Integer baixo As Integer End Type Declare Sub ClipCursor Lib "User" (lpRetang As Retang) Declare Sub GetWindowRect Lib "User" (ByVal hWnd _ As Integer, lpRetang As Retang) Declare Function GetDesktopWindow Lib "User" () As Integer#Else Type Retang esquerda As Long topo As Long direita As Long baixo As Long End Type Declare Sub ClipCursor Lib "User32" (lpRetang As Retang) Declare Sub GetWindowRect Lib "User32" (ByVal hWnd _ As Integer, lpRetang As Retang) Declare Function GetDesktopWindow Lib "User32" () As Long#End If
134
/pre>
Depois você usa os códigos abaixo em um botão ou como quiser para travar e destravar:'restringe o movimento do mouseDim EstaJanela As RetangGetWindowRect Me.hWnd, EstaJanelaClipCursor EstaJanela'Libera no desktopDim DesktopWindow As RetangGetWindowRect GetDesktopWindow(), DesktopWindowClipCursor DesktopWindow/pre>
Pronto! Se você que entrou nesta dica sabe alguma coisa sobre criação de jogos no VB, pelo amor de Deus, me manda um e-mail!!!email: [email protected]
293 - Evitando erros na visualização Enviado por: Glauco Zamarim Variz
Quando indicamos uma TextBox com um determinado registro do banco de dados, cujo valor é nulo, é gerado um erro.Para que não aconteça isto, uso o seguinte código:
textbox.text = "" & Tabela!Campo
294 - Mensagens de erro e soluções Enviado por: Helmar Santos Faria
Para quem está usando o VB 6, depois de criarsua aplicação dá uma mensagem de "out of memory".Pra solucionar este problema, retire do seu pro-jeto a FM20.DLL da barra de ferramentas, é uma DLLque não é "distribuitable", aliás pra vc ver seuma DLL pode ou não ser distribuída, verifiqueno CD 1 do VB6 o diretório COMMON\REDIST\ o arqui-vo redist.txt, lá dentro tem as DLL, que vc podemandar junto com a sua aplicação!!!
É isto!!!
Abraços
295 - Problema com o setup Enviado por: Heros Carlos da Silva
Se você usa o controle MSCAL.OCX, no momento da instalação, se ocorrer o seguinte erro :
"c:\windows\system\$(dllselfregisterex) could not be registered because it could not be found
Adicione no arquivo VB5dep.ini as seguintes linhas : [MSCAL.OCX] Register=$(DLLSelfRegister) Dest=$(WinSysPath) Uses1=
296 - Conversao de bases Enviado por: Joao Bosco Ribeiro
Crie um formulario com 3 (três) controles textbox com os seguintes nomes: TxtRecebe, TxtConvertido e TxtRetornado.Crie uma frame e dentro dela inclua 4 contoles OpptionButton com o nome Option1 tendo como caption: Binário, Octal, Decimal de HexaInforme o nome no TextBox TxtRecebe e selecione a base para qual voce quer converter o número.
135
Sao duas funcoes: ConvOD e ConvDO.A ConvOD (Converte Outras bases para Decimal) {Function ConvOD(ByVal VlOri As String, ByVal Base As Integer) As Long} recebe como parametro um valor decimal inteiro longo (positivo) e a base para qual se deseja converter este valor.
A ConvDO (Converte Decimal para outras bases) {Function ConvDO(ByVal VlOri As Long, ByVal Base As Integer) As String} recebe como parametro uma string que contem um valor em uma base qualquer e a base em que esta este valor
O que torna estas funçoes bem pequenas é a recursividade.Dim MatInd(3) As IntegerDim Caracs As StringPrivate Sub Form_Load()MatInd(0) = 2MatInd(1) = 8MatInd(2) = 10MatInd(3) = 16Caracs = "0123456789ABCDEF"End SubPrivate Sub Option1_Click(Index As Integer)TxtConvertido = ConvDO(CLng(TxtRecebe), MatInd(Index))TxtRetornado = ConvOD(TxtConvertido, MatInd(Index))End SubFunction ConvDO(ByVal VlOri As Long, ByVal Base As Integer) As StringDim DVI As LongDim Rst As IntegerDVI = VlOri \ BaseRst = (VlOri Mod Base) + 1If DVI < Base Then ConvDO = Mid(Caracs, DVI + 1, 1) & Mid(Caracs, Rst, 1)Else ConvDO = ConvDO(DVI, Base) & Mid(Caracs, Rst, 1)End IfEnd FunctionFunction ConvOD(ByVal VlOri As String, ByVal Base As Integer) As LongDim PCar As IntegerDim Rst As StringPCar = InStr(Caracs, Left(Trim(VlOri), 1)) - 1VlOri = Mid(VlOri, 2)If Len(VlOri) >= 1 Then ConvOD = PCar * Base ^ Len(Trim(VlOri)) + ConvOD(VlOri, Base)Else ConvOD = PCarEnd IfEnd Function
297 - Fazendo aplicativos do estilo client /server Enviado por: João Milliet
É muito simples fazer aplicativos client e server.Você precisa do controle winsock.O que você deve fazer primeiro é um aplicativo server:Inclua o controle winosck no formulário e determine uma porta local (localPort) .Obs. A porta local não pode ser alterada durante a execução do programano caso, você inclui um botão de comando com o seguinte código:
winsock1.Listen
Ou seja, o winsock estará ouvindo para ver se tem algum aplicativo client chamando por conexão.Então você da um duplo-clique no controle winsock e seleciona a ação (no menu de ações do editor de código do VB) e seleciona a ação connectionRequestcolocando o seguinte código
winsock1.accept("")msgBox "pedido de conecção"
O que significa: o winsock vai aceitar a conexão pedida e vai aparecer uma caixa de diálogo com a mensagem "pedido de conexão"OK, o server está feito, agora você pode dar uns retoques no visual e outros.
136
Agora partimos para o aplicativo clientVocê deve inserir nele um controle winsockColoque um campo de texto chamado txtIPhost e outro chamado txtPorta (coloquei estes nomes apenas para simbolizar)insira um botão de comando e coloque o seguinte código:
'confere se o campo de texto txtIPhost está vazio ou idem para o campo txtPorta'Se algum deles estiver vazio o aplicativo mostrará uma caixa de diálogo com a mensagem if txtIPhost.Text = "" or txtPorta.Text = "" then if txtIPhost.text = "" then msgBox "Você precisa especificar o endereço da máquina host" end if if txtPorta.text = "" then msgBox "Você precisa especificar a porta da máquina host" end if else 'Configura o endereço host do winsock através do campo de text txtIPhost winsock winsock1.remoteHost = txtIPhost.Text 'Configura o endereço remoto da porta do winsock através do campo de texto txtPorta winsock1.remotePort = txtPorta.Text 'Executa conecção Winsock1.Connect
Então você agora pode criar funções, e depois envia-las, como por exemplo uma mensagem caixa de diálogo:Function exemplo() msgBox "Este é um exemplo de função"End Function
Então coloque o seguinte código num botão de comando (por exemplo)'dentro do parenteses o nome da funçãowinsock1.sendData (exemplo)
Pronto, temos um esquema client - server! OBS. sAINDA OCORREM ALGUMAS PEQUENAS FALHAS DURANTE A EXECUÇÃO DO PROGRAMA
298 - Como deixar seu formulario de ajuda com cara de Internet !!! Enviado por: Laurindo dos Santos
Escolha um controle no controle label coloque como FontUnderline.Na propriedade MouseMove() da label digite :
[label].ForeColor = &H00FF0000&
E no evento Form_Mousemove() digite :[label].ForeColor = &H0000C000&
Se ouver maior quantidade crie Arrays e use o For para mudar a cor dos mesmos.Obs.: Para ficar ainda melhor coloque a propriedade MousePointer = Custom e na propriedade MouseIcon procure o arquivoc:\Windows\Cursor\Hand-m.ico !!!
299 - Enviando erros de um Controle ou DLL para o aplicativo chamador Enviado por: Lenilson Marcenal
Public Sub RaiseError(Optional ByVal SrcName, _ Optional ByVal code = 0, _ Optional ByVal Message, _ Optional ByVal oConsulta As STIDB.Query)Dim sMsg As StringDim nLoop As Integer On Error Resume Next If Not IsMissing(SrcName) Then sMsg = sMsg & " Origem: " & SrcName & vbCr & vbLf If Not IsMissing(code) Then sMsg = sMsg & " Código: " & code & vbCr & vbLf If Not IsMissing(Message) Then sMsg = sMsg & " " & Message & vbCr & vbLf If sLogCreate Then If Not IsMissing(oConsulta) Then If Not oConsulta Is Nothing Then sMsg = sMsg & "----| Parâmetros da Consulta |-----------------------" & vbCr & vbLf sMsg = sMsg & " Numero de Parâmetros = " & oConsulta.Parameters.Count & vbCr & vbLf If oConsulta.Parameters.Count > 0 Then For nLoop = 0 To oConsulta.Parameters.Count - 1
137
sMsg = sMsg & " Parâmetro " & nLoop & ") Tipo : " & oConsulta.Parameters(nLoop).DataType & " - Valor : " & Left$(oConsulta.Parameters(nLoop).Value, 100) & vbCr & vbLf Next End If End If End If End If Err.Raise vbObjectError + code, , sMsgEnd Sub
300 - Alinhando números pela vírgula Enviado por: Lenilson Marcenal
Utilize esta função ao imprimir via código um relatório.Public Function AlinhaNumeroVirgula(ByVal Numero As Variant, _ ByVal TamanhoNumero As Integer, _ Optional ByVal QuantDecimais As Integer = 2) As String AlinhaNumeroVirgula = Format$(Format$(Numero, "0" & IIf(QuantDecimais > 0, "." & String(QuantDecimais, "0"), "")), String(TamanhoNumero, "@"))End Function
301 - Setando MousePointer de maneira segura Enviado por: Lenilson Marcenal
Quando tentava fazer uma função que tomaria algumtempo do usuário, sempre eu colocava a ampulhetado mouse (11) e depois retornava para o ponteiropadrao (0), sendo que se esta função fosse chamadade dentro de outra função que já fizesse isto apósa chamada da segunda função o ponteiro do mouseficava como padrão, agora sempre que vou mudar oponteiro do mouse utilizo esta função.
Public Function gMousePointer(ByVal nTipodoMouse As MousePointerConstants) As Integer gMousePointer = Screen.MousePointer If Screen.MousePointer <> nTipodoMouse Then Screen.MousePointer = nTipodoMouse End IfEnd Function
302 - como gravar um arquivo texto no HD Enviado por: Marcelo Caetano Costa Leite Dominici
Como gravar um arquivo texo(*.txt) no HD do seu PC?'************************************************dlg1.filter="arquivo de texo(*.txt) | *.txt"dlg1.showsave if dlg1.filename For Output As #1 open dlg1.filename For Output As #1 print #1,txttexto.text 'Salva string para 'arquivo close #1 end if'*************************************************
303 - Localizar Pastas do Windows Enviado por: Marcelo Zeri
'Código que recupera Pastas do Windows, como Strings:
138
'Ex: C:\Windows\Desktop, C:\Windows\Histórico...'-------------------'Código para o Form'-------------------
Option ExplicitPrivate Sub Form_Load() Call AchePastasEnd SubPrivate Sub AchePastas() MsgBox " 0- " & ListaPastas(0) & vbCrLf & _ " 2- " & ListaPastas(2) & vbCrLf & _ " 5- " & ListaPastas(5) & vbCrLf & _ " 6- " & ListaPastas(6) & vbCrLf & _ " 7- " & ListaPastas(7) & vbCrLf & _ " 8- " & ListaPastas(8) & vbCrLf & _ " 9- " & ListaPastas(9) & vbCrLf & _ "11- " & ListaPastas(11) & vbCrLf & _ "19- " & ListaPastas(19) & vbCrLf & _ "20- " & ListaPastas(20) & vbCrLf & _ "21- " & ListaPastas(21) & vbCrLf & _ "26- " & ListaPastas(26) & vbCrLf & _ "27- " & ListaPastas(27) & vbCrLf & _ "32- " & ListaPastas(32) & vbCrLf & _ "33- " & ListaPastas(33) & vbCrLf & _ "34- " & ListaPastas(34), , " Pastas do Windows" Unload MeEnd Sub
'------------------------'Código para o módulo BAS'------------------------Option Explicit
'APIsDeclare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As LongDeclare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ItemDaLista) As Long
'ConstantesPublic Type LOCMEIO CB As Long ABID As ByteEnd TypePublic Type ItemDaLista MKID As LOCMEIOEnd Type
'Função PúblicaPublic Function ListaPastas(ByVal CSIDL As Long) As StringDim Zz As LongDim StrDoPath As StringDim IDL As ItemDaListaConst NOERRO = 0Const TAM_MAX = 260On Error GoTo PareFuncao:Zz = SHGetSpecialFolderLocation(Form1.hWnd, CSIDL, IDL)'troque o nome do Form1 se ele tiver outro nomeIf Zz = NOERRO Then StrDoPath = Space$(TAM_MAX) Zz = SHGetPathFromIDList(ByVal IDL.MKID.CB, ByVal StrDoPath) If Zz Then ListaPastas = Left$(StrDoPath, InStr(StrDoPath, Chr$(0)) - 1)End IfExit FunctionPareFuncao:End Function
139
304 - PopMenu Randômico Enviado por: Marcelo Zeri
PopMenu Randômico:1-) Coloque 1 Label ( Label1 ) em 1 formulário e construa o seguinte Menu:CAPTIONS ( NAMES )&Arquivo ( mnuArquivo )... &Novo ( mnuNovo )... - ( separa1 )... &Abrir ( mnuAbrir )... - ( separa2 )... &Fechar ( mnuFechar )&Editar ( mnuEditar )... &Copiar ( mnuCopiar )... - ( separa3 )... &Recortar ( mnuRecortar )... - ( separa4 )... &Selecionar Tudo ( mnuSeleTudo )&Informações ( mnuInfo )... &Ajuda ( mnuAjuda )... - ( separa5 )... &Sobre o Programa ( mnuSobre )
2-) Cole o seguinte código no form:Option ExplicitPrivate Sub Form_Load() Label1.Left = 0 Label1.Width = Me.Width Label1.Alignment = 2 Label1.FontBold = True Label1.FontSize = 12 Label1 = "Clique o form com o botão direito do mouse por diversas vezes" Me.WindowState = 2End SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)Label1 = ""If Button = 2 Then Dim MeuValor% 'Randomize 'sorteia um número entre 1 e 3 para exibir l menu 'quando o botão direito do mouse for clicado 'se quiser adicionar + menus substitua 'o número 3 pelo numero de menus desejado
MeuValor% = Int((3 * Rnd) + 1) Select Case MeuValor% Case 1 Label1.ForeColor = QBColor(12) Label1 = "&Arquivo": PopupMenu mnuArquivo, 2, , , mnuNovo Case 2 Label1.ForeColor = QBColor(9) Label1 = "&Editar": PopupMenu mnuEditar, 2, , , mnuSeleTudo Case 3 Label1.ForeColor = QBColor(1) Label1 = "&Informações": PopupMenu mnuInfo, 2, , , mnuSobre End SelectEnd IfEnd SubPrivate Sub Form_Resize() Label1.Width = Me.Width Label1.Top = Height * 0.75End SubPrivate Sub Fechar_Click() Unload meEnd Sub
305 - Como fazer cálculos com horas facilmente. Enviado por: Marcio A. P.
140
Para início, vamos relembrar 1h = 60min. Isto é só para relembrar você de que para transformar h em min e só multiplicar por 60.
Todos os cálculos serão realizados em minutos, então para entrada de dados você deve ter dois controles diferentes, um para horas e outro para minutos. Converta as horas em minutos depois some com os minutos restantes do outro controle.
Agora você já tem o 1º. Valor (vamos chamar de x) . Agora faça o mesmo para um segundo valor (vamos chamar de y).
Preste atenção agora que você tem os dois valores “x” e “y”, você pode realizar qualquer operação com eles. Mas tem um porém, o valor resultante de uma operação entre “x” e “y” é em minutos.
Para resolver este problema crie um while da seguinte forma:
Suponhamos que seja feita a seguinte operação x + y = z
Neste caso o valor retornado será sempre positivo e > 0 então para essa ocasião temos.X = minutos
Y = minutos
Z = minutosdo while z >= 60z = z 60horas = horas + 1Loop
Obs.: sendo horas uma variável declarada. Para exibir o resultado faça text1.text = horas & “ : “ & z
Atenção se a operação for subtração deverá ser criado um while para números negativos:Do while z < 0 and z <= -60z = z + 60horas = horas +1Loop
Tome cuidado para não ficar preso em um loop infinito.
306 - Imprimir como no DOS. Enviado por: Marcos Joaquim Neto
Área: ImpressãoPara imprimir utilizando impressoras matriciais, a melhor forma é como no antigo DOS, utilizando os próprios carateres da impressora, pois a impressão através Gerenciador do Windows é muito lenta.Para isso, deve-se abrir a porta da impressora como se fosse um arquivo texto.Exemplo:
Open "LPT1:" for output as #1for x= 1 to 10 print #1, "Isto é um teste."nextprint #1, Chr(12);Close #1
Este exemplo imprime a frase "Isto é um teste." em 10 linhas e faz com que o ponto de impressão passe para a próxima página.Observação: Alguns caracteres acentuados das impressoras matriciais tem códigos diferentes daqueles utilizados pelo Windows.
307 - Função que converte uma cor em VB para cor HTML Enviado por: RodrigoAlves Peres
Public Function ColorTag(ByVal Cor As Long) As String
141
Dim Texto As String, corHexa As String Dim Num As Integer corHexa = Hex(Cor)
'Converte a cor númerica do'parametro em Hexadeximal'Obs.: A função Hex Retorna O Num em Texto
Texto = "" For Num = (6 - Len(corHexa)) To 1 Step -1 Texto = Texto & "0" Next ColorTag = "#" & Texto & corHexa
'Retorna #BBGGRREnd Function
Agora Pode ser Implementado Assim:Label1.Caption=ColorTag(vbblue)'Retorna #FF0000
Ou usar o CommonDialog:
'Chama a caixa de diálogo de corCommonDialog1.ShowColorLabel1.Caption = ColorTag(CommonDialog1.Color)
308 - Trocar caracteres em uma string Enviado por: Sergio Godoy
É possível criar uma função simples que troca um caracter por outro em uma string (Semelhante à dica já enviada, só que aperfeiçoada). Declare uma função:
Function TrocaString(ByVal sString as String, sOldChar as String, sNewChar as String) as StringWhile InStr(sString, sOldChar) > 0 Mid(sString,InStr(sString,sOldStr),1)=sNewStrWendTrocaString = sStringEnd Function
Depois, a chamada é simples. Exemplo:
MsgBox TrocaString("Ganhe muito ????? !","?","$")
Isso exibirá a mensagem 'Ganhe muito $$$$$ !'.
309 - Iluminar Campo Enviado por: Thadeu R. Ferraz
Estes dois comandos permitem mudar a cor do textbox quando recebe ou deixa o foco.Private Sub text1_GotFocus() text1.BackColor = &HC0FFFFEnd SubPrivate Sub text1_LostFocus() text1.BackColor = &H80000005End Sub
310 - Número de série do HD, sem API Enviado por: Vanclei Matheus
Para pegar o número de série de um HD utilize o seguinte código:Dim lSerial as LongDim fso As New FileSystemObject, drvDrive As Drive 'Pega as informações do drive c:Set drvDrive = fso.GetDrive(left(fso.GetDriveName("c:\"), 2)) 'Pega o número de série do HD
142
lSerial = drvDrive.SerialNumber
E não esqueça de adicionar aos references do seu projeto a seguinte biblioteca"Microsoft Scripting Runtime", senão não funciona
311 - Inserindo textos no crystal a partir do VB Enviado por: Washington Souzedo
As vezes você sente necessidade de inserir um periodo ou um texto na hora de execução do seu relatório.No VB. 1 . objetoCristal.formulas(0) = "NomeFormula = 'Relatorio ....'"NO Cristal. 1. Crie uma formula (Dê um nome qualquer). Clique em accept e insira o campo de formula no local desejado.
Quando o relatorio for impresso o Vb enviara a msg para o cristal eo sustituirá on de o nome da formula foi inserido..
312 - Para o seu texto ficar piscando Enviado por: Web'o
Coloque um timer, e este código no timer cominterval para 500. E depois crie uma label.Código do timer:
Private Sub Timer1_Click()If Label1.visible = true thenLabel1.visible=falseelseLabel1.visible=trueEnd ifEnd sub
313 - como criar Credits Scroll Enviado por: Wellington E. Souza
Credits Scroll
' Adicione um timer ao seu form com o valor do intervalo =1' Tenha 1 label ou mais em seu form (esse código pode rolar figuras, textboxes ...)
Private Sub Timer1_Timer() Label1.Top = Label1.Top - 32 'The bigger the number, the faster the scroll' add any other labels you want to scroll....' also try this:' Label1.Left = Label1.Left - 32' to scroll sideways
End Sub
314 - Visualizador de imagem simples Enviado por: William
Para montar um visualizador de imagem simples, basta abrir um noveo projeto,inserir os seguintes controles FileListBox, DirListbox e Image, em seguida escrevaas seguites linhas:
Private Sub Dir1_Change() File1 = Dir1 'Amarra os arquivos às pastaEnd SubPrivate Sub File1_Click() Chdir(Dir1) 'Quando mudar de dirtório atualiza o File1 Image1.Picture = LoadPicture(File1)End SubPrivate Sub Form_Load() File1.Pattern = *."bmp;*.jpg;*.gif;*.cur;*.wmf;*.ico"'Filtra o File1, para exibição somente deste arquivos
143
End Sub
Obviamente que esta última lina poderá ser substituida, simplesmente inserindo as informações entre parentese napropriedade Pattern do componente File1.
Outra dica e verificar a propriedade Strech da Image, para limeitar ou não o tamanho da imagem a ser exibida.
Quem tiver interesse em um visualizador Freeware da Lizaro Software, basta enviar um e-mail para o endereço acima.
Um grande abraços a todos e até breve.
315 - Como pegar o diretório do windows com uma só linha de comando Enviado por: ]Anjo[
Dim Windows'Nem conta como linha, pois sem ela funciona'tambémWindows = Environ("Windir")'Essa variável de abiente é setada no'c:\msdos.sys, é onde é armazenado o nome do'diretório do windowsMsgBox Windows'Também não conta como linha'Retorna: "C:\Windows"'Tks ao midnait pelo help
316 - Redimensionamento dos controles no Form Enviado por: Alexandre Gomiero
Se vc precisa deixar habilitado o redimensionamento da janela p/ o usuário e os controles dispõem-se automaticamente no form, conforme o tamanho, coloque no Form_Resize() o seguinte:
If Me.WindowsState <> 1 Then'Se quiser que o controle mude de tamanhocontrole.height = form.height - (diferença entre e o form.height e controle.height, inicialmente)controle.width = form.width - (diferença entre o form.width e controle.width, inicialmente)'Se quiser que o controle mexa-se no formcontrole.top = (em alguns casos é fixo (0 por exemplo), se não for, faça as contas onde o controle deverá aparecer se o form for redimensionado, por exemplo, (form.height/2) - controle.height, se for p/ o controle aparecer no meio do formcontrole.left = (idem acima, mas em vez de .height é .width)End If
317 - Símbolo da moeda Enviado por: Anderson J. C. Garcia
O simbolo da moeda definido nas configurações regionais do sistema pode ser obtido através da API GetLocaleInfo. Segue código:
'Como obter o simbolo da moedaOption ExplicitPublic gstrCurrencySymbol As StringPrivate Declare Function GetLocaleInfo Lib "kernel32" _Alias "GetLocaleInfoA" (ByVal Locale As Long, _ByVal LCType As Long, ByVal lpLCData As String, _ByVal cchData As Long) As LongPrivate Declare Function GetUserDefaultLCID% Lib "kernel32" ()Private Const LOCALE_SCURRENCY = &H14Sub Main()Dim iRet1 As LongDim iRet2 As LongDim lpLCDataVar As StringDim Pos As IntegerDim Locale As Long
144
Locale = GetUserDefaultLCID()iRet1 = GetLocaleInfo(Locale, LOCALE_SCURRENCY, lpLCDataVar, 0)gstrCurrencySymbol = String$(iRet1, 0)iRet2 = GetLocaleInfo(Locale, LOCALE_SCURRENCY, gstrCurrencySymbol, iRet1)Pos = InStr(gstrCurrencySymbol, Chr$(0))If Pos > 0 ThengstrCurrencySymbol = Left$(gstrCurrencySymbol, Pos - 1)End IfMsgBox "O simbolo da moeda é " & gstrCurrencySymbol, vbInformationEnd Sub
318 - Pontos de Inserção (Caret) Personalizáveis Enviado por: Antonio Aristides Mochi Jr.
'Esta programa demostra como personalizar os'pontos de inserção de um text-box modificando o'seu formato e o tempo de piscada'Crie um novo formulário com dois TextBox e copie'o código abaixo para fazer o teste.''-----------------------------------------Option ExplicitPrivate Declare Function CreateCaret Lib "user32" (ByVal hWnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As LongPrivate Declare Function SetCaretBlinkTime Lib "user32" (ByVal wMSeconds As Long) As LongPrivate Declare Function ShowCaret Lib "user32" (ByVal hWnd As Long) As LongPrivate Declare Function GetCaretBlinkTime Lib "user32" () As Long'VARIAVEIS PRIVADASPrivate lDuracaoBlink_Text2 As Long'CONSTANTESPrivate Const CARET_EM_PRETO As Long = 0Private Const CARET_EM_CINZA As Long = 1Private Sub Text2_GotFocus()'SALVAR A DURAÇÃO DE PISCADA (BLINK) DO PONTO DE INSERÇÃO (CARET)lDuracaoBlink_Text2 = GetCaretBlinkTime()'CRIAR E MOSTRAR O NOVO FORMATO PARA O PONTO DE INSERÇÃOCreateCaret Text2.hWnd, CARET_EM_CINZA, 5, 15ShowCaret Text2.hWnd'DEFINIR NOVA DURAÇÃO DE PISCADASetCaretBlinkTime 200End SubPrivate Sub Text2_LostFocus()'RETORNAR O VALOR DA DURAÇÃO DE PISCADA (BLINK)SetCaretBlinkTime lDuracaoBlink_Text2End Sub'--------------------------------------------
319 - Descobrindo se o SO é Windows 95 ou Windows NT Enviado por: Antonio Aristides Mochi Jr.
'DEMONSTRAÇÃO DE IDENTIFICAÇÃO DO SISTEMA'OPERACIONAL CORRENTE.'''FUNÇÕESPublic Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long'CONSTANTESPublic Const VER_PLATFORM_WIN32_NT As Long = 2Public Const VER_PLATFORM_WIN32_WINDOWS As Long = 1Public Const VER_PLATFORM_WIN32s As Long = 0'TIPOSPublic Type OSVERSIONINFOdwOSVersionInfoSize As LongdwMajorVersion As LongdwMinorVersion As LongdwBuildNumber As Long
145
dwPlatformId As LongszCSDVersion As String * 128End Type'Public Function VerificarSistemaOperacional() As StringDim osvSistema As OSVERSIONINFODim sRetorno As StringOn Error GoTo ERROosvSistema.dwOSVersionInfoSize = Len(osvSistema)If GetVersionEx(osvSistema) = 0 ThensRetorno = "SISTEMA OPERACIONAL NÃO IDENTIFICADO"ElseIf osvSistema.dwPlatformId = VER_PLATFORM_WIN32_NT ThensRetorno = "WINDOWS NT"ElseIf osvSistema.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS ThensRetorno = "WINDOWS 95"ElseIf osvSistema.dwPlatformId = VER_PLATFORM_WIN32s ThensRetorno = "WINDOWS 32s"End IfEnd IfVerificarSistemaOperacional = sRetornoExit FunctionERRO:VerificarSistemaOperacional = "ERRO AO IDENTIFICAR O SISTEMA OPERACIONAL"End Function
320 - Espiral Enviado por: Armando Miani Neto
Private Sub Form_Load()Timer1.Interval = 25End SubPrivate Sub Timer1_Timer()Dim CX, CY, Radius, LimitScaleMode = 3CX = ScaleWidth / 2CY = ScaleHeight / 2If CX > CY Then Limit = CY Else Limit = CXFor Radius = 0 To LimitCircle (CX, CY), Radius, RGB(Rnd * 255, Rnd * 255, Rnd * 255)Next RadiusEnd Sub
321 - mapear unidade de rede Enviado por: bruno
Mapear uma unidade de rede;Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal _lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName _As String) As LongDeclare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" _(ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName _As Long) As LongDeclare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" _(ByVal lpszName As String, ByVal bForce As Long) As LongDim Caminho As String, Unidade as StringCaminho = "\\Computador\Caminho"Unidade = "I:"'Realiza conexãoWNetAddConnection Caminho , "Se tiver senha, digite á aqui", unidade'Consulta caminho de uma determinada conexão, _'neste caso, na variável caminho será armazenado o local do caminho _'atual ref. a unidadeWNetGetConnection Unidade, Caminho, 255)'DesconectaWNetCancelConnection Unidade, True
146
322 - Enviando registro para o Excel Enviado por: Carlos Gentini e Carlos Gama
Uma Maniera facil de Gera Registro de uma tabela em excel.Dim RS As RecordsetDim DBanco As DataBaseDim XL As ObjectDim Num As LongDim Alfabeto As VariantDim Campos() As StringDim Letras As Stringsub CommandButton_Click()Set XL = CreateObject("excel.Application")XL.Workbooks.AddSet XL = XL.Application.WorksheetsCall GeraRecordsetIf RS.RecordCount <> 0 ThenRS.CloseDBanco.CloseSet XL = nothingEnd SubPrivate Sub GeraRecordset()Alfabeto = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", _"AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ", _"BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ", _"CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CI", "CJ", "CK", "CL", "CM", "CN", "CO", "CP", "CQ", "CR", "CS", "CT", "CU", "CV", "CW", "CX", "CY", "CZ", _"DA", "DB", "DC", "DD", "DE", "DF", "DG", "DH", "DI", "DJ", "DK", "DL", "DM", "DN", "DO", "DP", "DQ", "DR", "DS", "DT", "DU", "DV", "DW", "DX", "DY", "DZ")Set DBanco = OpenDatabase(caminho)Set RS = DBanco.OpenRecordset(Tabela, dbOpenDynaset)ReDim Campos(RS.Fields.Count)For Num = 0 To RS.Fields.Count - 1Campos(Num) = RS.Fields(Num).NameNextFor Num = 0 To RS.Fields.Count - 1Letras = Alfabeto(Num) & "1"XL("Plan1").Range(Letras).Value = Campos(Num)Next'Copia o todos o recordeset aberto para o ExcelXL("Plan1").Range("A2").CopyFromRecordset RSEnd Sub
323 - Imprimir um Relatório em Crystal em rede Enviado por: CArlos Gentini e Carlos Gama
Se vc tem um aplicativo em VB, e seu relatórios são em crystal, vai um dica de como roda-los em redeCrystal.DataFiles(0) = "\\Teste\Relatorio\Banco de dados"Crystal.ReportFileName = "\\Teste\Relatorio\ report.rpt"Imprimir.Destination = crptToPrinterImprimir.Action = 0
324 - Letreiro com LABEL Enviado por: Carlos Peixoto
Private Sub Form1_Load()Timer1.Interval = 150Timer1.Enabled = TrueLabel1.Caption = "Letreiro com LABEL"End SubPrivate Sub Timer1_Timer()Label1.Left = Label1.Left - 100If Label1.Left < -Label1.Width + 10 Then Label1.Left = Me.Width + 100End Sub
147
325 - Qual o último dia do mês X e ano Y?? Enviado por: Carlos Peixoto
Option ExplicitDim data As DateFunction Ultimo_Dia(mes As String) As IntegerFor Ultimo_Dia = 31 To 28 Step -1If IsDate(Ultimo_Dia & "/" & mes & "/" & Year(Date)) ThenExit ForEnd IfNextMe.Caption = Ultimo_Dia & "/" & Format$(data, "mm/yyyy")End FunctionPrivate Sub Form_Click()data = Text1.TextUltimo_Dia (Format$(data, "mm"))End Sub
326 - Pegar WinDir em uma linha!! Enviado por: Carlos Peixoto
Bem, é muito simples:Msgbox Environ("windir")
Pronto!!!
327 - Atualizar Tabelas do DBase para o Access via VB Enviado por: Cesar Villela - Curitiba/PR
Dim dbAccess As New ADODB.ConnectionDim dbDbase As New ADODB.ConnectionDim TabelaAccess As New ADODB.RecordsetDim TabelaDBase As New ADODB.RecordsetdbAccess.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=;Persist Security Info=false"dbDBase.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=Arquivos do dBASE;Initial Catalog="dbAccess.CursorLocation = adUseServerdbDBase.CursorLocation = adUseClientScreen.MousePointer = vbHourglassTabelaAccess.Open "", dbAccess, adOpenKeyset, adLockOptimisticTabelaDBase.Open "", dbBase, adOpenKeyset, adLockOptimisticWhile Not TabelaAccess.EOFTabelaAccess.AddNew'Repetir para cada campo a atualizar...TabelaAccess.Fields("").Value = TabelaDBase.Fields("").ValueTabelaDBase.MoveNextWendScreen.MousePointer = vbDefaultMsgBox "Atualização da tabela FATURA1.DBF, foi concluída com êxito!", vbInformation, "Conclusão"
Observação: As tabelas tem q ter a mesma estrutura de dados.
328 - Correção em "Correção dos ítens "Validando CPF" " Enviado por: Charles Dayan
Quando o número 11111111111 é colocado para ser testado na função de validação de CPF esta diz que este é um número válido.Coloque um teste antes de envia-lo:
Sub Command1_Click()If Not (Text1.Text = "11111111111") Thenresp = Calc_CPF(Text1.Text)ElseLabel1.Caption = "Valor não aceito!"GoTo 200End IfIf resp ThenLabel1.Caption = "Válido"Else
148
Label1.Caption = "Inválido"End IfEnd Sub
329 - Inconsistencia no caminho da AJUDA Enviado por: Christian Chagas
Se sua ajuda for colocada na configuração do progeto, "Menu project", ela não será achada depois da instalação, para evitar isso use o seguinte:
App.HelpFile = App.Path & "Ajuda\Ajuda.hlp"Onde Ajuda é um diretório dentro do diretório do seu projeto, e Ajuda.hlp é o nome da sua ajuda.
330 - Substituindo o IF Enviado por: Claudio
Ao invés de voce usar:Private Sub Command1_Click()Dim humano As Stringhumano = Text1.TextIf humano = "masculino" ThenMsgBox ("Sexo Masculino")ElseIf humano = "feminino" ThenMsgBox ("Sexo Feminino")ElseIf humano = "menino" Or humano = "menina" ThenMsgBox ("Crianças")ElseMsgBox ("Humano Invalido")End IfEnd IfEnd IfEnd Sub
Use:Private Sub Command1_Click()Dim humano As Stringhumano = Text1.TextSelect Case humanoCase "masculino"MsgBox ("Sexo Masculino")Case "Feminino"MsgBox ("Sexo Feminino")Case "menino"MsgBox ("Criancas")Case "menina"MsgBox ("Criancas")Case ElseMsgBox ("Humano Inválido")End SelectEnd Sub
331 - Acesso ao Oracle Enviado por: Edi Carlos L. Ortega
Em um módulo declare as seguintes variáveis globais:Global strCn As StringGlobal strUser As StringGlobal strPass As StringGlobal strDSN As StringGlobal strCrystal As StringstrCn = "ODBC;DSN=ORACLE;UID=" & txtUser.Text & ";PWD=" & txtPassword.Text & ";ConnectString=" & txtDatabase.TextstrUser = txtUser.TextstrDSN = txtDatabase.TextstrPass = txtPassword.TextstrCrystal = "DSN=" & strDSN & ";UID=" & strPass & ";PWD=" & strPass & ";DSQ="Crie um formulário com os campos:
149
txtUser: para Nome de UsuáriotxtDatabase para Nome do BancotxtPassword para Senha do Usuário
Pronto o VB irá conectar-se ao banco digitado pelo usuário.
332 - Identificação das mensagens do Oracle Enviado por: Edi Carlos L. Ortega
Coloque em um módulo a seguinte função:Dim cX As String, nX As IntegerFor nX = Errors.Count - 1 To 0 Step -1cX = cX & CStr(Errors(nX).Number) & " " & Errors(nX).Description & vbNewLineNext nXMsgBox cX, vbCritical + vbOKOnly, "Sistema CB"
Em seus formulários adicione rotinas de depuração de errors que chamem esta função e pronto o VB utilizará esta mensagem para identificar as mensagens do Oracle e também as mensagens do próprio VB. Qualquer dúvida mande-me um email.
333 - SEEK Enviado por: FCCD
Para construir um consulta rápida por campos númericos faça o seguinte: Carrege sua base dados com Table e depois no load do formulário carregeseu index e faça os comandos abaixos...
Private sub Form_Load()Data1.Recordest.Index = "PrimaryKey"end SubPrivate Sub Command1_Click()Dim Cod as LongCod = InputBox("Digite o Código")data1.Recordset.Seek "=", Codif data1.recordest.NoMatch thenmsgbox "Código não encontrado"end ifend Sub
334 - Formulario de Senha Enviado por: Felipe Durante
'Vou precisar de 2 textbox e um commandButonno text2 altere a opção de PassowordChar para *command1_Click()'Indica a condição para a senha ser aceitaif text1.text="Visual" and text2.text="Basic" thenMsgBox "Senha Aceita"form2.showelse'se a senha não for aceitamsgBox"Senha Incorreta"end ifend sub
335 - Variável Null ou Vazio Enviado por: Gydian
No VB uma variável pode ser null ou "" (vazia). Para simplificar podesmos usar:if variavel & "" = "" then...
em vez deif variavel = "" or variavel = null then...
isto não altera o valor da variável, apenas na comparação, "transforma" uma variavel null em "" (vazia) para fazer a comparação.
336 - Validação de datas ultra simples. Enviado por: Gydian
150
Variavel = IsDate(minha_data)Devolve True se é uma data possivel.
Devolve False se é uma data impossivel.
337 - Trocar Botoes do Mouse Enviado por: Heliomar Pereira Marques dos Santos
'Declare esta API no MóduloDeclare Function SwapMouseButton& Lib _"user32" (ByVal bSwap As Boolean)'Dentro do Form você apenas seta o valor FALSE ou TRUE para bSwap'ExemploPrivate Sub Command1_Click()SwapMouseButton& (True)End SubPrivate Sub Command2_Click()SwapMouseButton& (False)End Sub
338 - Limpar todos os MaskEditBox do formulário corrente Enviado por: Hugo Stobienia Wannmacher
'Limpa todos os MskEdBox do formulárioPublic Sub pClearMaskEdBox()On Error Resume NextDim intX As IntegerFor intX = 0 To Screen.ActiveForm.CountIf TypeOf Screen.ActiveForm.Controls(intX) Is MaskEdBox ThenScreen.ActiveForm.Controls(intX).Text = fStrConv(UCase(Screen.ActiveForm.Controls(intX).Mask), intX)End IfNextEnd SubPublic Function fStrConv(MyNewMask As String, MyIndex As Integer) As StringOn Error Resume NextDim intY As IntegerDim strChar As StringFor intY = 1 To Len(MyNewMask)If UCase(Mid(MyNewMask, intY, 1)) = "A" Or Mid(MyNewMask, intY, 1) = "9" Or Mid(MyNewMask, intY, 1) = "?" Or Mid(MyNewMask, intY, 1) = "#" Or UCase(Mid(MyNewMask, intY, 1)) = "C" Or Mid(MyNewMask, intY, 1) = "&" ThenstrChar = Screen.ActiveForm.Controls(MyIndex).PromptCharElsestrChar = Mid(MyNewMask, intY, 1)End IffStrConv = fStrConv & strCharNextEnd Function
339 - Criar ícone no Desktop da máquina, em tempo de SETUP... Enviado por: Joerbeth
Visando uma maneira adequada, para criar esse ícone, descobrí uma muitofácil, em tempo de Setup do aplicativo... segue os passos:1. Abrir o Setup.Vbp do \VB\SetupKit\Setup1, depois de aberto, selecionar oForm (frmBegin), nesse Form, na seção General, colocar a seguinte linha:
Private Declare Function fCreateShellLink Lib "STKIT432.DLL" (ByVallpstrFolderName As String, ByVal lpstrLinkName As String, ByVallpstrLinkPath As String, ByVal lpstrLinkArgs As String) As Long
2. No mesmo Form, tem um botão de comando chamado (cmdInstall), as seguinteslinhas de código já se encontram:
Private Sub cmdInstall_Click()If IsValidDestDir(gstrDestDir) = True ThenUnload MeDoEventsEnd If
Você terá que acrescentar, logo após o End If, más está pequena linha de
151
código:fCreateShellLink "..\..\desktop", "NomeDoAtalho","c:\Diretório\ArquivoExecutável.Exe", ""
OBS.: Após incluir as linhas no Setup1.Vbp, compilar o mesmo....NOTA: em NomeDoAtalho, vc terá que colocar o nome que deseja que o atalhocriado tenha. Em \Diretório\ArquivoExecutável.Exe, significa o caminho e onome do arquivo .EXE.... exemplo:\Windows\Calc.ExeAPI:
Private Declare Function fCreateShellLink Lib "STKIT432.DLL" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArgs As String) As Long
Depois para criar um atalho no desktop use:fCreateShellLink "..\..\desktop", "texto do atalho", "c:\dir\programa.exe", ""
OBS.: Esse só terá efeito, com o arquivo: STKIT432.dllValeu ?!.Joerbeth S. Costa
Copyright (c) 1996-2001 Visual Basic Brasi
340 - Conecção com o SQL Server 7.0 Enviado por: JOSE ROBERTO ARAUJO TEIXEIRA
Para abrir uma conecção com o SQL Server x.1) Adicionar no Projeto a referência MICROSOFT REMOTE DATA OBJECT 2.0 OU POSTEIOR2) Crie uma variavel global para a conecção3) Adicione esta linha no seu FORM
Set conLog = rdoEnvironments(0).OpenConnection(dsName:="", _Prompt:=rdDriverNoPrompt, _Connect:="uid=USUARIO;pwd=SENHA;driver={SQL Server};" _& "server=Nome do seu Servidor ;database=Nome do banco;")
Veja que a variavel criada global é a conLog.Depois é so criar as demais variveis para abertura de tabelas, insert´s,update´s,etc...
ROBERTO TEIXEIRA. SAO LUIS-MA
341 - Como simular um texto sendo digitado em tempo de execução em um label Enviado por: Leandro Gonçalves (MoKe)
Crie um Form..e nele ponha um label, um botão, e um timer...(valor default do Interval do Timer é 100)Mude o nome do Botão para "MostrarMsg"
Option ExplicitPublic Contar As IntegerPublic Mensagem As StringPublic TamanhoMsg As IntegerPrivate Sub Form_Load()Timer1.Enabled = FalseEnd SubPublic Sub MostrarMsg_Click()Contar = 0Timer1.Enabled = TrueMensagem = "Mensagem que você quiser"TamanhoMsg = Len(Mensagem)Call Timer1_TimerEnd SubPrivate Sub Timer1_Timer()If Contar < TamanhoMsg ThenContar = Contar + 1Label1.Caption = Mid(Mensagem, 1, Contar)End IfEnd Sub
342 - Maneira facil de Criptografar senhas em seu Programa Enviado por: Leandro Navega de Faria
Marcando a caixinha TxtBox1, ou seja, onde devera ser digitado a senha e mudar a propriedade PasswordChar para * ou outra letra/sinal que devera aparecer no lugar da senha.
343 - Arquivos somente leitura ... Enviado por: Marcelo
152
Antes de acessar um arquivo para alterações ou para removê-lo, utilize o comando:SetAttr App.Path & "\BANCO.MDB", vbNormal' retorna o atributo de arquivo
Pois se acidentalmente o usuário leigo alterar a propriedade do arquivo, por exemplo para ARQUIVO SOMENTE LEITURA, ocasionará um erro de execução no programa.
344 - Gravar um BMP em um campo Image do SQL usando RDO Enviado por: Marcelo Nagy
Aqui vai a rotina:Dim cn As New rdoConnectionDim qy As rdoResultsetPrivate Sub Command1_Click()ChunkSize = 16384login = "usuario"pass = "senha"Timeout = 15cn.CursorDriver = rdUseOdbcbanco = "BANCO"Conexao = "uid=" & login & ";pwd=" & pass & ";DSN=" & banco & ";driver={SQL Server}"cn.Connect = Conexaocn.QueryTimeout = Timeoutcn.LoginTimeout = Timeout' On Error GoTo errocn.Closecn.EstablishConnection rdDriverNoPrompt, FalseSus = Truesconectou = TrueSet qy = cn.OpenResultset("Select tabela_cod,tabela_img from BANCO..tabela ", rdOpenKeyset, 4, rdExecDirect)qy.AddNewqy(0) = 2' rotina de gravação de imagem no campo tabela_imgDataFile = 2Dim Chunk() As ByteOpen "c:\imagem\teste.BMP" For Binary Access Read As DataFileFl = LOF(DataFile)If Fl = 0 ThenClose DataFileScreen.MousePointer = vbDefaultExit SubEnd IfChunks = Fl \ ChunkSizeFragment = Fl Mod ChunkSizeqy(1).AppendChunk NullReDim Chunk(Fragment)Get DataFile, , Chunk()qy(1).AppendChunk Chunk()ReDim Chunk(ChunkSize)For i = 1 To ChunksGet DataFile, , Chunk()qy(1).AppendChunk Chunk()Next iClose DataFileqy.UpdateEnd Sub
BACANA !!!
345 - Filtrando Datas no Crystal Enviado por: Marcelo Nagy
Para imprimir registros que satisfaçam uma determinada condição, usamos a seguinte codificação:relatorio.SelectionFormula = "{tabela.nome} = Marcelo Nagy'"relatorio.Action = 1
O problema, é que este esquema só funciona para dados do tipo string e na hora de tentar fazer isto com uma data, é erro de fórmula com certeza. Então use da seguinte maneira, por exemplo para mostrar registros a partir de 13/12/1975:
relatorio.SelectionFormula = "{tabela.data} >= Date(1975,12,13)"relatorio.Action = 1
É isso aí !!!!!
153
346 - Enviando um email pelo Outlook. Enviado por: Marcelo Nagy
Primeiro, selecione o componente MICROSOFT MAPI CONTROLS. Depois acrecente no seu form o objeto MAPISESSION e MAPIMESSAGES que apareceram na sua toolbox. Então use a seguinte codificação para enviar uma mensagem:
mapisession.Action = 1mapimessages1.SessionID = mapisession.SessionIDmapimessages1.Composemapimessages1.RecipAddress = "[email protected]"mapimessages1.AddressResolveUI = Truemapimessages1.ResolveNamemapimessages1.MsgSubject = "Titulo da minha mensagem"mapimessages1.MsgNoteText = "conteúdo da minha mensagem, blablablablabla... "mapimessages1.Send False
BACANA !!!!
347 - API para LOGOFF, REBOOT, DESLIGAR o Computador Enviado por: Marcelo Zeri
'API para LOGOFF, REBOOT, DESLIGAR o Computador'Abra 1 novo projeto, adicione 1 label1, 1 text1, 1 command1 e 1 módulo .bas'Código para o módulo .basOption ExplicitPublic Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As LongPublic Const EWX_SHUTDOWN = 1Public Const EWX_REBOOT = 2Public Const EWX_LOGOFF = 0'Código para o formOption ExplicitPrivate Sub Command1_Click()Dim VariavSelect Case Text1Case "0"If MsgBox("Deseja fazer Logoff agora?", vbExclamation + vbSystemModal + vbYesNo) = vbYes ThenVariav = ExitWindowsEx(EWX_LOGOFF, 0)End IfCase "1"If MsgBox("Deseja desligar o Computador agora?", vbExclamation + vbSystemModal + vbYesNo) = vbYes ThenVariav = ExitWindowsEx(EWX_SHUTDOWN, 1)End IfCase "2"If MsgBox("Deseja reiniciar o Windows agora?", vbExclamation + vbSystemModal + vbYesNo) = vbYes ThenVariav = ExitWindowsEx(EWX_REBOOT, 2)End IfCase ElseMsgBox Label1Exit SubEnd SelectEnd SubPrivate Sub Form_Load()Text1 = ""Label1.Left = Me.Width * 0.1Label1.Width = Me.Width * 0.8Label1.Height = 400Label1 = "Digite na caixa texto: 0 para logoff, 1 para desligar o Computador, 2 para reiniciar o Windows"End Sub
348 - Delimitar o tamanho mímino e máximo de um form Enviado por: Marcelo Zeri
'CÓDIGO PARA DELIMITAR O TAMANHO MÁXIMO E MÍNIMO DE UM FORMULÁRIO'código para o módulo .basOption ExplicitPublic OldWindowProc As LongDeclare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongDeclare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongDeclare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As
154
Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Const WM_GETMINMAXINFO = &H24Type POINTAPIx As Longy As LongEnd TypeType MINMAXINFOptReserved As POINTAPIptMaxSize As POINTAPIptMaxPosition As POINTAPIptMinTrackSize As POINTAPIptMaxTrackSize As POINTAPIEnd TypePublic Function SubClass1_WndMessage(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As LongIf Msg = WM_GETMINMAXINFO ThenDim MinMax As MINMAXINFOCopyMemory MinMax, ByVal lp, Len(MinMax)' Altere estes valores para aumentar ou diminuir o tamanho mínimoMinMax.ptMinTrackSize.x = 4800 \ Screen.TwipsPerPixelXMinMax.ptMinTrackSize.y = 3000 \ Screen.TwipsPerPixelY'se quiser delimitar um tamanho máximo remova os'apostrofes destas duas linhas abaixo: e altere a propriedade'do formulário: MaxButton = False' MinMax.ptMaxTrackSize.x = Screen.Width \ Screen.TwipsPerPixelX \ 2' MinMax.ptMaxTrackSize.y = 3480 \ Screen.TwipsPerPixelYCopyMemory ByVal lp, MinMax, Len(MinMax)SubClass1_WndMessage = 1Exit FunctionEnd IfSubClass1_WndMessage = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)End Function'código para o form'O formulário deve ter a propriedade'BorderStyle = 2- SizableOption ExplicitPrivate Const GWL_WNDPROC = (-4)Private Sub Form_Load()OldWindowProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)Me.Width = 7000Me.Height = 4000Me.Caption = "Posicione o mouse num canto e resize o form!"'para aumentar o limite do tamanho do form'altere os valores do módulo basEnd SubPrivate Sub Form_Unload(Cancel As Integer)'importante: comando para remover o código da memóriaCall SetWindowLong(Me.hwnd, GWL_WNDPROC, OldWindowProc)End Sub
349 - Abrir automaticamente um Combo-box quando ele receber o foco: Enviado por: Marcelo Zeri
Abra um novo projeto, insira um combo-box e cole o código abaixo no form:Option ExplicitPrivate Declare Function SendMessage Lib "user32" _Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ByVal wParam As Long, lParam As Long) As LongPrivate Const CB_SHOWDROPDOWN = &H14FPrivate Sub Combo1_GotFocus()Dim lRet As LonglRet = SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)End SubPrivate Sub Form_Load()Combo1.ClearCombo1.AddItem "111111"Combo1.AddItem "222222"Combo1.AddItem "333333"Combo1.AddItem "444444"Combo1.AddItem "555555"
155
Combo1.AddItem "666666"End Sub
350 - Alterando as Configurações Regionais VIA VB Enviado por: Marcelo Zeri
'Abra um novo Projeto, adicione 1 módulo bas, 2 botões de Comando, 1 text-box e 1 Label:'Nomes padrão: (Command1 e Command2, Text1, Label1)'=============================='Declarações para o módulo .basOption ExplicitDeclare Function GetLocaleInfo Lib "kernel32" Alias _"GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, _ByVal lpLCData As String, ByVal cchData As Long) As LongDeclare Function SetLocaleInfo Lib "kernel32" Alias _"SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, _ByVal lpLCData As String) As BooleanDeclare Function GetUserDefaultLCID% Lib "kernel32" ()'Constantes das Configurações RegionaisPublic Const LOCALE_ICENTURY = &H24Public Const LOCALE_ICOUNTRY = &H5Public Const LOCALE_ICURRDIGITS = &H19Public Const LOCALE_ICURRENCY = &H1BPublic Const LOCALE_IDATE = &H21Public Const LOCALE_IDAYLZERO = &H26Public Const LOCALE_IDEFAULTCODEPAGE = &HBPublic Const LOCALE_IDEFAULTCOUNTRY = &HAPublic Const LOCALE_IDEFAULTLANGUAGE = &H9Public Const LOCALE_IDIGITS = &H11Public Const LOCALE_IINTLCURRDIGITS = &H1APublic Const LOCALE_ILANGUAGE = &H1Public Const LOCALE_ILDATE = &H22Public Const LOCALE_ILZERO = &H12Public Const LOCALE_IMEASURE = &HDPublic Const LOCALE_IMONLZERO = &H27Public Const LOCALE_INEGCURR = &H1CPublic Const LOCALE_INEGSEPBYSPACE = &H57Public Const LOCALE_INEGSIGNPOSN = &H53Public Const LOCALE_INEGSYMPRECEDES = &H56Public Const LOCALE_IPOSSEPBYSPACE = &H55Public Const LOCALE_IPOSSIGNPOSN = &H52Public Const LOCALE_IPOSSYMPRECEDES = &H54Public Const LOCALE_ITIME = &H23Public Const LOCALE_ITLZERO = &H25Public Const LOCALE_NOUSEROVERRIDE = &H80000000Public Const LOCALE_S1159 = &H28Public Const LOCALE_S2359 = &H29Public Const LOCALE_SABBREVCTRYNAME = &H7Public Const LOCALE_SABBREVDAYNAME1 = &H31Public Const LOCALE_SABBREVDAYNAME2 = &H32Public Const LOCALE_SABBREVDAYNAME3 = &H33Public Const LOCALE_SABBREVDAYNAME4 = &H34Public Const LOCALE_SABBREVDAYNAME5 = &H35Public Const LOCALE_SABBREVDAYNAME6 = &H36Public Const LOCALE_SABBREVDAYNAME7 = &H37Public Const LOCALE_SABBREVLANGNAME = &H3Public Const LOCALE_SABBREVMONTHNAME1 = &H44Public Const LOCALE_SCOUNTRY = &H6Public Const LOCALE_SCURRENCY = &H14Public Const LOCALE_SDATE = &H1DPublic Const LOCALE_SDAYNAME1 = &H2APublic Const LOCALE_SDAYNAME2 = &H2BPublic Const LOCALE_SDAYNAME3 = &H2CPublic Const LOCALE_SDAYNAME4 = &H2DPublic Const LOCALE_SDAYNAME5 = &H2EPublic Const LOCALE_SDAYNAME6 = &H2FPublic Const LOCALE_SDAYNAME7 = &H30Public Const LOCALE_SDECIMAL = &HEPublic Const LOCALE_SENGCOUNTRY = &H1002Public Const LOCALE_SENGLANGUAGE = &H1001Public Const LOCALE_SGROUPING = &H10
156
Public Const LOCALE_SINTLSYMBOL = &H15Public Const LOCALE_SLANGUAGE = &H2Public Const LOCALE_SLIST = &HCPublic Const LOCALE_SLONGDATE = &H20Public Const LOCALE_SMONDECIMALSEP = &H16Public Const LOCALE_SMONGROUPING = &H18Public Const LOCALE_SMONTHNAME1 = &H38Public Const LOCALE_SMONTHNAME10 = &H41Public Const LOCALE_SMONTHNAME11 = &H42Public Const LOCALE_SMONTHNAME12 = &H43Public Const LOCALE_SMONTHNAME2 = &H39Public Const LOCALE_SMONTHNAME3 = &H3APublic Const LOCALE_SMONTHNAME4 = &H3BPublic Const LOCALE_SMONTHNAME5 = &H3CPublic Const LOCALE_SMONTHNAME6 = &H3DPublic Const LOCALE_SMONTHNAME7 = &H3EPublic Const LOCALE_SMONTHNAME8 = &H3FPublic Const LOCALE_SMONTHNAME9 = &H40Public Const LOCALE_SMONTHOUSANDSEP = &H17Public Const LOCALE_SNATIVECTRYNAME = &H8Public Const LOCALE_SNATIVEDIGITS = &H13Public Const LOCALE_SNATIVELANGNAME = &H4Public Const LOCALE_SNEGATIVESIGN = &H51Public Const LOCALE_SPOSITIVESIGN = &H50Public Const LOCALE_SSHORTDATE = &H1FPublic Const LOCALE_STHOUSAND = &HFPublic Const LOCALE_STIME = &H1EPublic Const LOCALE_STIMEFORMAT = &H1003'===================='Código para o formOption Explicit' Este é um exemplo para o separador de Data' MAS VOCÊ PODERÁ ALTERAR todas as outras Configurações Regionais' contantes no módulo BAS, como Formato da Data, Hora etcPublic Sub Get_locale() ' Buscando a configuração regionalDim Symbol As StringDim iRet1 As LongDim iRet2 As LongDim lpLCDataVar As StringDim Pos As IntegerDim Locale As LongLocale = GetUserDefaultLCID()'LOCALE_SDATE é a constante para separador de data'para outro locale setting apenas troque a constante'Função para alterar o separador atual de dataiRet1 = GetLocaleInfo(Locale, LOCALE_SDATE, _lpLCDataVar, 0)Symbol = String$(iRet1, 0)iRet2 = GetLocaleInfo(Locale, LOCALE_SDATE, Symbol, iRet1)Pos = InStr(Symbol, Chr$(0))If Pos > 0 ThenSymbol = Left$(Symbol, Pos - 1)MsgBox "Separador atual = " + SymbolEnd IfEnd SubPublic Sub Set_locale() 'Altera configurações RegionaisDim Symbol As StringDim iRet As LongDim Locale As LongOn Error GoTo ErroTextoIf Trim(Text1) = "" Then GoTo ErroTexto'LOCALE_SDATE é a constante para separador de data'para outro locale setting apenas troque a constante'Função para alterar o separador de dataLocale = GetUserDefaultLCID() 'Get user Locale IDSymbol = Text1 'Novo caracter para a configuração Regional'digite um novo separador na caixa-textoiRet = SetLocaleInfo(Locale, LOCALE_SDATE, Symbol)Exit SubErroTexto:MsgBox "Digite um separador válido"End SubPrivate Sub Command1_Click() 'exibe a configuração Regional AtualCall Get_locale
157
End SubPrivate Sub Command2_Click() 'altera configurações RegionaisCall Set_localeEnd SubPrivate Sub Form_Load()' Este é um exemplo para o separador de Data' MAS VOCÊ PODERÁ ALTERAR todas as outras Configurações Regionais' contantes no módulo BAS, como Formato da Data, Hora etcMe.Caption = "Alterando as Configurações Regionais ..."Command1.Caption = "Separador Atual"Command2.Caption = "Alterar Separador"Text1 = ""Label1 = "Digite o novo padrão na Caixa Texto"End Sub
351 - Desabilitar X do form Enviado por: Marcelo Zeri
Código para desabilitar X no form'Abra um novo Projeto e adicione um botão Command1. Altere a propriedade do form: Clip Controls para False'Código para o form:Private Sub Command1_Click()Unload MeEnd SubPrivate Sub Form_Load()Call DisableClose(form1)End Sub'Código para o módulo .basPrivate Declare Function GetSystemMenu Lib "user32" (ByVal hwnd _As Long, ByVal bRevert As Boolean) As LongPrivate Declare Function GetMenuItemCount Lib "user32" (ByVal _hMenu As Long) As LongPrivate Declare Function RemoveMenu Lib "user32" (ByVal _hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) _As LongPrivate Declare Function DrawMenuBar Lib "user32" _(ByVal hwnd As Long) As LongPrivate Const MF_BYPOSITION = &H400&Private Const MF_REMOVE = &H1000&Public Sub DisableClose(frm As Form, Optional _Disable As Boolean = True)'Setting Disable to False disables the 'X','otherwise, it's resetDim hMenu As LongDim nCount As LongIf Disable ThenhMenu = GetSystemMenu(frm.hwnd, False)nCount = GetMenuItemCount(hMenu)Call RemoveMenu(hMenu, nCount - 1, MF_REMOVE Or _MF_BYPOSITION)Call RemoveMenu(hMenu, nCount - 2, MF_REMOVE Or _MF_BYPOSITION)DrawMenuBar frm.hwndElseGetSystemMenu frm.hwnd, TrueDrawMenuBar frm.hwndEnd IfEnd Sub
352 - Fazer uma caixa de texto ler somente números Enviado por: Osmilto X. Rebouças
Private Sub Text2_KeyPress(KeyAscii As Integer)Select Case KeyAsciiCase 48 To 57Case 8Case 13Case ElseKeyAscii = 0
158
BeepEnd SelectIf KeyAscii = 46 ThenKeyAscii = 8KeyAscii = 44End IfEnd Sub
353 - Função para retornar o Número de dias do Mes de uma data (Simples e precisa) Enviado por: Paulo Cesar Ferreira
Function nDiaMes(dData) As IntegernDiaMes = 32 - Day(CDate("01/" & Month(dData) _ & "/" & Year(dData)) + 31)End Function
354 - Gerar relatórios por intervalo de datas no Crystal usando VB Enviado por: Roberto Luís Ghisleni
Para gerar um relatório por intervalo de datas coloque o seguinte código:Private Sub cmdImprimir_Click()Dim lFormula As String'Captura data iniciallFormula = "({tabela.campo_data_Inicial} >= DATE(" & Mid$(mkeDT_Inicial, 7, 4) & _"," & Mid$(mkeDT_Inicial, 4, 2) & _"," & Mid$(mkeDT_Inicial, 1, 2) & "))"'Captura data finallFormula = lFormula & " AND ({tabela.campo_data_Final} <= DATE(" & Mid$(mkeDT_Final, 7, 4) & _"," & Mid$(mkeDT_Final, 4, 2) & _"," & Mid$(mkeDT_Final, 1, 2) & "))"'para visualizar a formula msgbox lformulaCrystalReport1.ReportFileName = App.Path & "\Nome.rpt"CrystalReport1.SelectionFormula = lformulaCrystalReport1.DiscardSavedData = TrueCrystalReport1.Action = 1End Sub'Ex.:'tabela.campo_data_inicia = Clientes.DataCadastro'tabela.campo_data_final = Clientes.DataExclusao
Para que o relatório funcione basta cria-lo no crystal e inserir este código,e o crystal vai listar só o que estiver entre este intervalo de datas.Espero que Ajude!!!!
355 - Como mover um valor numérico de uma TextBox para um relátorio Crystal Reports, formatando casas decimais Enviado por: Roberto Luís Ghisleni
Para mover um valor digitado em uma textbox com a formatação correta de casas decimais(ex.: 1.103,45) para um relatorio do crystal, insira o seguinte código:
Private Sub cmdImprimir_Click()Dim lpos As Integer'Formula de Valorlpos = InStr(txtValor.Text, ",")If lpos > 0 ThenCrystalReports1.Formulas(0) = "Valor = " & Left$(txtvalor.Text, lpos - 1) & "." & Mid$(txtValor.Text, lpos + 1)ElseCrystalReports1.Formulas(0) = "Valor = " & txtValor.TextEnd IfEnd Sub
obs.: Para que este código funcione vc deverá inserir em seu relatório Cristal uma formula com o mesmo nome que estiver definida no VB(ex.: Formula "Valor"), para ai sim mover valores para ela.Espero ter ajudado!!
356 - Como concatenar informações pelo VB em um relatório no Crystal Enviado por: Roberto Luís Ghisleni
159
Para concatenar campos de tabelas(Arquivo) ou valores de uma TextBox pelo VB em um relatorio do crystal insira o seguinte código:
'Usando campos de uma determinada TabelaPrivate Sub cmdImprimir_Click()'Formula para Descricao concatenadaCrystalReports1.Formulas(0) = "Descricao = {Tabela.Campo} + {Tabela2.Campo2}"CrystalReports1.DiscardSavedData = TrueCrystalReports1.Action = 1End Sub'Tabela.Campo = Clientes.Codigo'Tabela2.Campo2 = Fornecedor.Codigo'Usando valores de TextBoxPrivate Sub cmdImprimir_Click()'Formula para Descricao concatenadaCrystalReports1.Formulas(0) = "Descricao = " & textbox1.text & "+" & textbox2.textCrystalReports1.DiscardSavedData = TrueCrystalReports1.Action = 1End Sub'Nome'textbox1.text = Roberto'Sobrenome'textbox2.text = Luís Ghisleni
obs.: Para que este codigo funcione vc deverá inserir em seu relatório Cristal uma formula com o mesmo nome que estiver definida no VB(ex.: Formula "Descricao"), para ai sim mover algo para ela.
357 - Como mover uma data informada em um MaskEdit para um relatório no Crystal usando código VB Enviado por: Roberto Luís Ghisleni
Para mover uma data digitada em um MaskEdit para um relatorio do crystal insira o seguinte código:Private Sub cmdImprimir_Click()'Formula Data InicialCrystalReports1.Formulas(0) = "Data = Date ( " & Mid$(MaskEdit1, 7, 4) & _"," & Mid$(MaskEdit1, 4, 2) & "," & Mid$(MaskEdit1, 1, 2) & ")"CrystalReports1.DiscardSavedData = TrueCrystalReports1.Action = 1End Sub
obs.: Para que este codigo funcione vc deverá inserir em seu relatório Cristal uma formula com o mesmo nome que estiver definida no VB(ex.: Formula "Data"), para ai sim mover algo para ela.
358 - Formulários Enviado por: Rogério Adriano de Morais - Clark
Quando se trabalha com formulários no Visual Basic, em projetos MDI principalmente, deve-se tomar cuidado para não deixá-lo na memória após usá-lo. O sintoma deste erro de programação é o programa não finalizar após ter clicado no botão FECHAR, e ser necessário clicar no botão END para concluir sua finalização. Para avitar isso, use sempre o método UNLOAD após usar qualquer utilização de um formulário, mesmo que ele não seja exibido no video. Veja:
Private Sub Command1_Click()Dim vTexto as StringvTexto = Form1.Text1.TextEnd Sub
No código acima, mesmo que não foi usado o método LOAD, o formulário FORM1 foi carregado para que o objeto TEXT1 possa ser usado. Repare que não foi usado o método UNLOAD, de forma que, o formulário continuará na memória mesmo que o procedimento (SUB) seja finalizado (END SUB). Veja o código correto abaixo:
Private Sub Command1_Click()Dim vTexto as StringvTexto = Form1.Text1.TextUnload Form1End Sub
É lógico que isso é somente um exemplo, a momentos em que é vantajoso o formulário continuar na memória porque poderá ser usado posteriormente.Abraços,Clark
359 - Convertendo nº para binário Enviado por: Ronie Rodrigues Dias
Para converter um nº inteiro para Binário coloque o seguinte código em um command Button:Dim resp, bin, n, dec As Double 'Declara variáveis
160
dec = Text1resp = Int(Text1)Text1 = ""While resp <> 0resp = Int(dec / 2)If resp * 2 = dec Thenbin = 0Elsebin = 1End IfText1 = Text1 & bindec = respWendFor n = Len(Text1) To 1 Step -1Text1.Text = Text1 & Mid(Text1, n, 1)Next n
360 - ACESSO SQL-SERVER ATRAVES DO OLEDB Enviado por: SAMUEL BADY HELOU FILHO
1º-FAZ REFERENCIA AO MICROSSOFT ADO 2.0 LIBRARY E AO DATA BINDING COLLECTION
2º-DECLARE DB AS NEW ADODB.CONECTION E
RS AS NEW ADODB.RECONDSET
3º-DB.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=SA;Initial Catalog=" & NOME DO BANCO & ";Data Source=" & SERVIDOR
DB.ConnectionTimeout = 10
DB.Open
ABRE O BANCO
361 - Senha Enviado por: Thiago MuNhÓz
Crie um Text e um commandbutton, no commandbutton digite:if text1.text = "Senha desejada" thenform2.showelsemsg box "Senha Incorreta digite novamente"end if
qualquer duvida envie e-mail para [email protected]
362 - Formulário OnTop com apenas 1 linha de código Enviado por: Thomas Gonzalez Miranda
Você muitas vezes já viu exemplos de formulários OnTop, mas... Eles puxam módulas e mais módulos. Para isso fiz esta função. Sigam os passos:Crie duas formulários. Ex: Form 1 e Form2, agora insira um botão no formulário. clique duas vezes no botão e insira este código
Form2.Show , Me
Pronto. O form2 sempre ficará sobre o form1.ATENÇÃO: Esta função não cria um formulário Ontop para todas as janelas e sim só para o programa aberto.Qualquer dúvida me enviem um e-mail. ;-D
363 - Impossibilitando o clique no formulário de trás Enviado por: Thomas Gonzalez Miranda
Você, muitas vezes já deve ter tentado fazer com que o formulário que se abre sem ficasse sobre o formulário abaixo. Pronto! Conseguiu, mas e agora eu clico no Form1, e o Form2, some. :-(Descobri a solução para isso.Crie dois formulários. Ex: Form1 e Form2, depois insira um botão no form1. Clique duas vezes no botão e insira este código.
161
form1.enabled = falsepronto!
364 - Abrir URL no Navegador padrão apenas com 3 linhas de código Enviado por: Thomas Gonzalez Miranda
Muitas pessoas querem um jeito simples de fazer abrir o código de uma caixa de texto ou url em um browser padrão do usuário. Quer saber como? Simples. Siga os passoas abaixo:Na guia General declare estas funções:
Option ExplicitPrivate Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPrivate Const SW_SHOW = 5
Depois disso insira 2 caixas de texto em seu formulário.Na 1ª: Coloque na propriedade TEXT. O caminho onde está o arquivo à abrir. Ex: C:\Pagina.htmlNa 2ª: Deixei em branco para o usuário digitar códigos HTML ou simplesmente um endereço à abrirAgora que fez isso.Insira um botão e clique nele duas vezes e insira este código
ShellExecute hwnd, "open", Nome_da_1ªCaixa.Text, vbNullString, vbNullString, SW_SHOW
PRONTO, é só isso qualquer dúvida me envie um e-mail. Okz? ;-D
365 - Como dar uma pausa no programa sem utilizar Timer Enviado por: Wagner Lasdowsky
'codigo para dar pausa no programa utilizando API GettickCount'declarando APIPublic Declare Function GetTickCount Lib "kernel32" () As LongPublic Sub Pausa(ByVal Segundos As Integer)'igual a inkey() do clipper - wagnerDim xtempo As LongDim xInicio As LongDim xfinal As Longxtempo = 1000 * Segundosxfinal = 0xInicio = GetTickCount() 'retorna valor em milesimosWhile (xfinal - xInicio < xtempo)xfinal = GetTickCount()WendEnd Sub
366 - Soma horas mais facilmente Enviado por: Washington Coutinho Corrêa Junior
'Guarda os dados do Primeiro Horáriohora1 = 14minuto1 = 34segundo1 = 25'Guarda os dados do Segundo Horáriohora2 = 2minuto2 = 23segundo2 = 34'Coloca os dados do Primeiro horário em horario_1horario_1 = TimeSerial(hora1, minuto1, segundo1)'Coloca os dados do Primeiro horário em horario_2horario_2 = TimeSerial(hora2, minuto2, segundo2)'Mostra a soma delesMsgBox horario_1 + horario_2
367 - Máscara de data no TextBox
162
Enviado por: Beraldo Lopes Figueiredo
Evita todo o problema causado pelo famigerado MASKEDBOXPrivate Sub Text1_Change()If Len(Text1) = 2 ThenText1 = Text1 + "/"Text1.SelStart = 4End IfIf Len(Text1) = 5 ThenText1 = Text1 + "/"Text1.SelStart = 7End IfEnd Sub
Espero que tenha utilidade
368 - Verificando se o Campo é Alfanumérico Enviado por: Cicero
Public Function IsAlfaNumeric(VALOR)dim cont as variantdim verificacao as variantdim soma as variantcont = "soma"For i = 1 To Len(VALOR)verificacao = Mid$(VALOR, i, 1)If IsNumeric(verificacao) Thencont = soma & verificacaosoma = contElseEnd IfNext iIf IsNumeric(cont) ThenVALOR = TrueElseVALOR = FalseEnd IfIsAlfaNumeric = VALOREnd Function
369 - Utilização de caracteres do Idioma Japonês no Visual Basic 6 Enviado por: Cleuber Ricardo Orsi
São poucos os programadores que passam pela situação de ter que desenvolver aplicativos que "entendam " em suas caixas de texto os caracteres peculiares da lingua japonesa ou mesmo de outras linguas, como o Chinês ou o Turco.
Porém quando um desenvolvedor tem um problema como esse é muito mais difícil ainda encontrar soluções para essa condição.
Por isso estou enviando essa dica de trabalho, pois passei por várias dificuldades e espero conseguir ajudar os colegas.
- Primeiro ponto importante, é saber como o Windows faz a leitura dos caracteres em japonês.Isso é possível graças a um dispositivo chamado IME, que converte para caracteres em japonês grupos de consoantes e vogais digitados, através de um teclado comum, como nosso ocidental. Esse dispositivo é instalado automaticamente com o Windows em Japonês ou em outro idioma que use caracteres próprios. Esse tipo de recurso será mais conhecido com a difusão do Windows 2000.
- O Segundo ponto consiste na instalação do Visual Basic, que deve ser feita numa máquina com o Windows no idioma que se deseja trabalhar. Isso se faz necessário uma vez que o Programa de Instalação do VB verificará se o Windows instalado na máquina usa o IME ele automaticamente atribuirá uma propriedade chamada IMEMODE a suas caixas de texto, oque possibilitará a inserção e leitura desses caracteres pelo controle TEXTBOX. (Essa propriedade somente é disponibilizada neste tipo de situação.)
Depois desses cuidados o programador deverá observar o valor da propriedade IMEMODE que por padrão é 0 ( No Operation) e deve ser alterada para 1 (ON) assim o IME poderá agir sobre o controle TEXTBOX. Outra alteração deve
163
ser feita na fonte da caixa de texto. Alguns tipos de fontes aceitam caracteres em japonês, outras não. Uma boa fonte é a MS UI Gothic, isso vale também para fontes de relatório, como o Crystall por exemplo.
Agora se você usa Banco de Dados em seus aplicativos pode ter problemas, mas no caso do ACCESS eu aconselho criar a Base de Dados através do seu aplicativo, e utilizar a declaração dbLangGeneral na criação do Banco de Dados, para que esse aceite os caracteres em japonês e os caracteres ocidentais.
Obs. Esse procedimento é valido para a Versão 6 do Visual Basic.
370 - Piscar um objeto Enviado por: Djair Junior
Para piscar um objeto crie um timer com Interval de 500.Digite o comando abaixo dentro do timer:
Me!Command1.Visible = True = Not Me!Command1.Visible = True'Onde o objeto a piscar é um botão com o name Command1.
371 - Como abrir um Banco de dados Enviado por: Márcio Pulcinelli
Dim DBNewOne as DataBaseDim rs as RecordSetSet DBNewOne = DBEngine.Workspaces(0).OpenDataBase(app.path + "\banco_de_dados.mdb")Set rs = db.openRecordSet("Tabela")
372 - Abrir e Fechar o CD-ROM Enviado por: Rafael Konrath
'Declarar em um ModuloDeclare Function mciSendString Lib "winmm.dll" Alias _"mciSendStringA" (ByVal lpstrCommand As String, ByVal _lpstrReturnString As String, ByVal uReturnLength As Long, _ByVal hwndCallback As Long) As LongPrivate Sub Command1_Click()dim res as long, returnstring as string*127res = mcisendstring("set CDAudio door open", returnstring, 127, 0)End SubPrivate Sub Command2_Click()dim res as long, returnstring as string*127res = mcisendstring("set CDAudio door closed", returnstring, 127, 0)End Sub
373 - Saber se existe placa de Som Enviado por: Rafael Konrath
Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As LongDim res As Integerres = waveOutGetNumDevs()If res > 0 Thenmsgbox "Existe tarjeta de sonido"Elsemsgbox "No existe tarjeta de sonido"End If
374 - Sabe quanto tempo o Windows esta funcionando Enviado por: Rafael Konrath
164
Rafael Konrath
'declare no moduloDeclare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long'Por exemplo :Private Sub Form_Load()Dim l As Long, horas As Integer, min As Integerl = GetTickCount() / 1000horas = Int(l / 3600)l = l - (3600 * horas)min = Int(l / 60)l = l - (min * 60)MsgBox "Windows inicio ja faz " & horas & " horas, " & min & " minutos e " & l & " segundos"End Sub
375 - Crystal Reports: imprimindo em outra impressora que não seja a Padrão. Enviado por: Adriano Faria Alves
Para mandar o relatório para outra impressora no Crystal Reports:
With CrystalReport1 .ReportFileName = "C:\caminho\relatorio.rpt" .PrinterDriver = "Epson24" .PrinterPort = "LPT1" .PrinterName = "Epson - Matricial" .Action = 1 End With
376 - Função que limpa todos os campos com propriedade TEXT e LIST BOX do form. Enviado por: Adriano Faria Alves
Crie essa função em módulo BAS
Public Function LimparCampos(frmForm As Form)
Dim ctlControl As Object
On Error Resume Next
For Each ctlControl In frmForm.Controls ctlControl.Text = "" ctlControl.ListIndex = -1 ctlControl.Value = 0 DoEvents Next ctlControl
End Function
Para chamá-la no seu form:...tabela.updateCall LimparCampos(Me)
377 - Verificando se CPF digitado é válido. Enviado por: Adriano Faria Alves
Crie essa função em Módulo BAS
Public Function CheckCPF(CPF As String) As Boolean
Dim EVAR1 As Integer Dim evar2 As Integer Dim F As Integer If Len(Trim(CPF)) <> 11 Then CheckCPF = False Exit Function End If EVAR1 = 0 For F = 1 To 9 EVAR1 = EVAR1 + Val(Mid(CPF, F, 1)) * (11 - F) Next F evar2 = 11 - (EVAR1 - (Int(EVAR1 / 11) * 11)) If evar2 = 10 Or evar2 = 11 Then evar2 = 0
165
If evar2 <> Val(Mid(CPF, 10, 1)) Then CheckCPF = False Exit Function End If EVAR1 = 0 For F = 1 To 10 EVAR1 = EVAR1 + Val(Mid(CPF, F, 1)) * (12 - F) Next F evar2 = 11 - (EVAR1 - (Int(EVAR1 / 11) * 11)) If evar2 = 10 Or evar2 = 11 Then evar2 = 0 If evar2 <> Val(Mid(CPF, 11, 1)) Then CheckCPF = False Exit Function End If CheckCPF = True
Para chamá-la no form:
Sub CPF_LostFocus() If CheckCPF(CPF.Text) = False Then MsgBox "CPF Inválido." CPF.SetFocus End IF
378 - Combo Box com data (primeiro ao último dia do mês atual) Enviado por: Adriano Faria Alves
Crie essa função em um Módulo BAS
Public Function Preenche_ComboData(ComboDatas As Control)
Dim i, DiaCorrente, MesCorrente, AnoCorrente, UltimoDia As Integer DiaCorrente = "01" MesCorrente = Month(Now) AnoCorrente = Year(Now)
UltimoDia = Day(DateValue("01/" & Str(MesCorrente + 1) & "/" & Str(AnoCorrente)) - 1)
If MesCorrente = 12 Then UltimoDia = Day(DateValue("31/" & "12/" & Str(AnoCorrente))) End If
For i = DiaCorrente To UltimoDia ComboDatas.AddItem Format(i, "0#") & "/" & Format(Now, "mm") & "/" & Format(Now, "yyyy") Next
End Function
Para chamá-la no form (LOAD):
Call Preenche_ComboData(Combo1)
379 - Inicias Maiúsculas, com exceção de DE, DA, DOS, DAS, DI... Enviado por: Adriano Faria Alves
Crie essa função em um Módulo BAS
Public Function Maiuscula(Texto)
Dim Palavra, Posicaoinicial, Posicaofinal Dim Resultado As String
Posicaoinicial = 1 Texto = Texto & " " Do Until InStr(Posicaoinicial, Texto, " ") = 0 Posicaofinal = InStr(Posicaoinicial, Texto, " ") Palavra = Mid(Texto, Posicaoinicial, Posicaofinal - Posicaoinicial) Posicaoinicial = Posicaofinal + 1
If Palavra <> "de" And Palavra <> "di" And Palavra <> "e" And Palavra <> "da" And Palavra <> "das" And Palavra <> "do" And Palavra <> "dos" Then Palavra = UCase(Left(Palavra, 1)) & LCase(Mid(Palavra, 2)) End If
166
Resultado = Resultado & " " & Palavra Loop Maiuscula = Trim(Resultado)
End Function
Para chamá-la em um form (LostFocus da Caixa de Texto)
If Trim(Text1 <> "") Then Text1 = Maiuscula(Text1) End If
380 - Função para validar datas digitadas. Enviado por: Adriano Faria Alves
Crie essa função em um Módulo BAS
Public Function ValidaData(DataInformada As String) As Boolean
ValidaData = False If Not IsDate(DataInformada) Then Exit Function End If If Left(DataInformada, 2) < "01" Or Left(DataInformada, 2) > "31" Then Exit Function End If If Mid(DataInformada, 4, 2) < "01" Or Mid(DataInformada, 4, 2) > "12" Then Exit Function End If ValidaData = True
End Function
Para chamá-la no seu form (lostfocus da caixa DATA1)
If ValidaData(Data1) = False Then MsgBox "Data inválida.", vbCritical Data1.SetFocus End If
381 - Crystal Reports: imprimir período de datas (data inicial e data final) Enviado por: Adriano Faria Alves
Esse código utiliza 2 MaskEdBox e a função VALIDADATA, também disponível nas dicas desse Site.
Sub Imprimir_Click()
If mskDT1 <> "__/__/____" Then If Not ValidaData(mskDT1) Then MsgBox "Primeira data do período inválida", vbCritical, "Erro no Relatório" Exit Sub End If If mskDT2 <> "__/__/____" Then If Not ValidaData(mskDT2) Then MsgBox "Segunda data do período inválida", vbCritical, "Erro no Relatório" Exit Sub End If stringsql = stringsql & " and {tabela1.data}in date(" & Right(mskDT1, 4) & "," & Mid(mskDT1, 4, 2) & "," & Left(mskDT1, 2) & ") to date(" & Right(mskDT2, 4) & "," & Mid(mskDT2, 4, 2) & "," & Left(mskDT2, 2) & ")" Else stringsql = stringsql & " and {tabela1.data}=date(" & Right(mskDT1, 4) & "," & Mid(mskDT1, 4, 2) & "," & Left(mskDT1, 2) & ")" End If End If stringsql = Mid(stringsql, 5) CrystalReport1.ReportFileName = App.Path + "\Relatorio.rpt" CrystalReport1.SelectionFormula = stringsql
167
CrystalReport1.Destination = crptToWindow CrystalReport1.Action = 1
382 - Função que verifica a existência de um arquivo Enviado por: Adriano Faria Alves
Crie essa função em Módulo BAS
Public Function FileExist(FileName As String) As Boolean
Dim TempAttr As IntegerOn Error GoTo ErrorFileExistTempAttr = GetAttr(FileName)FileExist = TrueGoTo ExitFileExist
ErrorFileExist:FileExist = FalseResume ExitFileExistExitFileExist:On Error GoTo 0
End Function
E no seu form, chame-a da seguinte forma:
If FileExist("C:\Caminho\Arquivo.mdb") = False ThenMsgBox "Banco de Dados não encontrado.", vbCritical, App.Title & " - Erro Geral"EndEnd If
383 - Abrir a listagem da Combo ao receber foco. Enviado por: Adriano Faria Alves
Insira esse código em um módulo BAS
Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" (ByVal hwnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Long) As Long
Private Sub Combo1_GotFocus() Const CB_SHOWDROPDOWN As Long = &H14F Dim Tmp As Long Tmp = SendMessage(Combo1.hwnd,CB_SHOWDROPDOWN,1,ByVal 0&)End Sub
384 - Função que abre um arquivo texto e retorna seu conteúdo Enviado por: Adriano Faria Alves
Function AbreArquivo(sArquivo As String) As String Dim iARQ As Integer Dim sLinha As String Dim sResult As String
iARQ = FreeFile Open sArquivo For Input As iARQ Do While Not EOF(iARQ) *Pega o conteúdo da linha Line Input #iARQ, sLinha
*Quebra a linha e concatena (soma) o resultado sResult = sResult + Chr(13) & Chr(10) + sLinha Loop
AbreArquivo = sResult
Fecha o arquivo Close iARQEnd Function
Para usar:Text1.Text = AbreArquivo("C:\Texto.TXT")
168
385 - Verificando a Data/Hora da Última Alteração de um Arquivo Enviado por: Adriano Faria Alves
Crie essa função em um Módulo Bas
Public Function DataArq(ByVal sArq As _ String) As String If Dir$(sArq) <> "" Then DataArq = FileDateTime(sArq) Else DataArq = "ERRO" End IfEnd Function
Para chamar no Form:
Dim sVar As String sVar = DataArq("C:\SQL.log") If sVar <> "ERRO" Then Text1.Text = sVar End If
386 - Dias úteis entre 2 datas. Enviado por: Adriano Faria Alves
Function DiasUteis(dtInicio As Variant, dtFinal As Variant) As Integer
Dim intSemanas As Integer Dim varDataCont As Variant Dim intFimDias As Integer
dtInicio = DateValue(dtInicio) dtFinal = DateValue(dtFinal) intSemanas = DateDiff("w",dtInicio,dtFinal) varDataCont = DateAdd("ww",intSemanas,dtInicio) intFimDias = 0
Do While varDataCont < dtFinal If Format(varDataCont,"ddd") <> "Sun" And _ Format(varDataCont,"ddd") <> "Sat" Then intFimDias = intFimDias + 1 End If varDataCont = DateAdd("d", 1, varDataCont) Loop
DiasUteis = intSemanas * 5 + intFimDias
End Function
387 - Abrir e fechar a gaveta do CDROM Enviado por: Adriano Faria Alves
Private Declare Function mciSendString Lib "winmm.dll" _ Alias "mciSendStringA" (ByVal lpstrCommand As _ String, ByVal lpstrReturnString As String, _ ByVal uReturnLength As Long, ByVal hwndCallback _ As Long) As Long
PARA ABRIRCall mciSendString("Set CDAudio Door Open Wait", 0&, 0&, 0&)
PARA FECHARCall mciSendString("Set CDAudio Door Closed Wait", 0&, 0&, 0&)
388 - Removendo os Botões MIN-MAX de Forms MDI Enviado por: Adriano Faria Alves
Coloque o seguinte código num módulo:
Private Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As _
169
Long) As LongPrivate Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long) As Long
Private Const WS_MINIMIZEBOX As Long = &H20000Private Const WS_MAXIMIZEBOX As Long = &H10000Private Const GWL_STYLE As Long = (-16)
No evento MDIForm_Load do MDIForm:
Sub MDIForm_Load() Dim lWnd as Long lWnd = GetWindowLong(Me.hWnd, GWL_STYLE)
*Tira o botão de minimizar lWnd = lWnd And Not (WS_MINIMIZEBOX)
*Tira o botão de maximizar lWnd = lWnd And Not (WS_MAXIMIZEBOX)
lWnd = SetWindowLong(Me.hWnd, GWL_STYLE, lWnd)End Sub
389 - Animação com Ícones Enviado por: Adriano Faria Alves
Crie um novo projeto, coloque no Form uma ImageList, um PictureBox (ou ImageBox, pois esta não recebe foco), um Timer (com Interval = 100, pelo menos) e coloque as figuras da animação na ImageList.
Então, coloque o seguinte código no Form:
Dim iAnim As IntegerPrivate Sub Form_Load() iAnim = 1 Call Timer1_TimerEnd SubPrivate Sub Timer1_Timer() *Img1 é a ImageBox e ImgLst1 é a ImageList. Set Img1.Picture = ImgLst1.ListImages(iAnim).Picture iAnim = iAnim + 1 If iAnim > ImageList1.ListImages.Count Then iAnim = 1 End IfEnd Sub
390 - Copiando Textos de Documentos do Word Enviado por: Adriano Faria Alves
No evento desejado:Dim Word As ObjectSet Word = CreateObject("Word.Application")
Abre o documentoWord.Documents.Open "C:\Meus Documentos\" & "NomeDoDocumento.DOC"
Seleciona o documento inteiroWord.Documents("NomeDoDocumento.DOC").Select
Joga o conteúdo da seleção numa caixa de Texto.Text1.Text = Word.Selection.Text
Pesquise o VBA, pois utilizando-o é possível selecionar palavras, parágrafos, tabelas, etc. Ou seja, qualquer parte do documento.
391 - Impedir que o programa apareça nos processos do windows Enviado por: Adriano Faria Alves
1 - Coloque para false a propriedade ShowInTaskbar do Form
2 - Em um módulo declare:
Public Declare Function ShowWindow Lib "user32" _ Alias "ShowWindow" (ByVal hwnd As Long, _ ByVal nCmdShow As Long) As Long
170
Public Const SW_HIDE As Long = 0
3 - No Form_Load adicione:
Dim RetValue as Long RetValue = ShowWindow(Me.hWnd, SW_HIDE)
392 - Impedir que o programa seja encerrado com Ctrl Alt Del Enviado por: Adriano Faria Alves
Declara o seguinte em um Módulo:
Public Declare Function GetCurrentProcessId Lib _ "kernel32" () As LongPublic Declare Function GetCurrentProcess Lib _ "kernel32" () As LongPublic Declare Function RegisterServiceProcess _ Lib "kernel32" (ByVal dwProcessID As Long, _ ByVal dwType As Long) As Long
Public Const RSP_SIMPLE_SERVICE As Long = 1Public Const RSP_UNREGISTER_SERVICE As Long = 0
Crie a seguinte Sub:Public Sub MakeMeService() Dim pid As Long Dim reserv As Long pid = GetCurrentProcessId() reserv = RegisterServiceProcess(pid,RSP_SIMPLE_SERVICE)End Sub
Depois coloque o seguinte no FORM_LOAD:
Private Form_Load() MakeMeServiceEnd Sub
393 - Rolando texto em uma Picture Box Enviado por: Adriano Faria Alves
*Global do FormPublic Function ShowMessage()
Static MsgPtr As Integer Static MyText As String
If Len(MyText) = 0 Then MsgPtr = 1 MyText = "Rolando texto numa Picture Box! " End If
Picture1.Cls Picture1.Print Mid$(MyText, MsgPtr); MyText; MsgPtr = MsgPtr + 1
If MsgPtr > Len(MyText) Then MsgPtr = 1 End If
End Function
*Coloque um objeto Picture Box*Coloque um objeto Timer (Interval=100)
Private Sub Timer1_Timer()
ShowMessage
End Sub
394 - Chamando telas específicas do Painel de Controle Enviado por: Adriano Faria Alves
Para chamar qualquer tela do Painel de Controle não se usa necessariamente uma API, mas sim se executa o programa rundll32.exe. De acordo com os parâmetros cada tela é chamada. Veja as chamadas das principais telas:
171
Para chamar a tela principal do Painel de Controle
Call Shell("rundll32.exe shell32.dll,Control_RunDLL", vbNormalFocus)
Adicionar / Remover Programas Instalar/Desinstalar Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1", vbNormalFocus)
Instalação do Windows Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2", vbNormalFocus)
Disco de Inicialização Call Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3", vbNormalFocus)
Vídeo Segundo Plano Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0", vbNormalFocus)
Proteção de Tela Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1", vbNormalFocus)
Aparência Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2", vbNormalFocus)
Configuração Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3", vbNormalFocus)
Configurações Regionais Configurações Regionais Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0", vbNormalFocus)
Número Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1", vbNormalFocus)
Moeda Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2", vbNormalFocus)
Hora Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3", vbNormalFocus)
Data Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4", vbNormalFocus)
Joystick Call Shell("rundll32.exe shell32.dll,Control_RunDLL joy.cpl", vbNormalFocus)
Mouse Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @0", vbNormalFocus)
Teclado Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @1", vbNormalFocus)
Impressoras Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @2", vbNormalFocus)
Fontes Call Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @3", vbNormalFocus)
Mail e Fax Call Shell("rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl", vbNormalFocus)
Multimídia Audio Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0", vbNormalFocus)
Vídeo Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1", vbNormalFocus)
MIDI Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2", vbNormalFocus)
CD Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3", vbNormalFocus)
172
Avançado Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4", vbNormalFocus)
Som Call Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1", vbNormalFocus)
Modem Call Shell("rundll32.exe shell32.dll,Control_RunDLL modem.cpl", vbNormalFocus)
Rede Call Shell("rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl", vbNormalFocus)
Senha Call Shell("rundll32.exe shell32.dll,Control_RunDLL password.cpl", vbNormalFocus)
Sistema Geral Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0", vbNormalFocus)
Gerenciador de Dispositivos Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1", vbNormalFocus)
Perfis de Hardware Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2", vbNormalFocus)
Performance Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3", vbNormalFocus)
Opções de Acessibilidade Teclado Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1", vbNormalFocus)
Som Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2", vbNormalFocus)
Exibir Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3", vbNormalFocus)
Mouse Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4", vbNormalFocus)
Geral Call Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5", vbNormalFocus)
Assistente (Adicionar novo Hardware) Call Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1", vbNormalFocus)
Data e Hora Call Shell("rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", vbNormalFocus)
DiskCopy Call Shell("rundll32 diskcopy.dll,DiskCopyRunDll", vbNormalFocus)
395 - Crystal Reports: imprimindo em outra impressora que não seja a Padrão - Correção Enviado por: Adriano Faria Alves
Na dica para mandar relatório para a Impressora que não seja a Padrão, faça a seguinte alteração:
... CrystalReport1.PrinterDriver = "Epson24.drv" ...
396 - Informar sobre a alteração de dados Enviado por: Esdras Pavan
Alvo:Verificar se os Text Box´s de um formulário tiveram o seu conteúdo alterado
Aplicação:Quando um usário altera os dados de alguns campos e sai sem salvar as alteraçõs foram perdidas, está função verifica a alteração.
Função :
173
Function Changed(pJanela As Form) As Boolean Dim vIndice As Integer For vIndice = 0 To pJanela.Controls.Count - 1 If TypeOf pJanela.Controls(vIndice) Is TextBox Or _ TypeOf pJanela.Controls(vIndice) Is ComboBox Then If pJanela.Controls(vIndice).DataChanged Then Changed = True Exit Function End If End If Next vIndice
End Function
Modo de usar:Private Sub Form_Unload(Cancel As Integer)
If Changed(Me) Then If MsgBox("Foram feitas aterações. Deseja sair sem salvar???", 32 + vbYesNo, "Pergunta") = vbNo Then Cancel = -1 End If End If End Sub
397 - Informar sobre a alteração de dados Enviado por: Esdras Pavan
Alvo:Verificar se os Text Box´s de um formulário tiveram o seu conteúdo alterado
Aplicação:Quando um usário altera os dados de alguns campos e sai sem salvar as alteraçõs foram perdidas, está função verifica a alteração.
Função :Function Changed(pJanela As Form) As Boolean Dim vIndice As Integer For vIndice = 0 To pJanela.Controls.Count - 1 If TypeOf pJanela.Controls(vIndice) Is TextBox Or _ TypeOf pJanela.Controls(vIndice) Is ComboBox Then If pJanela.Controls(vIndice).DataChanged Then Changed = True Exit Function End If End If Next vIndice
End Function
Modo de usar:Private Sub Form_Unload(Cancel As Integer)
If Changed(Me) Then If MsgBox("Foram feitas aterações. Deseja sair sem salvar???", 32 + vbYesNo, "Pergunta") = vbNo Then Cancel = -1 End If End If End Sub
PS.: Temos que tomar algumas atençõesCriarmos no form uma variável boleana Publica chamada Changed e a setarmos true ou false no momento correto.Ex:Toda vez que o botão salvar for acionado setar a variavel changed = true.
398 - Tabela de Meses Enviado por: Esdras Pavan
Alvo:Retorna o nome do mês de acordo com o número passado na função
174
Função:Public Function TabMeses(pMes As Integer) As String Dim vetMeses vetMeses = Array("Janeiro", "Fevereiro","Março", _ "Abril", "Maio","Junho", "Julho", _ "Agosto", "Setembro", "Outubro", _
"Novembro", "Dezembro")
TabMeses = vetMeses(pMes - 1)End Function
Modo de Usar:a linha - > TabMeses(Month(CDate("10/02/2000")))retorna - > "Fevereiro"
399 - Outra forma de abrir um ComboBox ao receber o foco(mais simples) Enviado por: João Paulo Rezende
No evento GotFocus do ComboBox coloque o seguinte código:
Private Sub Combo1_GotFocus()SendKeys "%{DOWN}"End Sub
No evento load do Form coloque este código:
Private Sub Form_Load()Combo1.AddItem "Teste1"Combo1.AddItem "Teste2"Combo1.AddItem "Teste3"Combo1.AddItem "Teste4"End Sub
400 - Testar se a UF digitada está correta Enviado por: Luis Roberto Garcia Leandro
Public Function TestaUF(UF As String) As BooleanIf UF = "" Then Exit FunctionDim UFpes As StringUFpes = "ACALAMAPBACEDFESFNGOMAMGMSMTPAPBPEPIPRRNRJRSRORRSESCTOSP"Dim I, Q As IntegerTestaUF = False: Q = 1For I = 0 To 27 If UCase(UF) = Mid(UFpes, Q, 2) Then TestaUF = True: Exit For Q = Q + 2Next IEnd Function
Modo de usar
Private Sub TBUF_LostFocus()If TBUF = "" Then Exit SubIf TestaUF(TBUF) = False Then MsgBox "Unidade de federação incorreta !", 48, "Atenção !" TBUF = "" TBUF.SetFocusEnd IfEnd Sub
401 - Testar se a UF digitada está correta 2 Enviado por: Carlos Peixoto
Private Sub txtUF_LostFocus() Dim lEstados As String If txtUF > "" Then txtUF = UCase$(txtUF) lEstados = "AC-AL-AM-AP-BA-CE-DF-ES-GO-MA-MG-MS-MT-PA-PB-PE-" lEstados = lEstados & "PI-PR-RJ-RN-RO-RR-RS-SC-SE-SP-TO" If InStr(1, lEstados, txtUF) = 0 Then MsgBox "Estado inválido", vbExclamation, UCase(txtUF) txtUF.SetFocus End If End IfEnd Sub
402 - Tornar maiúsculas as letras de TODOS os controles de um form
175
Enviado por: Roberto Alexandre Levy
Essa serve para aqueles que só querem adicionar em uma base de dados, informações com apenas letras maiúsculas. Veja com é fácil converter todos os controles com poucas linhas
403 - Tornar maiúsculas as letras de TODOS os controles de um form Enviado por: Roberto Alexandre Levy
Essa serve para aqueles que só querem adicionar em uma base de dados, informações com apenas letras maiúsculas. Veja com é fácil converter todos os controles com poucas linhas.
Coloque o seguinte código em um módulo:
Sub Caixa_Alta(oForm As Form)
Screen.MousePointer = vbHourglass Dim A As Integer
For A = 1 To oForm.Controls.Count - 1 If TypeOf oForm.Controls(A) Is TextBox Then oForm.Controls(A).Text = UCase(oForm.Controls(A).Text) ElseIf TypeOf oForm.Controls(A) Is ComboBox Then oForm.Controls(A).Text = UCase(oForm.Controls(A).Text) End If Next A Screen.MousePointer = vbArrow End Sub
Para chamá-lo, digite:
Caixa_Alta frmInsert
Onde frmInsert é o nome do form onde você quer converter para maiúsculas.Um abraço!
404 - Função genérica para alimentar uma Combo Box com dados de uma tabela Enviado por: Roberto Alexandre Levy
Fato comum entre os sistemas corporativos é a famosa combo box com dados de uma determinada tabela. Criei essá função genérica para facilitar esse tramite. Veja como é simples...Coloque o seguinte código em um módulo:
Sub Gera_Combo(oCombo As Control, nTable As String)
Screen.MousePointer = vbHourglass Dim SN As Recordset SQL = "SELECT * FROM " & nTable Set SN = DB.OpenRecordset(SQL, dbOpenSnapshot)
SN.MoveFirst Do While Not SN.EOF oCombo.AddItem SN!Descr SN.MoveNext Loop Screen.MousePointer = vbArrow
End Sub
Perceba que a rotina recebe dois parâmetros. O primeiro (oCombo) é o nome do objeto (comboBox) e o segundo é o nome da tabela de origem na base de dados.Um abraço!
405 - Parâmetros Múltiplos para consultas em SQL Enviado por: Roberto Alexandre Levy
AAA
176
406 - Verifique se sua aplicação já em uso na hora que inicia sua aplicação Enviado por: Alexandre Liondas Neto
Para verificar se sua aplicação já está aberta na hora de iniciar seu programa faça o seguinte :
No evento LOAD ou de seu formulário principal digite :
If App.PrevInstance Then MsgBox "A aplicação iniciada já está em uso.", vbCritical, "Negado" EndEnd If
407 - Icones Enviado por: Henrique Rios Witzel
Gostaria de saber sobre icones para uso nos programas de Visual Basic,Preciso icones de Advogado para eu colocar no programa.
408 - Verificando a impressora padrão e o seu Drive Enviado por: William Costa Rodrigues
Private Sub Form_Load() lbImpress.Caption = "Impressora Padrão: " & Printer.DeviceName lbDrvImpress.Caption = "Nome do Drive: " & Printer.DriverNameEnd Sub
409 - Cálculo entre duas datas (resultado em anos, meses e dias) Enviado por: Adriano Faria Alves
Use um botão de comando e 3 caixas de texto (Entrada, Hoje e Resultado)
*** Crie a Função no Form:
Function CalculaTempo(Entrada As Date)
If IsNull(Entrada) Or Entrada > Date ThenMsgBox "Data de Entrada inválida.", vbCriticalExit FunctionEnd If
Dim Anos, Meses, DiasDim iAnos, iMeses, Intervalo As Double
Intervalo = Date - Entrada
***Um ano tem exatamente 365,25 diasiAnos = Intervalo / 365.25Anos = Int(iAnos)iMeses = (iAnos - Anos) * 12Meses = Int(iMeses)Dias = DateDiff("d", DateSerial(DatePart("yyyy", Entrada) + Anos, DatePart("m", Entrada) + Meses, Day(Entrada)), Date)
If Dias = 30 ThenDias = 0Meses = Meses + 1End If
If Meses = 12 ThenMeses = 0Anos = Anos + 1End If
If Anos > 1 ThenAnos = Anos & " anos "ElseAnos = Anos & " ano "End If
If Meses > 1 ThenMeses = Meses & " meses "ElseMeses = Meses & " mês "End If
177
If Dias > 1 ThenDias = Dias & " dias."ElseDias = Dias & " dia."End If
CalculaTempo = Anos & Meses & Dias
End Function
*** Form LoadHoje.Text = Format(Now, "dd/mm/yyyy")
*** Botão de Comando:Resultado.Text = CalculaTempo(Entrada)
410 - Parâmetros Múltiplos para consultas em SQL - CORRIGIDO Enviado por: Roberto Alexandre Levy
Essa função gera um parametro para usar com a instrução LIKE do SQL,permitindo que o usuário possa escrever palavras compostas como critério de busca.
Function Cria_Parametro_Multiplo(cParam) Screen.MousePointer = vbHourglass Dim cNew As String cParam = Chr(42) & cParam & Chr(42) For A = 1 To Len(cParam) If Mid$(cParam, A, 1) = " " Then cNew = cNew & Chr(42) Else cNew = cNew & Mid(cParam, A, 1) End If Next A Cria_Parametro_Multiplo = cNew Screen.MousePointer = vbDefault End Function
OBS: O Caracter 42 e um asterisco. No caso de outras bases, como ORACLE ou SQO Server, use o caracter 37, percentual!Dica: Use uma InputBox para buscar o valor criterio desejado pelo usuario.Qq dúvidas, made um email!
Um abraço
411 - Como dar uma pausa no programa sem usar um Timer Enviado por: André Quites O. Santos
Me parece que o meio mais simples é utilizando a função Sleep da API do Windows. Além de simples, a função Sleep libera o Windows para atender a outras aplicações enquanto em espera:
Basta colocar no form a seguinte declaração:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Se a declaração for feita em um módulo, poderá ser pública.
Feito a declaração é só utilizar a função, passando como argumento o tempo da pausa em milisegundos. Por exemplo, para uma pausa de 1,5 segundos, teríamos:
Sleep(1500)
412 - Como impossibilitar que o form seja fechado, MAS COM APENAS UM COMANDO!!! Enviado por: Roberto Alexandre Levy
Nosso amigo Ricardo colocou uma forma de impedir o fechamento de um form. Mas temos uma forma bem mais simples, e com o mesmo efeito!
Simplesmente coloque no evento QueryUnload o seguinte código:
Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
178
Cancel = 1
End Sub
Tente fechá-lo de alguma forma....
Um abraço
413 - Enviar E-mail Enviado por: carlos angelo fedrigo junior
Dim TxtEmail as String
TxtEmail = "[email protected]"Shell "start.exe mailto:" & TxtEmail, vbHide
Este exemplo executa o seu gerenciador de e-mail padrão para enviar e-mail.
414 - Abrir URL padrão com código de 1 linha Enviado por: Danilo Faustinoni Cabello
shell "start http://www.vbbrasil.com", vbhide
415 - Correção mais descritiva de "Abrir URL padrão com código de 1 linha" Enviado por: Danilo Faustinoni Cabello
Coloque num commandbutton:
Public Sub Command1_Click() shell "start http://www.vbbrasil.com" , vbHideEnd Sub
Você também pode inserir uma textbox e um commandbutton assim
Public Sub Command1_Click() shell "start " + text1.Text , vbHideEnd Sub
Não se esqueça do espaço entre (start e o endereço)
416 - Detectar o conteúdo do CD Enviado por: Adriano Faria Alves
*** Módulo BAS
Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Public Const DRIVE_CDROM = 5
*** Private Sub Command1_Click()
Dim VolName As String, FSys As String, erg As LongDim VolNumber As Long, MCM As Long, FSF As LongDim Drive As String, DriveType As Long
VolName = Space(127)FSys = Space(127)
Drive = "E:\" *** O drive correspondente ao seu cd-rom.
DriveType& = GetDriveType(Drive$)
erg& = GetVolumeInformation(Drive$, VolName$, 127&, VolNumber&, MCM&, FSF&, FSys$, 127&)
Print "VolumeName:" & vbTab & VolName$Print "VolumeNumber:" & vbTab & VolNumber&
179
Print "MCM:" & vbTab & vbTab & MCM&Print "FSF:" & vbTab & vbTab & FSF&Print "FileSystem:" & vbTab & FSys$Print "DriveType:" & vbTab & DriveType&;
*** Se o drive for CDROM, checa o CD
If DriveType& = DRIVE_CDROM Then Print " (CDROM, ";
If erg& = 0 Then Print "não há CD no drive.)" Else Print "há CD no drive)" End IfElse Print " (Não há CDROM)"End If
End Sub
417 - Aumentar número de linhas na Combo (por padrão, o VB só mostra 8 e acrescenta uma scroll). Enviado por: Adriano Faria Alves
*** Módulo BAS
Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
*** Função no Módulo BAS
Public Sub SetComboHeight(oComboBox As ComboBox, lNewHeight As Long)
Dim oldscalemode As Integer
If TypeOf oComboBox.Parent Is Frame Then Exit Sub
oldscalemode = oComboBox.Parent.ScaleMode oComboBox.Parent.ScaleMode = vbPixels
MoveWindow oComboBox.hwnd, oComboBox.Left, _ oComboBox.Top, oComboBox.Width, lNewHeight, 1
oComboBox.Parent.ScaleMode = oldscalemode End Sub
*** Form_Load ()
Dim i As Integer For i = 1 To 15 Combo1.AddItem "Item " & i Next
Call SetComboHeight(Combo1, 400)
*** Onde 400 é o número que você aumenta ou diminui conforme o tanto de registro que quer mostrar quando abrir a combo.
418 - Descubra o código ASCII pelo VB Enviado por: Adriano Faria Alves
Abra a IMMEDIATE WINDOWS, digite e dê enter:
?Asc("p")Ele retornará 112 (o número ASCII do p minúsculo)
?Asc("P")Ele retornará 80 (o número ASCII do p maiúsculo)
E assim por diante, digite a letra ou número entre as aspas.
419 - Descobrir senha de proteção de Banco de Dados Access 97 Enviado por: Adriano Faria Alves
*Essa dica serve para mostrar a senha esquecida de proteção do banco de dados Access 97.
180
*Módulo BASOption Compare BinaryOption Explicit
*Função no Módulo BASPublic Function StPasswordOfStDatabase(stDatabase As String) As StringDim hFile As IntegerDim ich As IntegerDim stBuffer As StringDim rgbytRaw() As ByteDim rgbytPassword() As ByteDim rgbytNoPassword() As Byte
rgbytNoPassword = ChrB(134) & ChrB(251) & ChrB(236) & ChrB(55) & ChrB(93) & ChrB(68) & ChrB(156) & ChrB(250) & ChrB(198) & ChrB(94) & ChrB(40) & ChrB(230) & ChrB(19) & ChrB(182) & ChrB(138) & ChrB(96) & ChrB(84) & ChrB(148) & ChrB(123) & ChrB(54)
hFile = FreeFileOpen stDatabase For Binary As #hFileSeek #hFile, 66 + 1rgbytRaw = InputB(20, #hFile)Close #hFile
ReDim rgbytPassword(0 To 19)For ich = 0 To 19rgbytPassword(ich) = rgbytRaw(ich) Xor rgbytNoPassword(ich)Next ich
stBuffer = StrConv(rgbytPassword, vbUnicode) & vbNullCharStPasswordOfStDatabase = Left$(stBuffer, InStr(1, stBuffer, vbNullChar, vbBinaryCompare) - 1)End Function
*Para chamar a funçãoText1.Text = StPasswordOfStDatabase("c:\bd1.mdb")
420 - Saber quantas vezes seu programa foi executado Enviado por: Robson Soares
O exemplo mostra quantas vezes o programa foi executado:strRun = GetSetting(App.Title, 0, "Run")strRun = Val(strRun) + 1SaveSetting App.Title, 0, "Run", strRunMsgBox strRun
421 - Limpar ComboBox com Estilo 2 (Dropdown list) Enviado por: Eduardo de Souza
Para deixar o combobox com a propriedade style n.º 2 (dropdown list - combo não editável) em branco, basta colocar o código no evento clickde um command button qualquer:
Private Sub CommandButton_Clickcombobox.listindex = -1End Sub
Desta forma, declaramos que nenhum ítem foi selecionado no combo
422 - Procurando por um dado específico no banco Enviado por: Alex Ricardo Parolin
Vamos procurar por um nome no banco de dados e jogar numa TextBox. O procedimento é o seguinte:
private sub procurardim achou as boolean- tabela.MoveFirstDo if(tabela("Nome")="Nome Desejado")then TextBox.text= tabela("Nome") Exit sub else achou=false tabela.Movenext end if
181
loop until (tabela.EOF=true)if(achou=false)then aviso=msgbox("Não existe o nome procurado!",Vbexclamation+Vbokonly,"Erro")end ifend sub
Agora se você pretende joaga essa informação numa ListBox, ou Num ComboBox (para o caso de nomes iguais, mas outros dados diferentes):
private sub procurar2dim achou as booleandim erro as boolean
tabela.MoveFirstdo if(tabela("Nome")="Nome Desejado")then ListBox.AddItem(tabela("Nome")) listBox.Refresh achou=true tabela.movenext else achou=false erro=true tabela.MoveNext end ifloop until (tabela.EOF=true)if((achou=false)and(erro=true))then aviso=msgbox("Não existe o registro procurado!",vbexclamation+vbokonly,"erro")else aviso=msgbox("Verifique na lista os nomes encontrados!",vbinformation+vbokonly,"Nomes")end ifend sub
Qq notificação: [email protected]
423 - Out of stack space (Package & Depoyment Wizard) Enviado por: Graziele de Bortoli
Este erro acontece devido a um problema no arquivo de dependência do Crystal Report: Crystl32.dep.
Para solucionar esse erro edit o Crystl32.dep pelo Notepad ou um editor de texto semelhante e inclua o ; nas seguinteslinhas:
;[CRPE32.DLL];Dest=$(WinSysPath);Uses1=CRPE32.DLL;Uses2=
424 - Como procurar por uma pasta usando (API) SHBrowseForFolder Enviado por: Daniel Marques Pereira
'Coloque estas declarações em um módulo'Se colocar em um formulário lembre-se de não usar como 'Public'
'Existem outras flags para parametrizar a pesquisaPublic Const BIF_RETURNONLYFSDIRS = 1Public Const BIF_DONTGOBELOWDOMAIN = 2Public Const MAX_PATH = 260
Public Declare Function SHBrowseForFolder Lib "shell32" ( _ lpbi As BrowseInfo _) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" ( _ ByVal pidList As Long, _ ByVal lpBuffer As String _) As Long
Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" ( _ ByVal lpString1 As String, _
182
ByVal lpString2 As String _) As Long'Tipo para defPublic Type BrowseInfo hWndOwner As Long pIDLRoot As Long pszDisplayName As Long lpszTitle As Long ulFlags As Long lpfnCallback As Long lParam As Long iImage As LongEnd Type
'No evento clic de um botão no formulárioPrivate Sub Command1_Click()
Dim lpIDList As Long Dim sBuffer As String Dim szTitle As String Dim tBrowseInfo As BrowseInfo 'Personaliza a procura szTitle = "Titulo da procura" With tBrowseInfo .hWndOwner = Me.hWnd .lpszTitle = lstrcat(szTitle, "") .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN + BIF_EDITBOX End With 'Abre a janela de procura 'E retorna o caminho da pasta selecionada lpIDList = SHBrowseForFolder(tBrowseInfo) 'Se existir alguma pasta selecionada extrair If (lpIDList) Then sBuffer = Space(MAX_PATH) SHGetPathFromIDList lpIDList, sBuffer sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1) MsgBox "Caminha da Pasta selecionada" + vbCrLf + vbCrLf + sBuffer End If
End Sub
425 - Conexão de multiplos clientes em um único servidor (Winsock) Enviado por: Daniel Lopes de Carvalho
Para conectar diversos clientes em um único servidor é necessário:
SERVIDORNo aplicativo de servidor cria a seguinte rotina:...WskSvr(0).LocalPort = 1050 - > Utilize a porta que desejar.WskSvr(0).Listen...
Private Sub WskSvr_ConnectionRequest(Index As Integer, ByVal requestID As Long)On Error Resume Next If Index = 0 Then CnnSvr = CnnSvr + 1 Load WskSvr(CnnSvr) WskSvr(CnnSvr).Accept requestID End IfEnd Sub
Esta rotina fará com que toda vez que for solicitada uma nova conexão ele incrementa o contador CNNSVR e pede para carregar um novo controle WINSOCK para receber esta solicitação.
CLIENTENo Aplicativo de cliente as funções serão as mesmas.
WskCli(0).RemoteHost = "127.0.0.1" -> Utilize o endereço de IP ou o hostname do servidor.WskCli(0).RemotePort = 1050 -> Utilize a mesma porta que foi utilizada no servidor.
183
426 - Formatar Hora com valor superior à 23:00 Enviado por: Luiz Carlos Moreira Brazão Lima
Quando você usa variável no formato Date, as horas só podem aparecer entre os valores 00:00:00 - 23:59:59Aqui está uma rotina para mostrar valores superiores como 48:00.
Public Function hFormat(dHora As Double) As StringDim Horas As String, Minutos As StringHoras = Str(Fix(FullTime / 3600))Minutos = Str((Fix(FullTime / 60) Mod 60))hFormat = Format(Horas & ":" & Minutos, "hh:nn")End Function
Não testei com Single nem Integer como parâmetro.[]'s
427 - Função que retorna a semana em extenso Enviado por: fabio aparecido da silva
Function ExtensoSemana(DATA)SEMANA = Array("Domingo", "Segunda-Feira", "Terça-Feira", "Quarta-Feira", _ "Quinta-Feira", "Sexta-Feira", "Sabado")ExtensoSemana = SEMANA(WeekDay(DATA) - 1)End Function
Exemplo:
text1.text = ExtensoSemana("16/03/2001") outext1.text = ExtensoSemana(Date)
428 - Inicio do Mês Enviado por: fabio aparecido da silva
Function InicioMes(DATA) Total = "01" & "/" & CStr(Month((CDate(DATA)))) & "/" & CStr(Year(Date))InicioMes = Format(CDate(Total), "DD/MM/YYYY")End Function
mais dicas:www.fasinfo.cjb.net
429 - Função Segunda-Feira Enviado por: fabio aparecido da silva
Function Segunda(DATA)If WeekDay(DATA) = 1 Then Segunda = CDate(DATA) - 6Else Segunda = CDate(DATA) - (WeekDay(DATA) - 2)End IfEnd Function
Mais dicas:www.fainfo.cjb.net
430 - Centraliza textos em textsbox Enviado por: fabio aparecido da silva
Function Central(Texto, Tamanho, MeuCaracter)If Len(Texto) = Tamanho Then Central = Texto Else Ajusta = (Tamanho - Len(Texto)) / 2 Central = String(Ajusta, MeuCaracter) + Texto + String(Ajusta, MeuCaracter)End IfEnd Function
431 - Informações sobre sitema sem o uso de API,s Enviado por: Fabio Silva
184
O uso da função "ENVIRON" para retornar variaveis do sistema.
432 - Achando uma letra na String Enviado por: Carlos Eduardo Rocco Froes
Esta função apenas recebe uma string e procura por uma letra ou numero dentro delaRETORNO:( True se achar e False se não achar )
Private Function Busca_String(obj_str, in_letra) As Boolean
Dim aFor a = 1 To Len(obj_str) If Mid(obj_str, a, 1) = in_letra Then Busca_String = True Exit Function End IfNextBusca_String = False
End Function
433 - Removendo acentos para impressão de relatórios em impressoras matriciais Enviado por: Luiz Fernando C. Capacio
No módulo (.BAS) insira esta variavel como globalGlobal vtexconv As Variant
Insira esta parte do fonte onde deseja obter o resultado da conversãoOpen "LPT1" for output as #1vtexto="Teste de acentuação no VB"vtexconv = "": removeacentos (vtexto)print #1, vtexconv 'Variavel tera o valor convertido.close #1
No módulo (.BAS) insira esta função para efetuar a conversãoFunction removeacentos(texto As String) variavel = Text1 vpar = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜàáâãäåçèéêëìíîïòóôõöùúûü" vcod = "AAAAAACEEEEIIIIOOOOOUUUUaaaaaaceeeeiiiiooooouuuu" For c = 1 To Len(variavel) vpos = InStr(1, vpar, Mid(variavel, c, 1)) If vpos <> 0 Then vtexconv = vtexconv + Mid(vcod, Val(vpos), 1) Else vtexconv = vtexconv + Mid(variavel, c, 1) End If NextEnd Function
434 - Alternando NumLock e CapsLock por código Enviado por: Fábio Perkowitsch Mulero
Você pode inserir esse fragmento de código em seu programa e fazer com que seja acionado ou desacionado as teclas NUM e CAPS Lockpor botões ou eventos de seu programa, para isso é só chamar a sub rotina AlternaCAPS() para o Caps Lock e AlternaNUM() para o NUM Lock.
Public Const VK_CAPITAL = &H14Public Const VK_NUMLOCK = &H90
Public Type KeyboardBytes kbByte(0 To 255) As ByteEnd TypePublic kbArray As KeyboardBytesPublic Declare Function GetKeyState Lib "User32" (ByVal nVirtKey As Long) As LongPublic Declare Function GetKeyboardState Lib "User32" (kbArray As KeyboardBytes) As LongPublic Declare Function SetKeyboardState Lib "User32" (kbArray As KeyboardBytes) As Long
Public Sub AlternaCAPS() GetKeyboardState kbArray kbArray.kbByte(VK_CAPITAL) = IIf(kbArray.kbByte(VK_CAPITAL) = 1, 0, 1) SetKeyboardState kbArrayEnd Sub
Public Sub AlternaNUM() GetKeyboardState kbArray
185
kbArray.kbByte(VK_NUMLOCK) = IIf(kbArray.kbByte(VK_NUMLOCK) = 1, 0, 1) SetKeyboardState kbArrayEnd Sub
434 - Alternando NumLock e CapsLock por código Enviado por: Fábio Perkowitsch Mulero
Você pode inserir esse fragmento de código em seu programa e fazer com que seja acionado ou desacionado as teclas NUM e CAPS Lockpor botões ou eventos de seu programa, para isso é só chamar a sub rotina AlternaCAPS() para o Caps Lock e AlternaNUM() para o NUM Lock.
Public Const VK_CAPITAL = &H14Public Const VK_NUMLOCK = &H90
Public Type KeyboardBytes kbByte(0 To 255) As ByteEnd TypePublic kbArray As KeyboardBytesPublic Declare Function GetKeyState Lib "User32" (ByVal nVirtKey As Long) As LongPublic Declare Function GetKeyboardState Lib "User32" (kbArray As KeyboardBytes) As LongPublic Declare Function SetKeyboardState Lib "User32" (kbArray As KeyboardBytes) As Long
Public Sub AlternaCAPS() GetKeyboardState kbArray kbArray.kbByte(VK_CAPITAL) = IIf(kbArray.kbByte(VK_CAPITAL) = 1, 0, 1) SetKeyboardState kbArrayEnd Sub
Public Sub AlternaNUM() GetKeyboardState kbArray kbArray.kbByte(VK_NUMLOCK) = IIf(kbArray.kbByte(VK_NUMLOCK) = 1, 0, 1) SetKeyboardState kbArrayEnd Sub
435 - Digitação em maiusculo mesmo com o Caps Look desligado Enviado por: Júlio Cesar Moraes
Com esses comandos é posível fazer a digitação sair semprecom caracteres em maiúsculo, independente de o Caps Look estar ligado ou desligado
Private Sub Campotxt_Change() Campotxt.Text = UCase(Campotxt.Text) Campotxt.SelStart = Len(Campotxt.Text)End Sub
436 - Usando o AutoCompletar do Internet Explorer 5 Enviado por: Fábio Perkowitsch Mulero
Inserindo esse fragmento de código vc pode usar a ferramentaautocompletar do IE5, bastando para isso chamar a sub rotinaMakeAutoComplete() no evento form_load e passando qual textboxira usar essa ferramenta.
Public Declare Function SHAutoComplete Lib "Shlwapi.dll" (ByVal hwndEdit As Long, ByVal dwFlags As Long) As LongPublic Const SHACF_DEFAULT As Long = &H0
Public Sub MakeAutoComplete(ByRef TextB As TextBox) Call SHAutoComplete(TextB.hWnd, SHACF_DEFAULT)End Sub
437 - Email - Ler o conteúdo com CDO Enviado por: Ricardo Garrido Schwach
Antes de Começar: Ir no Menu Project, opção Referências e Ativara referência Microsoft Active Messaging.
Obs.: É Necessário ter a seguinte DLL registrada: OLEMSG32.DLL
Private Sub Command1_Click() Dim objSession As Object Set objSession = CreateObject("MAPI.Session") objSession.Logon "Configurações do MS Exchange", , False, False For Each objMessage In objSession.Inbox.Messages
186
If objMessage.Unread = True Then If InStr(objMessage.Subject, "Assunto do Email") Then Var = objMessage.Text End If End If Next objMessageEnd Sub
438 - Imagem como fundo de Formulário MDI Enviado por: Moacir Ribeiro do Carmo
Crie um formulário MDI e defina a sua propriedade Enable como False e BorderStyle como 0 - None.Inclua nele uma imagem chamada imgBackgroud e insira o seguinte código de evento:
Private Sub Form_Load() With imgBackgroud .Stretch = False
.Top = 0 .Left = 0
Me.Height = .Height Me.Width = .Width End With
Me.Top = (FormMDI.ScaleHeight - Me.Height) * 0.45 Me.Left = (FormMDI.ScaleWidth - Me.Width) \ 2End Sub
'Obs: FormMDI é o nome do formulário MDI. Este formulário deve'ser carregado no evento MDIForm_Load:
Private Sub MDIForm_Load()
With Screen 'Ocupa toda a tela Me.Move 0, 0, .Width, .Height - 27 * 15End With
frmBackground.Show
End Sub
439 - Criando animação no Caption do Form sem API. Enviado por: Arthur Lopes
Você deve criar 5 timer : ( Timer, Timer1, Timer2, Timer3 e Timer4 )
==> General Declarations <==Dim vform As String
==> No LOAD do FORM <=='Private Sub Form_Load()vform = "T"Form1.Caption = vformTimer1.Enabled = TrueTimer2.Enabled = FalseTimer3.Enabled = FalseTimer4.Enabled = False'End Sub
==> No Timer do Timer1 <=='Private Sub Timer1_Timer()If vform = "T" Then vform = vform + "e" Form1.Caption = vform Timer2.Enabled = TrueEnd If'End Sub
==> No Timer do Timer2 <=='Private Sub Timer2_Timer()If vform = "Te" Thenvform = vform + "s"
187
Form1.Caption = vformTimer3.Enabled = TrueEnd If'End Sub
==> No Timer do Timer1 <=='Private Sub Timer3_Timer()If vform = "Tes" Then vform = vform + "t" Form1.Caption = vform Timer4.Enabled = TrueEnd If
End Sub
440 - Centralizando o Form em Runtime Enviado por: William Rodrigues
'Para colcocar um Form no centro da tela em tempo de execução escreva os seguintes códigos:Private Sub Form_Resize()On Error Resume Next 'Evita erro caso o usuário minimize o FormWith Me .Left = (Screen.Width - .Width) / 2 'Alinha o form no horizontalmente no centro .Top = (Screen.Height - .Height) / 2 'Alinha o form no verticalmente no centroEnd WithEnd Sub
441 - Preenchendo um ComboBox ou ListBox com dados de um Arquivo Enviado por: William Rodrigues
'Para esta dica inicie um novo projeto e insira um ComboBox e um ListBox e crie uma arquivo de texto qualquer (Ex.: C:\Lista de Alunos.txt"). Renomei-e o ComboBox para CboFile e o ListBox para LstFile. Em seguida no evento Load do Form1, insira as seguintes linhas de comando:Private Sub Form_Load ()'Declaração das variáveisDim fnum As IntegerDim lines As IntegerDim a_line As StringIf Dir("C:\Lista de Alunos.txt", vbArchive) = Empty Then 'Verifica se o arquivo se o arquivo existe MsgBox "O arquivo não foi encontrado!", vbCritical, App.Title 'Caso o arquivo não seja encontrado exibe a caixa de mensagem Exit Sub 'Envia o comando para o fim da rotinaEnd Iffnum = FreeFile 'Devolve a variável fnum a crarterística de FreeFile
Open "C:\Lista de Alunos.txt" For Input As fnum 'Abre o arquivo Do While Not EOF(fnum) 'Vai para fim de arquivo Input #fnum, a_line 'Ler a linha de dados do arquivo lines = lines + 1'Pula para a linha seguinte do arquivo cada vez que o laço e repitido, até chegar a última linha CboFile.AddItem a_line 'Preenche o ComboBox com os dados do adicionando cada linha até a última linha do arquivo LstFile.Additem a_line 'Preenche o ListBox com os dados do adicionando cada linha até a última linha do arquivo Loop 'Finaliza o LaçoClose fnum 'Fechar o arquivoEnd Sub
442 - Carregando seu programa ao iniciar o windows automaticamente Enviado por: Gilson Cezar Rodrigues Bernal
'EXE LocationPublic Const MAX_PATH = 206Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As LongPublic Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Sub CreateIniLoad() a = Environ("windir") 'Get Current Location Dim lngFileHandle As Long Dim lngReturn As Long Dim strFilePath As String strFilePath = Space$(MAX_PATH) lngFileHandle = GetModuleHandle(App.EXEName) lngReturn = GetModuleFileName(lngFileHandle, strFilePath, MAX_PATH) Text1.Text = strFilePath
188
'Copy Server File to Windows System Directory If Text1.Text = a & "\SYSTEM\yourfile" Then GoTo jumpcopy FileCopy strFilePath, a & "\SYSTEM\yourfile" 'Modify WIN.INI jumpcopy: Open a & "\WIN.INI" For Input As #1 Open a & "\WIN.ANA" For Output As #2 While Not EOF(1) Input #1, b Print #2, Spc(0); b If b = "load=" & a & "\SYSTEM\yourfile" Then Close #1 Close #2 Kill a & "\WIN.ANA" GoTo end ElseIf b = "[windows]" Then Print #2, Spc(0); "load=" & a & "\SYSTEM\yourfile" Input #1, b End If Wend Close #1 Close #2 Kill a & "\WIN.INI" Name a & "\WIN.ANA" As a & "\WIN.INI"End Sub
443 - Abra a janela Mapear Unidade de Rede Enviado por: Gilson Cezar Rodrigues Bernal
Private Declare Function WNetConnectionDialog Lib "mpr.dll" _(ByVal hwnd As Long, ByVal dwType As Long) As Long
x% = WNetConnectionDialog(Me.hwnd, 1)
444 - Listar as músicas de um CD Audio Enviado por: Gilson Cezar Rodrigues Bernal
Option ExplicitPrivate Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" _(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "Kernel32" Alias "WritePrivateProfileStringA" _(ByVal AppName As String, ByVal KeyName As String, ByVal keydefault As String, ByVal Filename As String) As Long
Global CDMin As IntegerGlobal CDSec As IntegerGlobal TMin As IntegerGlobal TSec As IntegerGlobal RMin As IntegerGlobal RSec As IntegerGlobal TimeTrack As StringGlobal TimeElapsed As StringGlobal TimeRemaining As String
Global Artist1 As StringGlobal Title1 As String
Global Artist2 As StringGlobal Title2 As String
Sub CDAudioProperties()Dim T As DoubleOn Error Resume NextT = Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3", 5)
End Sub
Function GetRawRemainingTime(MMCOntrol1 As Object) As StringDim Z As String, Min As String, Sec As String, _Temp As String
Z = GetRunningTime(MMCOntrol1)Z = GetTrackTime(MMCOntrol1)
189
Min = LTrim$(Str$(CDMin - TMin))Sec = LTrim$(Str$(CDSec - TSec))
RMin = Val(Min)RSec = Val(Sec)
If RSec < 0 Then RSec = 60 + Val(Sec) RMin = RMin - 1End IfMin = LTrim$(Str$(RMin))Temp = Trim$(Str$(RSec))If Len(Temp) = 1 Then Sec = "0" + TempElse Sec = TempEnd IfGetRawRemainingTime = Min + SecEnd FunctionFunction GetRemainingTime(MMCOntrol1 As Object) As StringDim Z As String, Min As String, Sec As String, _Temp As String
Z = GetRunningTime(MMCOntrol1)Z = GetTrackTime(MMCOntrol1)
Min = LTrim$(Str$(CDMin - TMin))Sec = LTrim$(Str$(CDSec - TSec))
RMin = Val(Min)RSec = Val(Sec)
If RSec < 0 Then RSec = 60 + Val(Sec) RMin = RMin - 1End IfMin = LTrim$(Str$(RMin))Temp = Trim$(Str$(RSec))If Len(Temp) = 1 Then Sec = "0" + TempElse Sec = TempEnd IfGetRemainingTime = Min + ":" + SecEnd Function
Sub GetTime(MMCOntrol1 As Object)Dim Z$Z$ = GetRemainingTime(MMCOntrol1)
End Sub
Function GetTrackTime(MMCOntrol1 As Object) As StringDim Length&, Entry2$, Min$, Sec$, D$, Entry$MMCOntrol1.TimeFormat = 2Length& = MMCOntrol1.TrackLengthMin$ = Str$(Length& And &HFF)Sec$ = LTrim$(Str$((Length& And 65280) / 256))Entry2$ = Min$ & ":" & Sec$If Len(Sec$) = 1 Then Entry2$ = Min$ + ":0" + Sec$Entry$ = Min$ + ":" + Sec$If Len(Entry2$) = 4 Then D$ = "0" + Entry2$Else D$ = Entry2$End IfIf Len(Entry2$) = 3 Then D$ = "00" + Entry2$Else D$ = Entry2$End IfD$ = Entry2$
190
GetTrackTime = Trim$(D$)MMCOntrol1.TimeFormat = 10CDMin = Val(Min$)CDSec = Val(Sec$)
End Function
Function GetRunningTime(MMCOntrol1 As Object) As StringDim E As Long, M As String, S As String, Length&, Min$, Sec$, D As Long, Entry2$MMCOntrol1.TimeFormat = 2Length& = MMCOntrol1.Position - MMCOntrol1.TrackPositionMin$ = Str$(Length& And &HFF)Sec$ = LTrim$(Str$((Length& And 65280) / 256))If Len(Sec$) = 3 Then D = Val(Min$) - 1 Min$ = LTrim$(Str$(D)) E = Val(Right$(Sec$, 2)) + 4 Sec$ = LTrim$(Str$(E))End If
M = Min$'If Len(Min$) = 1 Then M = "0" + Min$ Else M = Min$'If Val(M) = 0 Then M = "00"'If Val(M) = 1 Then M = "01"'If Val(M) = 2 Then M = "02"'If Val(M) = 3 Then M = "03"'If Val(M) = 4 Then M = "04"'If Val(M) = 5 Then M = "05"'If Val(M) = 6 Then M = "06"'If Val(M) = 7 Then M = "07"'If Val(M) = 8 Then M = "08"'If Val(M) = 9 Then M = "09"If Len(Sec$) = 1 Then S = "0" + Sec$Else If Len(Sec$) = 3 Then S = Mid$(Sec$, 2) Else S = Sec$ End IfEnd IfTMin = Val(M)TSec = Val(S)Entry2$ = LTrim$(M) + ":" + LTrim$(S)MMCOntrol1.TimeFormat = 10GetRunningTime = Entry2$End Function
Function GetRawRunningTime(MMCOntrol1 As Object) As StringDim E As Long, M As String, S As String, Length&, Min$, Sec$, D As Long, Entry2$MMCOntrol1.TimeFormat = 2Length& = MMCOntrol1.Position - MMCOntrol1.TrackPositionMin$ = Str$(Length& And &HFF)Sec$ = LTrim$(Str$((Length& And 65280) / 256))If Len(Sec$) = 3 Then D = Val(Min$) - 1 Min$ = LTrim$(Str$(D)) E = Val(Right$(Sec$, 2)) + 4 Sec$ = LTrim$(Str$(E))End If
M = Min$'If Len(Min$) = 1 Then M = "0" + Min$ Else M = Min$'If Val(M) = 0 Then M = "0"'If Val(M) = 1 Then M = "1"'If Val(M) = 2 Then M = "2"'If Val(M) = 3 Then M = "3"'If Val(M) = 4 Then M = "4"'If Val(M) = 5 Then M = "5"
191
'If Val(M) = 6 Then M = "6"'If Val(M) = 7 Then M = "7"'If Val(M) = 8 Then M = "8"'If Val(M) = 9 Then M = "9"If Len(Sec$) = 1 Then S = "0" + Sec$Else If Len(Sec$) = 3 Then S = Mid$(Sec$, 2) Else S = Sec$ End IfEnd IfEntry2$ = M + SMMCOntrol1.TimeFormat = 10GetRawRunningTime = Entry2$End Function
Function GetRawTrackTime(MMCOntrol1 As Object) As StringDim Length&, Entry2$, Min$, Sec$, D$MMCOntrol1.TimeFormat = 2Length& = MMCOntrol1.TrackLengthMin$ = Str$(Length& And &HFF)Sec$ = LTrim$(Str$((Length& And 65280) / 256))Entry2$ = Min$ + Sec$If Len(Sec$) = 1 Then Entry2$ = Min$ + "0" + Sec$GetRawTrackTime = Entry2$MMCOntrol1.TimeFormat = 10
End Function
Public Function myReadINI(inifile, inisection, inikey, iniDefault)'Fail fracefully if no file / wrong file is specified.'If no section (appname), default is first appname'if no key, default is first key
Dim lpApplicationName As StringDim lpKeyName As StringDim lpDefault As StringDim lpReturnedString As StringDim nSize As LongDim lpFileName As StringDim retval As LongDim Filename As StringlpDefault = Space$(254)lpDefault = iniDefault
lpReturnedString = Space$(254)
nSize = 254lpFileName = inifilelpApplicationName = inisectionlpKeyName = inikeyFilename = lpFileNameretval = GetPrivateProfileString _(lpApplicationName, lpKeyName, lpDefault, lpReturnedString, nSize, lpFileName)myReadINI = lpReturnedStringEnd Function
Public Function myWriteINI(inifile As String, inisection As String, inikey As String, Info As String) As StringDim retval As Longretval = WritePrivateProfileString(inisection, inikey, Info, inifile)myWriteINI = LTrim$(Str$(retval))End Function
Public Function GenCDSerial(MMCOntrol1 As Object) As LongConst MCI_FORMAT_MILLISECONDS = 0Const MCI_FORMAT_MSF = 2Const MCI_FORMAT_TMSF = 10'MCI_Format :0,2,10 are the only supported formats for CDDim Compat As Integer
192
Dim i As IntegerDim dwtotal&, dwtemp&Dim byte0%, byte1%, byte2%, byte3%'compat = 0 for EXISTING code'Compat = 1 for use with CDPLAYER.EXECompat = 1MMCOntrol1.Notify = FalseMMCOntrol1.Wait = TrueMMCOntrol1.Shareable = TrueIf MMCOntrol1.Error <> 0 Then MsgBox MMCOntrol1.ErrorMessage Exit FunctionEnd IfMMCOntrol1.TimeFormat = MCI_FORMAT_MSFdwtotal& = 0For i = 1 To MMCOntrol1.Tracks DoEvents MMCOntrol1.Track = i dwtemp& = MMCOntrol1.TrackPosition byte0% = dwtemp& And &HFF& byte1% = (dwtemp& And &HFF00&) \ &H100 byte2% = (dwtemp& And &HFF0000) \ &H10000 byte3% = (dwtemp& And &H7F000000) \ &H1000000 If (dwtemp& And &H80000000) <> 0 Then ' put sign bit back into byte4 byte3 = byte3 + &H80 End If dwtemp& = byte0% * &H10000 + byte1% * &H100 + byte2% dwtotal& = dwtotal& + dwtemp&Next iIf MMCOntrol1.Tracks < 3 Then dwtotal& = dwtotal& + msf2frames(MMCOntrol1.Length) + CompatEnd IfGenCDSerial = dwtotal&
End FunctionFunction msf2frames(msf As Long) As LongRem From the KnowledgeBaseRem byte1 = MMControl1.Position And &HFF&Rem byte2 = (MMControl1.Position And &HFF00&) \ &H100Rem byte3 = (MMControl1.Position And &HFF0000) \ &H10000Rem byte4 = (MMControl1.Position And &H7F000000) \ &H1000000Rem If (MMControl1.Position And &H80000000) <> 0 ThenRem ' put sign bit back into byte4Rem byte4 = byte4 + &H80Rem End If Dim byte0, byte1, byte2, byte3 As Integer Dim Min, Sec, fra As Integer byte0 = msf And &HFF& byte1 = (msf And &HFF00&) \ &H100 byte2 = (msf And &HFF0000) \ &H10000 byte3 = (msf And &H7F000000) \ &H1000000 If (msf And &H80000000) <> 0 Then ' put sign bit back into byte4 byte3 = byte3 + &H80 End If Min = byte0 Sec = byte1 fra = byte2 msf2frames = (Min * 60 + Sec) * 75 + fra End Function
Function Z_Trim(String1 As String) As StringDim A As IntegerFor A = 1 To Len(String1) If Mid$(String1, A, 1) = Chr$(0) Then Exit ForNext AZ_Trim = RTrim$(Left$(String1, A - 1))
End Function
445 - Exibindo/Ocultando o ponteiro do mouse Enviado por: Gilson Cezar Rodrigues Bernal
193
Declare Function ShowCursor& Lib "user32" (ByVal bShow As Long)
Private Sub Command1_Click() ShowCursor (bShow = True)End Sub
Private Sub Command2_Click() ShowCursor (bShow = False)End Sub
446 - Criando novos efeitos de bordas em controles Enviado por: Gilson Cezar Rodrigues Bernal
Private Declare Function GetWindowLong Lib "user32" Alias _ "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As LongPrivate Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _ ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _ ByVal CX As Long, ByVal CY As Long, ByVal wFlags As Long) As Long
Private Const GWL_EXSTYLE = (-20)Private Const WS_EX_CLIENTEDGE = &H200Private Const WS_EX_STATICEDGE = &H20000
Private Const SWP_FRAMECHANGED = &H20 ' Frame ChangedPrivate Const SWP_NOMOVE = &H2Private Const SWP_NOOWNERZORDER = &H200Private Const SWP_NOSIZE = &H1Private Const SWP_NOZORDER = &H4Public Function ThinBorder(ByVal lhWnd As Long, ByVal bState As Boolean) Dim rtnVal As Long ' Get current border style rtnVal = GetWindowLong(lhWnd, GWL_EXSTYLE) ' Set new border style according to bState If Not (bState) Then ' Remove Office 2000 look rtnVal = rtnVal Or WS_EX_CLIENTEDGE And Not WS_EX_STATICEDGE Else ' Create Office 2000 like border on the control rtnVal = rtnVal Or WS_EX_STATICEDGE And Not WS_EX_CLIENTEDGE End If ' Apply the change SetWindowLong lhWnd, GWL_EXSTYLE, rtnVal SetWindowPos lhWnd, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or _ SWP_NOOWNERZORDER Or SWP_NOZORDER Or SWP_FRAMECHANGED End Function
447 - Animação no titulo, demais !!!! Enviado por: Danilo Faustinoni Cabello
Olá vi e revi muitos códigos para animação no titulo,mas sem querer desprestigiar os que enviaram o código eleera ruim ou chato de fazer como:crie 5 timer cada um com intervela de ...ou faça um comando if para cada letra que vc for...
eu estava "brincando" com o código MID e crie uma animaçãocom apenas um timer. Vamos fazer !?
'Crio as variaveisDim title, x
Private Sub Form_Load() 'mensagem do form title = "digite aqui a mensagem" Me.Caption = "" x = 1End Sub
194
Private Sub Timer1_Timer() 'se o valor de x for igual ao numero de caracteres da 'mensagem mais 1 If x = Len(title) + 1 Then x = 1 Me.Caption = "" Exit Sub End If 'caption do form igual ao caption mais letras da mensagem Me.Caption = Me.Caption + Mid(title, x, 1) x = x + 1End Sub
só isso, escolha quanto de intervalo vc quer e nunca mais façamilhões de ifs para fazer uma mensagenzinha
448 - Como Executar Um Som De Fundo No Código Enviado por: mario gardenias neto
Basta Declarar a Função Playsound
Após Executar:
Call (Variavel) = playsounda("path + Som")
449 - Aspas (tratando aspas) Enviado por: Flávio Luiz Teixeira Dominges
Function TrocaAspas(cValor As String) As String
Dim i As Integer, cValorAux As String cValorAux = cValor
i = InStr(cValorAux, Chr(34)) Do Until i = 0
cValorAux = Left(cValorAux, i - 1) & Chr(96) & Mid(cValorAux, i + 1)
i = InStr(i, cValorAux, Chr(34))
Loop i = InStr(cValorAux, Chr(39)) Do Until i = 0
cValorAux = Left(cValorAux, i - 1) & Chr(96) & Mid(cValorAux, i + 1)
i = InStr(i, cValorAux, Chr(39))
Loop TrocaAspas = cValorAux
End Function
450 - TROCANDO PONTO POR VIRGULA(2) Enviado por: Lucas Mesquita Vieira
Uma boa dica para fazer a troca:
Replace(Campo,".",",")ou Virgula por PontoReplace(Campo,",",".")
452 - conectar Vb com MySql Enviado por: georgenes s oliveira
Voce precisa fazer referencia do ADO 2.1 e depois fazer os seguinte comandos par aconectar
Dim Ssql As StringDim cnn As ADODB.ConnectionDim Rs As Recordset
'**** crianto conexao
195
Set cnn = CreateObject("ADODB.Connection")'**** abrindo conexaocnn.Open "driver=MySQL};server=localhost;uid=usuario;pwd=senha;database=NomeDoDatabase"'**** criando recordsetSet Rs = CreateObject("ADODB.RecordSet")'**** efetuando conexao do recordsetSet Rs.ActiveConnection = cnnRs.Open "select * from clientes"
'*** efetuando isert na tabela clientes no NomeDoDatabase Ssql = "insert into clientes (Nome,endereco) values ('Georgenes','Rua Do Endereco, 99')"cnn.Execute Ssql
no CRYSTAL basta escolher opcao de criar com SQL/ODBC, Escolher o MySql e criar os RPT
453 - NumeroBox Enviado por: Frank de Alcantara Nogueira Soares
Para fazer usar uma caixa de texto que só aceita valoresnuméricos crie a seguinte função:
Em um módulo bas
Public Function NumeroBox(Numero As String, Campo As TextBox) If Campo.Text = "" Then Exit Function If Not IsNumeric(Numero) Then MsgBox "Digite apenas Números" Campo.Text = "" 'Limpa a caixa de Texto End IfEnd Function
Para chamar a função coloque as seguintes linhas no evento change da Caixa de Texto
NumeroBox Text1, Text1
By Fox Sistemas
454 - Reiniciar seu computador com apenas uma linha Enviado por: Bruno Sandivilli Antunes Portis
Coloque este comando em um botão
shell "rundll.dll",vbnormal
455 - TAB automático para o próximo campo(bem mais fácil) Enviado por: Pablo Till
No evento Form_KeyDown, basta adicionar as linhas:If KeyCode = vbKeyReturn Then SendKeys "{Tab}"
Ex:Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyReturn Then SendKeys "{Tab}"End Sub
Falow Galera !!!!
Pablo
456 - Correção do item " Reiniciar seu computador com apenas uma linha " Enviado por: Bruno Sandivilli Antunes Portis
Coloque este comando em um botão desejado ( Neste exemplo o botão escolhido foi o command1 )
Private Sub Command1_Click()Shell "c:\windows\rundll.exe user.exe,exitwindows", vbNormalFocusEnd Sub
196