You are on page 1of 225

williamdsilva@aol.com.

br

1

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

VISUAL BA 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

williamdsilva@aol.com.br

2

1 - Reconhecendo o pressionamento de teclas Enviado por: Visual Basic Brasil Declare as constantes que você desejar utilizar em um módulo. Exemplo:

Global Global Global Global Global Global Global Global Global Global Global Global Global Global Global Global

Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const

KEY_F1 = &H70 KEY_F2 = &H71 KEY_F3 = &H72 KEY_F4 = &H73 KEY_F5 = &H74 KEY_F6 = &H75 KEY_F7 = &H76 KEY_F8 = &H77 KEY_F9 = &H78 KEY_F10 = &H79 KEY_F11 = &H7A KEY_F12 = &H7B KEY_F13 = &H7C KEY_F14 = &H7D KEY_F15 = &H7E 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 o código no procedimento Form_Resize. Assim, sempre que você modificar o tamanho do formulário, o controle será automaticamente centralizado.

williamdsilva@aol.com.br

3

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 novo projeto. Na verdade, ele carrega um projeto já existente no seu diretório. Mas você pode criar seu projeto para ser carrejado quando iniciar um novo. Basta salvar o projeto como auto32ld.vbp para o VB 32 bits, auto16ld.vbp para 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ça uma 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:

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) A String s '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 '***** lionardo@base.com.br 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

williamdsilva@aol.com.br

4

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 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

dll" _ (ByVal hwnd As Integer.hwnd. _ SW_SHOWNORMAL) End Sub 8 .williamdsilva@aol.com. agora sempre que for pressionado um enter no formulário sera disparado um tab. _ vbNullString. digite: Private Sub label1_Click() Dim iret As Long iret = ShellExecute(Me. _ vbYesNo + vbExclamation. 1º . _ "c:\". _ ByVal lpDirectory As String. 2º .vbbrasil.com".Mude a propriedade KeyPreview do formulário para true. _ vbNullString. . "Atenção") If sair = vbYes Then End Else Cancel = True End If End Sub 9 . _ ByVal lpOperation As String.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.br 5 Private Declare Function ShellExecute Lib _ "shell. _ ByVal nShowCmd As Integer) As Integer #End If Private Const SW_SHOWNORMAL = 1 No procedimento CLICK de algum controle. _ ByVal lpFile As String. _ "http://www. _ ByVal lpParameters As String.Coloque o seguinte código no evento KeyDown do formulário. If KeyCode = vbKeyReturn then Sendkeys "{Tab}" Pronto.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?".

1.Text.com. entao é verificado se a busca será feita ' "para baixo" (F3) ou "para cima" (Shift+F3) If KeyCode = 114 Then If InStr(Text1.Busca de Strings em um TextBox Enviado por: Fausto Fiorese No General do Form: Public Last_Pos As Integer Public First_Pos As Integer Public Find_String As String Private Sub Text1_GotFocus() 'Valor Default p/ as variaveis Last_Pos = 1 First_Pos = 1 End Sub Private Sub Text1_KeyUp(KeyCode As Integer. Len(Find_String)) = Find_String Then Pos% = i% Exit For End If DoEvents Next For i% = (First_Pos . 'Existindo a string. i%. Default) If Find_String = "" Then Exit Sub KeyCode = 114 'Forca a passagem pela Busca End 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.Text.williamdsilva@aol.1) To 1 Step -1 . Find_String) = 0 Then MsgBox "Texto não encontrado!". 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 .Letras Maiúsculas e Minúsculas Enviado por: André Luís Milaré de Medeiros 6 No Evento Keypress utilize. Shift As Integer) CtrlDown = (Shift And vbCtrlMask) > 0 If KeyCode = vbKeyF And CtrlDown Then 'Identifica a Tecla Ctrl+F Mensagem = "Entre com o Texto a ser procurado!" Titulo = "Procura" Default = "" Find_String = InputBox(Mensagem.Text. vbInformation Exit Sub End If If Shift = 1 Then If First_Pos = 0 Or InStr(Mid(Text1. Titulo.1) To 1 Step -1 If Mid(Text1. First_Pos). Find_String) = 0 Then First_Pos = Len(Text1.Text) End If For i% = (First_Pos .br 10 .

Loop. por exemplo. declare en General uma variável do tipo Booleana.text) Simples e eficaz. Text1. For. Logo quando começar o Loop. quando estiver utilizando loops como Do. faça o seguinte: Do DoEvents if Para = true then exit sub No Botão Cancelar. Find_String) End If Pos_Fim% = Len(Find_String) + Pos% Last_Pos = Pos_Fim% Text1. Isso é muito útil. TEXT1.Text. Copyright (c) 1996-2001 Visual Basic Brasil 13 .. funciona sempre! . procure sempre utilizar uma ProgressBar ou coisa assim p/ interar o usuário. o loop sempre voltará a atenção p/ o sistema.com..SelLength = Pos_Fim% . Find_String) First_Pos = Pos% If Pos% = 0 Then Last_Pos = 1 Pos% = InStr(Last_Pos.SelStart = Pos% .1 Text1. Len(Find_String)) = Find_String Then Pos_Fim% = Len(Find_String) + i% Exit For End If DoEvents Next Last_Pos = Pos_Fim% First_Pos = Pos% Text1. cr iar um Botão Cancelar com a funçao DoEvents. quando o usuário clicar em cancelar ele muda o valor do Booleano. e vc pode utilizar DoEvents p/ várias outras coisas no intuito de não travar seu Micro.SelLength = Pos_Fim% .. só atribua um valor true p/ a variável: Para = True É muito simples.br 7 If Mid(Text1.Next. É simples..Pos% Else Pos% = InStr(Last_Pos.sellenght = len(text1.Text. a seguinte rotina: text1. Text1.1 Text1.Text.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.SelStart = Pos% . que retorna a atenção p/ o Sistema. i%.Pos% End If End If End Sub 12 . Na Rotina onde irá utilizar o Loop.DoEvents Enviado por: Fabio Quando for trabalhar com processamentos longos. Você pode também. comece atribuindo um valor False p/ a variável : Para = false.williamdsilva@aol.selstart = 0 text1.

e fazer várias outras coisas.Ajustando os controles dentro do Formulário Enviado por: Fabio 8 Como já dito em uma dica enviada por não sei quem.width .williamdsilva@aol.600 frame1. veja o tamanho e altura(Width e Height) do Form e do controle que vai utilizar. Veja a diferença entre eles.Show .com. etc. e qdo alterar o tamanho também. assim não se precisa declarar mais uma variável: If MsgBox("Tem certeza que deseja sair do programa?". "Atenção") = vbYes Then End Else Cancel = True End If 16 . NomedoMid .height = form1.Confirmando saida do programa II Enviado por: Rodrigo Meirelles de Mello Modificando a dica existente. vamos supor que seja 600. atualize a proporção: frame1.bmp" fácil ?????!!!!!! Espero que sirva pra alguem falou galera ! 17 .600 Qdo vc maximizar a tela o controle se ajustará.picture=loadpicture("c:\Windows\carros.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. fazer com que o tamanho de seus controle fique proporcional ao tamanho do Formulário.width = form1. _ vbYesNo + vbExclamation. Nesse evento vc também pode escrever os procedimentos p/ centralizar os controles como mandou um colega aí. gif. Você pode também. "C:\windows\teste.height . É fácil. É assim SavePicture image1. No evento Form_Resize(que ocorre qdo o tamanho da form é alterado).bmp") Mas você também pode gravar uma imagem que está em uma caixa de imagem e converte -lo para bmp.br 14 . podemos centralizar os controles no Form usando os procedimentos já citados. 15 .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.

Arrendondar casas decimais Enviado por: Hantan Para arredondar casa decimais crie a seguinte função: Function Round(Nmr As Double.Fechar um Formulário Enviado por: Cleiton Oliveira da Silva 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.Colocar Titulos do programa VB para o Crystal Enviado por: Armando Estruc 9 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.5) / 10 ^ Casas End Function Para chamar a função utiliza-se: Dim Resultado as integer Resultado = Round([VALOR]. 21 .Aplicação já iniciada Enviado por: Hantan Para você verificar se sua aplicação já está sendo executada coloque o sequinte código no inicio do form.williamdsilva@aol. na formula colocar o nome e depois a formula que seria assim: "*" Depois Acept No Vb colocar o comando: NomedoRPT.Formulas(0)=" NomedaFormula=" & NomedaVariavelTitulo Para cada coisa que deseja mandar para o crystal deve ter um array diferente.com. 19 .PrevInstance Then End Espero que seja útil. [NUMERO DE CASAS]) . Casas As Integer) As Double Round = Int((Nmr * 10 ^ Casas) + 0. If App.br 18 . 20 .

-2.Reconhecendo o pressionamento de teclas . sempre visível faça o seguinte: Declare o seguinte em um módulo .. ByVal hWndInsertAfter As Long.BAS: Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long.Text = Resultado Espero ter ajudado. 22 . 23 . 0. 0. 0.br 10 Text1.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. Abraços. boa tarde e boa noite nos respectivos horários.VB que fala: Bom dia. 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]. mas pode se usar apenas textos. eu usei imagens. 0.Formulário OnTop Enviado por: Hantan Para manter um formulário OnTop ou seja. 'Os valores estão no HELP do VB em "Keycode Constants" 'Ex. ByVal cy As Long. Enviado por: Márcio Britto® Neste exemplo. ByVal cx As Long. 24 .com.hwnd.: If (KeyCode = VbKeyF2) then Beep 'Toca um Beep quando a teclar F2 for apertada. FLAGS Espero ter ajudado.. ByVal X As Long. ByVal Y As Long. .williamdsilva@aol.

BoaTarde.é onde eu informo o sexo. . SEXO Nao citarei como se deve declarar variaveis visto que ja fiz isso em uma dica anterior.mdb (2) Campo Sexo (3) TXTProcuraSexo . BomDia. ENDERECO.Visible = False ElseIf Agora > BoaTarde Then Pic_Noite. BoaNoite As Variant..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 campos NOME. --> Set DYNagenda = DBagenda.Visible = True Pic_Dia..com.Visible = False Pic_Dia. Nome As String Agora = Time$ BomDia = "00:00:00" BoaTarde = "12:00:00" BoaNoite = "19:00:00" If Agora > BoaNoite Then Pic_Noite...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.Visible = False ElseIf Agora > BomDia Then Pic_Noite.Visible = False Pic_Dia.Visible = False Pic_Tarde.br 11 Dim Agora. Tendo tudo declarado.williamdsilva@aol...Visible = True Pic_Tarde.Visible = False Pic_Tarde. TELEFONE.. Definido anteriormente que o campo sexo recebe "M" ou "H" Desejo selecionar dentre todo o banco de dados os registros das pessoas do sexo feminino "M" e que moram n o humaita.

Outro método de pesquisa absurdamente mais rapido que o Find. em SQL por exemplo Onde em uma proxima dica colocarei uma sintaxe de selecao em SQL. percebi que as pessoas gostam de declarar variaveis sem necessidade.DJOP Analisando uma dica previamente mandada. .. informarei como se encherga o valor de um campo TXT por exemplo na sintaxe dentro do Find.. 27 .DJOP Nesta dica. Enviado por: Rodrigo Meirelles de Mello . Espero ter ajudado.com.OpenTable("agenda") ' Abri a tabela agenda do banco de dados Set DYNagenda = DBagenda..mdb") ' Define o arquivo de banco de dados Set DYNagenda = DBagenda.... DYNagenda... Usando o Find.... tipo: if DYNagenda.CreateDynaset("agenda") ------Para se procurar por exemplo uma pessoa que more em botafogo Posso usar a seguinte sintaxe..Metodos de procura. é o Seek mas o Find se encaixa perfeitamente para Banco de dados pequenos.NoMatch then msgbox "Nao encontrei nenhuma pessoa que more em" & TXTbairro.. boa tarde e boa noite nos respectivos horário s..williamdsilva@aol. "Agenda eletrônica" Pode-se tb usar o FindFirst. Exemplo: E em um Módulo declara-se as variaveis.. . em seguida coloque uma rotinhazinha de verificacao.findfirst "bairro = ' " + TXTbairro + " ' " Desta forma estou procurando no campo bairro o valor do campo TXTbairro se eu nao fizesse esta sintade ( ' " + ??? + " ' ) e coloca -se somente "bairro = TXTbairro" o programa iria procurar a frase TXTbairro.é onde eu informo o Humaita Espero ter ajudado.Load Set DBagenda = OpenDatabase("c:\agenda\arquivo. Global DBagenda as Database Global DYNagenda as Dynaset ------..VB que fala: Bom dia.. FindNext.br 12 (4) Campo bairro (5) TXTprocurabairro . que É muito mais rapido do que o Find.. Qualquer duvida escreva-me. 2 Enviado por: Rodrigo Meirelles de Mello ..No form. qquer duvida mail-me. OBS. FindPrevious e FindLast ----Esta Sintaxe pode ser usada em varias outras formulas.: O findFist procura o primeiro nome da lista. 26 ..

.Colocar um "Continua. Uriel 29 .com..CurrentX = 0 'coluna Printer. 28 .Visible = True Pic_Dia.Visible = False Pic_Dia.Usando o objeto printer para imprimir formulários...williamdsilva@aol.ScaleMode = 4 Printer.Visible = False Pic_Tarde. com excessão da última...CurrentY = 0 'linha Printer.Visible = False Pic_Dia.Visible = False Pic_Tarde.CurrentX = 7 'coluna Printer." []'s." em relatórios do Crystal Reports Enviado por: Uriel Papa Para quem deseja colocar a expressão "Continua.Visible = True End If Deste modo nao se declara variaveis. aqui vai a dica: Escolha um campo da linha de detalhes que nunca receba valores nulos (Campo_A).Visible = True Pic_Tarde. Enviado por: Cecil Weiss Coloca o vb no modo de impressâo de caracteres Printer.CurrentY = 0 'linha .. Insira a seguinte fórmula no bottom da página: If NextIsNull({Campo_A}) then "" Else "Continua." no final de cada página do relatório.Visible = False ElseIf time$ > 12:00:00 Then Pic_Noite..br 13 If time$ > "19:00:00" Then Pic_Noite.Visible = False ElseIf time$ > 00:00:00 Then Pic_Noite.Print "Nome=" Printer.

31 . twips. vbUser = 0: Indica que uma ou mais das propriedades ScaleHeight.com. 'Ponto (72 pontos por polegada lógica). etc. por iss o faça com que o usuário só possa digitar na caixa texto um numero de 1 a 12.RecordSource = "Select * from [Clientes]here [Nome] _ like '*" & Text1. 'Polegada. Enviado por: Cecil Weiss Use os seguintes comandos para selecionar uma parte de uma string. Enviado por: Cecil Weiss Se voce quiser pesquisar por nome ou sobrenome.Print "Nome=" Experimente estes códigos.williamdsilva@aol. 567 twips por centímetro lógico). 6: 7: 'Milímetro. 'Pixel (menor unidade de resolução de monitor ou impressora).RecordSource = "Select * from [Clientes] where month([Nasc]) = _ '" & Val(Text1.Mostrar somente seleção em um banco de dados.. VbTwips = 1: VbPoints = 2: VbPixels = 3: vbCharacters = 4: VbInches = 5: VbMillimeters = VbCentimeters = '(Padrão) Twip (1440 twips por polegada lógica.Text) & "'Order by [Nome]" Data1.br 14 Printer.Pesquisa por nome ou sobrenome.Refresh Use os seguintes comandos para selecionar um mês especifico em um campo data. 'Centímetro.Text & "*'Order by [Nome]" Data1.Text & "*'" Espero ter ajudado. ScaleWidth. voce pode imprimir usando medidas por caracteres.. 'Caractere (horizontal = 120 twips por unidade. usando "scalemode".Refresh Obs: A função "Month" retorna um valor de 1 a 12. ou em qualquer parte da string use o seguinte comando: Data1. ScaleLeft e ScaleTop estão configuradas como valores personalizados. veja abaixo a tabela. com isso voce filtra o banco de dados mostrando somente o desejado.Como controlar o MCIwndX e o MCC (para reproduzir arquivos multimídia) Enviado por: Leonardo Motta . 32 . vertical = 240 twips por unidade). Data1. pixels. Data1.FindFirst "NOME Like '*" & Text1. com isso voce filtra o banco de dados mostrando somente o desejado. 30 .Recordset.

.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 . Qualquer coisa veja em Constants no Text API Viewer 34 ..Command = "Close" Obs.) mciMedia.Command = "Stop" ' Fecha o arquivo (sempre use este comando quando for usar animações ou filmes. Animações/filmes/etc serão exibidos normalmente se o controle estiver oculto. 'Especifica as propriedades principais mciMedia.enabled = True/False Obs.: existem outros comandos para retornar. etc. (Ex. Back) Alguns eventos úteis: Done e NotifyCode são eventos que acontecem quando o objeto termina de reproduzir o arquivo.br 15 Você pode controlar um objeto MCIwndX ou MCC Control (Microsoft Multimedia Control. A variável "NotifyCode" especifica se o arquivo foi reproduzido com sucesso. As constantes referentes ao "NotifyCode" são mciNotify(CRL+ESPACO para listar).Command = "Pause" ' Para mciMedia.. voltar ao começo.BAS coloque o seguinte: Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long. ByVal lpCaption As String.Command = "Play" ' Pausa mciMedia. ByVal wType As Long) As Long . Vamos chamar o objeto de mciMedia.: a propriedade 'visible' refere-se somente ao controle.williamdsilva@aol. _ ByVal lpText As String. se foi interrompido pelo usuário ou por algum erro do objeto.: Prev.filename = mciMedia.visible = True/False mciMedia.BAS: Public Const MB_OK = &H0& e substitua em MB_OKCANCEL. ir ao final.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 . que já vem com o VB) sem precisar tocar na lista de propriedades. Os comandos dos objetos MCI: ' Abre o arquivo mciMedia. 33 .com.Command = "Open" ' Reproduz o arquivo mciMedia.

Reps%.Width / xTwips Print "A Resolução é : " & Str$(xPixels) & " por " & Str$(YPixels) & " pixels" A saida vai ser alguma coisa assim: A Resolução é : 800 por 600 pixels Espero ter sido útil.text text1. Dim xTwips%.williamdsilva@aol.Resolução da tela Enviado por: Hantan Este exemplo mostra como saber qual é a resolução da tela sem ter que fazer com API. "Sou uma MsgBox não modal.br 16 Const MB_OKCANCEL = &H1 Para chamar a função faça: Dim ret% ret = MessageBox(0. HColor$ . Algum problema com programação em VB me contacte.TwipsPerPixelX yTwips = Screen.".com. Vermval&.Fundo degradê Enviado por: Hantan Para deixar um fundo degrade faça o seguinte: Crie o seguinte em um módulo . FillBottom%. 35 . yTwips%. FillLeft%. TopToBottom As Boolean) On Error Resume Next Dim Step%. MB_OKCANCEL) Até mais. "Modeless MessageBox ". 36 .Transformar qualquer valor na moeda corrente Enviado por: Robson Batista Dim dado as string dado = text1. YPixels# xTwips = Screen.BAS: Sub Fundo(Frm As Object. Azulval&.text = format(dado.Height / yTwips xPixels = Screen. FillRight%. Verdval&.TwipsPerPixelY YPixels = Screen. xPixels#. FillTop%."CURRENCY") 37 .

ByVal lpFileName As String) As Integer Crie a seguinte função no mesmo módulo .Height . Verdval. RGB(Vermval. Azulval).4 Verdval = Verdval .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 . BF Vermval = Vermval . ByVal lpKeyName _ As String. _ ByVal lpKeyName As String. ByVal nSize As Long.BAS: .Line (FillLeft.Step FillLeft = 0 FillRight = Frm.Ler e escrever arquivos INI Enviado por: Hantan Para ler arquivos INI faça o seguinte: Em um módulo . 39 . ByVal lpDefault As String.Height / 63) If TopToBottom = True Then FillTop = 0 Else FillTop = Frm.Step FillBottom = FillTop + Step Next End Sub A variável chamada TopToBottom é se vai do preto para a cor escolhida ou da cor escolhida para o preto. ByVal lpKeyName _ As String. ByVal nSize As Integer) As Integer Declare Function WritePrivateProfileString Lib "Kernel32" Alias _ "WritePrivateProfileStringA" (ByVal lpAppName As String. FillBottom). ByVal lpReturnedString As _ String. ByVal lpFileName _ As String) As Long Declare Function GetProfileString Lib "Kernel32" Alias _ "GetProfileStringA" (ByVal lpAppName As String. ByVal lpDefault As String.BAS coloque: Declare Function GetPrivateProfileString Lib "Kernel32" Alias _ "GetPrivateProfileStringA" (ByVal lpApplicationName As String. FillTop)-(FillRight. ByVal lpDefault As String.br 17 Step = (Frm.4 Azulval = Azulval .Width FillBottom = FillTop + Step For Reps = 1 To 63 Frm.williamdsilva@aol.com. ByVal _ lpReturnedString As String.

arq) If worked = 0 Then GetIni = "" Else GetIni = Left(Val. "ARQUIVO.INI") WrtArqIni "EntreColchetes".williamdsilva@aol. "AntesDoIgual". Len(Val). "ARQUIVO. key.INI" 40 . 0) valor = WritePrivateProfileString(section. dado.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) . key. key. "AntesDoIgual". dado. "". arq) End Sub Para chamar as funções faça o seguinte: Text1. key.com. "ValorPosIgual". 0) valor = GetPrivateProfileString(section.BAS crie a seguinte função para escrever no arquivo INI: Sub WriteIni(section. 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. 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.br 18 Function GetIni(section. Val.Text = GetIni("EntreColchetes". valor) End If End Function No mesmo módulo .

E:.1) sDir = Mid$(sDir. InStr (2.) Dim sBuild As String While Instr(2.br 19 Dim X X = Shell("C:\Windows\rundll32..MoveNext End If 42 . aperfeiçoada por mim. 1) DoEvents End Sub Na variável Conexão é o nome da conexão que se quer abrir. 16) = "" Then MkDir sDrive & sBuild Wend End Sub Call LongDir ("C:".exe rnaui. sDir.williamdsilva@aol.. "\") If Dir$(sDrive & Sbuild.dll. "\") > 1 sBuild = sBuild & Left(sDir.) .Delete NomedoControleData.RnaDial " & Conexão.. Instr(2. sDir.) 'sDir = Nível de diretório(Dir1\...com. "Exclusao") If resp = vbYes Then NomedoControleData.. sDir as String) 'sDrive = Nome do Drive(C:. sDir.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?".Recordset. "Dir1 \Dir2\Nome Longo \Etc") (Por Jeffrey Renton. "\") ..Recordset.. vbYesNo. 41 . D:.) esta rotina faz isso: Sub LongDir(sDrive as String..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.

br 20 43 . 1) = "A" 'Substituindo o caracter End If Abraços a todos.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. 2."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.: If Dir$("X:\XXXX\XXXXX. VA_Posicao. Hantan 45 .com.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. 1) = "a" Then Mid(MinhaString.XXX") <> "" Then 'O arquivo existe Else 'O arquivo não existe End If 44 . 2. 1) If IsNumeric(VA_Caracter) Then .williamdsilva@aol.

VA_Posicao.br 21 VA_Resultado = VA_Resultado & VA_Caracter End If VA_Posicao = VA_Posicao + 1 Loop LimpaNumero = VA_Resultado 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. abraços. 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.com.Fechar todos os forms Enviado por: Hantan Para fechar todos os forms abertos crie a seguinte função: . 47 .williamdsilva@aol.

williamdsilva@aol. 49 . 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). existe um programa chamado Start.br 22 Public Function FecharForms() Dim f As Integer f = Forms. 255) Para saber o diretório System do Windows faça o seguinte: Dim X$ X = GetWindowsDirectory(Space$(255).0. mas este pode ser um recurso exclusivo do Internet Explorer 4. Basta vc digitar Shell "c:\windows\command\start http://www.Count Do While f > 0 Unload Forms(f-1) If f = Forms. não tenho certeza. OBS: O própio Shell sozinho não consegue abrir o site.Count Then Exit Do f=f -1 Loop End Function 48 . 255) & "\System" 50 .BAS: Private Declare Function GetWindowsDirectory Lib "Kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String. gostaria que alguém testasse isso em outro navegador e entrasse em contato comigo.Como abrir um site pelo navegador padrão (Mais fácil) Enviado por: Fabio Dentro de Windows\Command.Rotina de extenso com várias funções(Para iniciantes) Enviado por: Hantan .com/" Sem nenhuma declaração de API.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 .com.vbbrasil.

1) > 0 Then 'Determinando valor em extenso da função Extenso = Dezenas(Mid(Nmr.com. 2. Centenas = Grupos(1) End Function =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* Public Function Dezenas(Nmr2 As Integer) 'Determinando os valores das centenas em extenso. 1)): Exit Function ElseIf Mid(Nmr.etc.300.Mid.200.) For i = 1 To 9 If Nmr = i & "00" Then Extenso = Centena(i): Exit Function Next i 'Verificando se o número está entre 1 e 19 If Nmr > 0 And Nmr < 20 Then 'Determinando valor em extenso da função Extenso = Unitarios(Nmr): Exit Function ElseIf Nmr > 19 And Nmr < 100 Then If Mid(Nmr. 1) = 0 Then 'Determinando valor em extenso da função . 1.For e outros) para quem é iniciante em VB conseguir entender. For i = 1 To 9 If Nmr3 = i Then Grupos(1) = Centena(i) Next i 'Determinando valor em extenso da função. etc. 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. Abaixo vai as funções todas detalhadamente comentadas: (É só copiar e colar dentro de um módulo . For i = 2 To 9 If Nmr2 = i Then Grupos(1) = Dezena(i) Next i 'Determinando valor em extenso da função. Centena(1) = "Cento": Centena(2) = "Duzentos": Centena(3) = "Trezentos": Centena(4) _ = "Quatrocentos": Centena(5) = "Qu inhentos": Centena(6) = "Seicentos": Centena(7) _ = "Setecentos": Centena(8) = "Oitocentos": Centena(9) = "Novecentos" 'Verificando que número é. 2.williamdsilva@aol. por conter grande número de comandos *** Decidi criar uma rotina de extenso mas uma bem simples apenas com comandos básicos(If. _ 2.BAS ou no General do Form) 'Determinado para que o VB avise qualquer variável não declarada Option Explicit 'Declarando variáveis Dim Unidades(19) As String Dim Dezena(9) As String Dim Centena(9) As String Dim Milhares(9) As String Dim Valor(99) As Integer Dim Grupos(99) As String Dim i As Integer Dim Temp As Boolean =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* Public Function Centenas(Nmr3 As Integer) 'Determinando os valores das centenas em extenso. Dezenas = Grupos(1) End Function =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* Public Function Extenso(Nmr As Integer) On Error Resume Next 'Verificando se o número está entre o suportado If IsNull(Nmr) Or Nmr > 9999 Then Extenso = "Valor não suportado!!!": Exit Fu nction 'Verificando se o número está entre 1000 e 19999 If Nmr > 999 And Nmr < 20000 Then Extenso = Mil(Nmr): Exit Function 'Verificando se é centena inteira(100. 1)) & " e " & Unitarios(Mid(Nmr.). 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 é. Lembrando que esta função é BETA mais funcio na perfeitamente com valores até 9999.br 23 *** ATENÇÃO esta rotina é recomendada para programas simples(Impresão de cheques.

1. >= 1 ElseIf Mid(Nmr. etc.. >=1 ElseIf Valor(2) > 0 Then 'Verificando se a terceira casa é igual a 0 . 1)): Exit Function End If End If 'Verificando se o número está entre 100 e 999 If Nmr > 99 And Nmr < 1000 Then If Mid(Nmr. 3. 1. 1)) & " e " & Dezena(Mid(Nmr. >= 1 ElseIf Valor(4) > 0 Then 'Determinando valor da função em extenso Mil = Grupos(1) & " Mil e " & Unidades(Valor(4)): Exit Function End If 'Verificando se a terceira casa está entre 2 e 9 ElseIf Valor(3) > 1 And Valor(3) > 10 Then 'Verificando se é valor inteiro ou quebrado.com. ou seja.williamdsilva@aol. 1) = 1 Then 'Determinando valor em extenso da função Extenso = Centenas(Mid(Nmr. " & Dezenas(Valor(3)): Exit Function 'Verificando se a variável de valor inteiro não é verdadeira If Not Temp Then Mil = Grupos(1) & " Mil e " & Dezenas(Valor(3)) & " _ e " & Unidades(Valor(4)): Exit Function 'Verificando se a terceira casa é 1 ElseIf Valor(3) = 1 Then 'Determinando valor da função em extenso Mil = Grupos(1) & " Mil e " & Unidades(Valor(3) & Valor(4)): Exit Function End If 'Verificando se a segunda casa é maior que 0. For i = 2 To 9 If Valor(3) & Valor(4) = i & 0 Then Temp = True Next i 'Verificando se a variável de valor inteiro é verdadeira If Temp Then Mil = Grupos(1) & " Mil. 1)): Exit Function 'Verificando se a terceira casa é maior que 0. 3. 1.br 24 Extenso = Dezenas(Mid(Nmr. 2)): Exit Function 'Verificando se a segunda casa é maior que 1. 1)) & " e " & Unitarios(Mid(Nmr. 1) = 0 Then 'Determinando valor em extenso da função Extenso = Centenas(Mid(Nmr. 2. 2. 1) > 0 Then 'Determinando valor em extenso da função Extenso = Centenas(Mid(Nmr.24. 2. 1)): Exit Function End If End If End If End Function =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* Public Function Mil(Nmr4 As Integer) 'Verifica se o número está entre 1000 e 10000 If Nmr4 > 999 And Nmr4 < 10000 Then 'Determinando os números Valor(1) = Mid(Nmr4. 3. 1) > 1 Then 'Verificando se a terceira casa é igual a 0 If Mid(Nmr. For i = 1 To 9 If Valor(1) = i Then Grupos(1) = Unidades(i) Next i 'Verifica se a segunda casa é 0 If Valor(2) = 0 Then 'Verificando se a terceira casa é 0 If Valor(3) = 0 Then 'Verificando se a quarta casa é 0 If Valor(4) = 0 Then 'Determinando valor da função em extenso Mil = Grupos(1) & " Mil" 'Verificando se a quarta casa é maior que 0. 1) 'Verificando se é 2 mil. 1. _ 'ou seja. ou seja >= 2 ElseIf Mid(Nmr. 1): Valor(2) = Mid(Nmr4. _ 2. 1)) & " e " & Dezena(Mid(Nmr. 1. 3 mil.. _ 3. 2. _ 2. 1) = 0 Or Mid(Nmr. _ 1)) & " e " & Unitarios(Mid(Nmr. 2. _ 'ou seja. 4.23. 1): Valor(4) = Mid(Nmr4. ou seja. 20 ou 21.22. 1): Valor(3) = Mid(Nmr4.

24. _ '20 ou 21. 51 .Em Project .Na Form Load declare: .br 25 If Valor(3) = 0 Then 'Verificando se a quarta casa é 0 If Valor(4) = 0 Then 'Determinando valor da função em extenso Mil = Grupos(1) & " Mil" ElseIf Valor(4) > 0 Then 'Determinando valor da função em extenso Mil = Grupos(1) & " Mil e " & Centenas(Valor(2)) & Unidades(Valor(4)): _ Exit Function End If 'Verificando se a terceira casa está entre 2 e 9 ElseIf Valor(3) < 1 And Valor(3) < 10 Then 'Verificando se é valor inteiro ou quebrado. For i = 2 To 9 If Valor(3) & Valor(4) = i & 0 Then Temp = True Next i 'Verificando se a variável de valor inteiro é verdadeira If Temp Then Mil = Grupos(1) & " Mil. O true DbGrid é um controle perfeito. " & Centenas(Valor(2)) & " e " & _ Dezenas(Valor(3)) & " e " & Unidades(Valor(4)): Exit Function ElseIf Valor(3) = 1 Then 'Determinando valor da função em extenso Mil = Grupos(1) & " Mil. " & Centenas(Valor(2)) & Dezenas(Valor(3)): _ Exit Function 'Verificando se a variável de valor inteiro não é verdadeira If Not Temp Then Mil = Grupos(1) & " Mil. própria dele. Siga os passos: 1 . For i = 1 To 19 If Nmr1 = i Then Grupos(1) = Unidades(i) Next i 'Determinando valor em extenso da função. " & Centenas(Valor(2)) & " e " & Unidades(Valor(3) _ & Valor(4)): Exit Function End If End If End If End Function =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* Public Function Unitarios(Nmr1 As Integer) 'Determinando os valores das centenas em extenso. onde os dados ficarão temporariamente na memória. as vezes achamos que outros são melhores ou mais fáceis de se lidar. mas ele é completo.References(VB5).Como ligar o True DbGrid a um Array Enviado por: Fabio C. 4 .williamdsilva@aol. Hantan Ps.. querer ligá-lo a um array. Se vc não entender esta função. Você pode por exemplo.22. 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) = _ "Dezesseis": Unidades(17) = "Dezessete": Unidades(18) = "Dezoito": Unidades(19) = "Dezenove" 'Verificando que número é. adicione a biblioteca "APEX xarray object". 3 .com.23.Insira um true DbGrid em seu Formulário 2 . Unitarios = Grupos(1) End Function Abraços..Altere a propriedade DataMode dele p/ 4 .Storage. mande um e-mail. ou seja.

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. 53 . e receba um valor qualquer. será definido pelo evento UnboundColumnFetch. Value As Variant) Value = TDBGrid1.settext "Teste" Settext adiciona um novo texto p/ a área de transferência.com.CellValue(Bookmark) + _ TDBGrid1.OddRowStyle. . depois o redimensiona considerando que r1 e r2 é o número de linha (Rows) e c1 e c2 é o número de colunas. P/ isso.Array = vetor Onde vc cria um novo objeto XArray.Columns(1). e deixar a propriedade DataField vazia. vejam: Clipboard.EvenRowStyle. Então funciona assim. assim ele reconhecerá esta coluna como Unbound.CellValue(Bookmark) End Sub Onde esta propriedade CellValue(bookmark) é o valor das colunas que estão no mesmo registro que esta coluna de Total. O valor desta coluna do Total.Columns(0). P/ cada linha(ou registro). r2. ele passará por este evento p/ pegar o valor desta coluna. c2 Set TDBGrid1. Depois vc seta a propriedade Array do TrueDbGrid a este objeto.BackColor = QBColor(14) TDBGrid1. vc tem que definir um caption.BackColor = QBColor(6) TDBGrid1. e Value é o valor desta Coluna. Nesta coluna do Total.clear Clipboard.Acesso à área de Transferência Enviado por: Fabio O Objeto Clipboard é uma referência à Área de transferência.Como definir um TrueDbGrid com 2 cores Enviado por: Fabio Defina na Form Load: TDBGrid1.gettext Retorna o conteúdo da área de transferência: Clipboard. os dados do Data ou do RDC são puxadas p/ cada coluna. 52 . no entanto p/ funcionar á necessário limpá -la primeiro usando o clear. a propriedade DataMode do TrueDbgrid tem que estar como 0 . como a soma de todas as colunas.ReDim r1.br 26 Dim vetor As New XArray vetor.Unbound. c1.williamdsilva@aol. Vc poderia: Private Sub TDBGrid1_UnboundColumnFetch(Bookmark As Variant. ByVal _ Col As Integer.AlternatingRowStyle = True 54 .

Execute "insert into func values ('Nome_func'.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: . que qdo vc digitasse PRG executasse o programa. e na Sub_Main deste coloque: if command$ = "/?" then frmAjuda. Menu Project .show end if Não se esqueçam de colocar a sub main p/ ser a primeira coisa a ser executada.path & "\banco.Properties. e PRG /? executasse a ajuda do programa.com.mdb") 'onde banco é o banco de dados Selecionando registros: Set DyRec = DBanco.br 27 55 . vc pode criar um módulo. Por exemplo. 56 . É simples.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. vc poderia criar um programa chamado PRG.Parametros -> Função Command Enviado por: Fabio Quem quer estabelecer parametros ao programa é só usar a função Command.Identidade.show elseif command$ = "" then meuprograma.Createdynaset("select * from func") 'onde func é uma tabela do banco.williamdsilva@aol.'Endereco') 'onde Nome_func.mdb 'seleciona todos registros de func Inserindo registros: Banco.Identidade.

Acesso ao Oracle via Oracle Objects Enviado por: Guilherme João França Soares Declarar as variáveis: Global Banco Global Secao Criar o objeto: Set Secao = CreateObject("OracleInProcServer. Casa 1' where Identidade = "0000000000" 57 .dll -Oraclbjd. Chr(0)) .XOraSession") As Object As Object Abrir o Banco de Dados: Set Banco = Secao.Usando a api GetUserName Enviado por: Guilherme João França Soares Declare Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String.1) . 0&) É necessário ter na máquina os arquivos do Oracle Obejects: -Oraclb45.Execute "delete from func where Nome_func like 'G*') 'exclui todas as linhas onde Nome_func começa com 'G' Atualizando registros: Banco. 58 .com. Qd.dll -Oraclbj. InStr(m$.dll -Oraclmd.reg (rodar o reg) Que se encontram nos discos de instalação do Oracle Objects.Execute "update func set Nome_func = 'Guilherme'.dll -Oraipsrv.OpenDatabase(Servidor.williamdsilva@aol. nSize As Long) As Long m$ = Space$(255) i% = GetUserNameA(m$. Endereco = 'Rua 1.dll -Oraclb4d. 1.br 28 Banco.dll -Oraclm. Usuario/Senha. Len(m$)) TxtLogin = Left(m$.

Picture = ImageList1.Picture = ImageList1.Picture Then Set Picture1.Picture Then Set Picture1.Custom Na Propriedade Form_Load() coloque: Set Form1.ListImages(2). 60 .Animações Enviado por: Henrique Angelo Crie um novo projeto.ListImages(1).ListImages(2). coloque as figuras da animação nesta mesma Imagelist.MouseIcon = ImageList1.MouseIcon = ImageList1. Coloque também um Timer.Picture Exit Sub End If If Picture1.Cursores Animados em VB Enviado por: Henrique Angelo Crie um novo projeto. Na Propriedade Form_Load() coloque: Set Picture1.ListImages(1).ListImages(1).ListImages(1).MouseIcon = ImageList1.Picture Exit Sub End If No Timer1. coloque no Form uma ImageList.MouseIcon = ImageList1. coloque no Form uma ImageList.Picture Then Set Form1.br 29 59 .ListImages(2).com.ListImages(1).Picture = ImageList1.Picture Exit Sub End If If Form1. Coloque na propriedade do Form: MousePointer = 99 . coloque um intervalo de 100.Picture = ImageList1. coloque os ícones e/ou cursores que farão parte da animação nesta mesma Imagelist.Picture Then .williamdsilva@aol.Picture Na propriedade Timer1_Timer() coloque: If Form1.Picture Na propriedade Timer1_Timer() coloque: If Picture1.ListImages(2). Coloque uma PictureBox e um Timer.Picture = ImageList1.

campo3) _ select campo1.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.Path & "\" ELSE MeuDiretorio=App.ListImages(1). campo2.com.Path)>3 THEN MeuDiretorio=App. Média. campo3 _ from tabela1 _ . 61 .br 30 Set Form1. coloque um intervalo de 100. IIF(Média>=5. campo2. escrever aprovado.Path 'Se estiver na raiz END IF 62 . SELECT Nome. Ex: Se a média do aluno for maior ou igual a 5."Aprovado". pode -se utilizar o comando IIF(condição.valor2 se falso )."Reprovado") AS Status FROM Alunos 63 .williamdsilva@aol.Descobrir Path do Aplicativo Enviado por: Mauro Sakamoto Para descobrir o Path do aplicativo utilize a função App. senão reprovado.Path Ex: Dim MeuDiretorio IF Len(App.se valor1 se verdade .MouseIcon = ImageList1.Picture Exit Sub End If No Timer1.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.

no momento de uma operação com o Banco de Dados (Inserção.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. CommitTrans e Rollback Enviado por: Mauro Sakamoto Um problema bastante comum é o micro ser desligado acidentalmente ou a energia acabar.exclusão ou atualização) WorkSpaces(0). Atualização ou Exclusão).com.williamdsilva@aol. Ex: Sub CmdInserir_Click() On error goto Err_CmdInserir_Click WorkSpaces(0).br 31 where campo1>valor1 _ union _ select campo1. Sub CmbNome_DropDown() Dim MyDB As Database Dim MyNome As SnapShot MySQL$ = "Select Nome from Clientes Where Nome like " Chr(39) & CmbNome. campo2. Caso você não queira armazenar o valor comece no primeiro SELECT (descartando o INSERT) 64 . campo3 _ from tabela2 _ where campoS1>valor2 E assim sucessivamente.CommitTrans Exit_CmdInserir_Click: Exit Sub Err_CmdInserir_Click: MsgBox Error% WorkSpaces(0).Text & Chr(42) & Chr(39) 'seleciona os .Como usar BeginTrans.Rollback Resume Exit_CmdInserir_Click End Sub 65 .BeginTrans ' executa comandos de (inserçã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).

MoveLast Total&=MyNome.MoveNext End If Next i& End if End sub 66 . Além do Help_Context e Help_Index existem outros parâmetros que podem ser passados.hlp" Const Help_Index = &H3 Const Help_Context = &H1 Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long.abre o aquivo no tópico escolhido).Clear 'limpa o conteúdo do combo If Not MyNome.First For i&=1 to Total 'atualiza o combo If Not Isnull(MyNome("Nome")) then CmbNome. ByVal lpHelpFile As String. O segundo é o nome de seu arquivo hlp.bas) e declare as seguintes constantes e funções: Const Help_File = "File. Porém os mais comuns são esses dois.RecordCount 'pega o total de nomes MyNome.br 32 nomes Set MyDB=OpenDataBase("Table.Text = "" 'limpa o texto no combo CmbNome.CreateSnapShot(MySQL$) 'Cria um snapshot CmbNome.williamdsilva@aol. ByVal wCommand As Long. 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 .RecordCount>0 then 'verifica se existe nomes MyNome. ByVal dwData As Long) As Long Em seguida vá até o controle em que você deseja chamar o help e digite: WinHelp hwnd.NoMatch And MyNome.mdb") 'Abre o BD Set MyNome=MyDB. Para isso vá crie um modulo (. Help_Context. .Como chamar um arquivo de HELP para sua aplicação Enviado por: Mauro Sakamoto Supondo que você já tenha um arquivo de help para sua aplicação. você pode chamá -lo utilizando a função API WinHelp. 20 O Primeiro valor hwnd . Help_File.AddItem(MyNome("Nome")) CmbNome. se refere ao Handle da Janela e deve ser passado como hwnd mesmo. O terceiro parâmetro pode ser utilizado ou para abrir o Help_Index (help padrão do windows.com. independente do valor em Help_File) ou Help_Context (que abrirá o arquivo especificado em Help_File).

williamdsilva@aol.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). Insira uma picture em cima do seu SSPanel mudando a propriedade apparence para 0-flat e BorderStyle para 0-None. dando um efeito tipo Internet Explorer 4. Para reproduzir o avi faça: MMControl1. No evento MouseMove do seu SSPanel e de seu Picture faça: Sub Picture_MouseMove(Button As Integer.Command = "open" MMControl1.BevelWidth=0 End Sub Dessa forma quando o mouse for posicionado em cima do "botão". Shift As Integer. É possível também trocar a picture. Y As Single) SSPanel. Y As Single) SSPanel.Command = "play" .com. ficará chapado.hWnd MMControl1.BevelWidth=1 End Sub Sub SSPanel_MouseMove(Button As Integer. X As Single. é conveniente antes de mais nada declarar um picture box onde ele será executado.BevelWidth=1 End Sub Agora no evento MouseMove do Formulário faça o inverso Sub Form_MouseMove(Button As Integer.Command = "close" MMControl1.br 33 67 .filename = "File. X As Single. Em seguida defina a propriedade BevelWidth=0 e retire o caption.avi" MMControl1. 68 . Shift As Integer.DeviceType = "avivideo" MMControl1. Shift As Integer. Y As Sing le) SSPanel. este automaticamente ficará em 3D e quando for movido para fora. X As Single.Reproduzir um vídeo com MMControl Enviado por: Mauro Sakamoto Para reproduzir um vídeo em um formulário. Em seguida insira um MMControl.Command = "prev" MMControl1.hWndDisplay = Picture1.

DeviceType = "Sequencer" MMControl1. Posição1) + ".Command = "play 70 . 1. você precisa utilizar o MMControl.Command = "prev" MMControl1." + Mid(NúmeroTexto.filename = "File. SpcPos1.Command = "open" MMControl1.Command = "prev" MMControl1.Reproduzir um arquivo wav ou mid Enviado por: Mauro Sakamoto Para reporduzir um arquivo de som com do tipo wa ou mid.Command = "close" MMControl1.williamdsilva@aol.wav" MMControl1.filename = "File.Command = "open" MMControl1.Command = "close" MMControl1. NúmeroTexto.1 posição2 = Posição1 + 2 ' Encontra próximo espaço.wav" MMControl1.Trocar vírgula por ponto em um valor digitado Enviado por: Mauro Sakamoto Function trocavírgulaporponto(NúmeroTexto) Dim Posição. Ex: MMControl1. SpcPos2 ' Declaração de variáveis Tamanho = Len(Trim(NúmeroTexto)) Posição1 = InStr(1. TstStr.com. Tamanho Dim MidWord. posição 2) Else trocavírgulaporponto = NúmeroTexto . ".DeviceType = "WaveAudio" MMControl1. Msg.Command = "play" Se for um arquivo do tipo mid mude a propriedade DeviceType para "sequencer" Ex: MMControl1.") 'Acha a vírgula If Posição1 <> 0 Then Posição1 = Posição1 . trocavírgulaporponto = Mid(NúmeroTexto.br 34 69 .

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.. segunda chamada ao mesmo programa. tem o mesmo efeito e é mais trabalhoso. Isto também pode ser feito por APIs (FindWindow..Title App. ao invés de abrir uma segunda sessão do programa. da bilblioteca User). . em geral. ShowWindow e SetFocus. Dim SaveTitle as string If App. o File Manager e o Excel) ou segurança (como aplicações que usam banco de dados). segunda chamada ao mesmo programa.. Assim.PrevInstance Then SaveTitle = App. True End End If O código acima deve ser a primeira coisa a ser executada na sua aplicação. o Windows irá alternar para a sessão já aberta. É o caso do Bloco de Notas. podem ser executadas repetidas vezes ao mesmo tempo no mesmo computador. da Calculadora e de outros.Title = ".williamdsilva@aol. Existem programas cuja múltipla execução não é interessante. por questões de produtividade ao us uário (como o Word. obviamente. serei fechado" 'se for a Sub Main. a linha acima.com. Os sistemas comerciais (de banco de dados).. só podem ser executados em uma sessão ao mesmo tempo. não existe 'as linhas abaixo fecham a segunda chamada e alternam para 'a primeira AppActivate SaveTitle SendKeys "% R".Caption = ". do Paint. O controle disto no VB é feito através do objeto App." Me.br 35 End If End Function 71 . mas.

Qdias.Menu PopUp Enviado por: Felipe Maion Garcia Crie um menu normal com o caption de "Popup Menu" e o name "mnufile".Tag) = 4 And Qdias = 4 Or Qdias = 5 Then Qdias = Qdias + 1 If Val(turini.br 72 .Tag) = 5 And Qdias = 4 Or Qdias = 5 Then Qdias = Qdias + 1 If Val(turini.williamdsilva@aol. 1) .Como evitar o bug do ano 2000 Enviado por: Felipe Maion Garcia 36 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)) ' .Tag) = 5 And Qdias > 9 Then Qdias = Qdias + 2 If Val(turini.Tag) = 3 And Qdias < 5 Then Qdias = Qdias . desmarque a opção "Visible".ATENÇÃO: os dois submenus são visible true. 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 nam e "mnusub2". Shift As _ Integer.RnaDial " & Conexão.dll.1 'Quantidade de dias para a soma) turini. X As Single. "w") ' verifica o dia da semana do início do curso If Val(turini. Y As Single) If Button = 2 Then PopupMenu mnufile 'Mostra o menu popup _ 'se o botão direito for clicado End Sub 74 . agora crie o código para que quando o usuario clicar no formulario aparecer o popup: Private Sub Form_MouseDown(Button As Integer.Conexão Dial-Up Enviado por: Felipe Maion Garcia Private Sub AbrirDialUp(Conexão as String) Dim X X = Shell("C:\Windows\rundll32.Tag) = 2 And Qdias > 9 Then Qdias = Qdias + 1 turter = DateAdd(Intervalo.Tag) = 4 And Qdias > 9 Then Qdias = Qdias + 3 If Val(turini. Pdata) 73 .com.1 If Val(turini.exe rnaui.Tag = Format(turini.Tag) = 3 And Qdias > 5 Then Qdias = Qdias + 3 If Val(turini.

williamdsilva@aol.com.br

37

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

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

williamdsilva@aol.com.br

38

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" 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 u m 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

williamdsilva@aol.com.br

39

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 propr iedade 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 con trole 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%) 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 Cl ipper. 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 feit o 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.

williamdsilva@aol.com.br

40

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 Function Sub 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 ? 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.

logo todo o formulário que tiver informações binárias.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. Você pode utilizar algumas propriedades do objeto Screen para calcular a resolução da tela. marque "Default Save As Format = Text"). No entanto. O VB lê estes arquivos enquanto os arquivos no formato ASCII são carregados. É uma linguagem não procedural. por exemplo ajustar o tamanho de alguns controles em run-time. em um arquivo binário. mas somente o ele que deve fazer. Na abordagem procedural teriamos os seguin tes passoa a seguir: 1.br 41 Quando o desenvolvedor escolhe o formato ASCII (Marcando a opção "Save as Text" na janela "Save File As".Width / xTwips Print "A Resolução é : " & Str$(xPixels) + " por " + Str$(YPixels) 83 . Posicionar o ponteiro no início da tabela 3.TwipsPerPixelY YPixels = Screen. Abrir a tabela 2.FRM. Uma instrução SQL consiste em três partes: y As declarações de parâmetros y A instrução manipulativa y As declarações de opções Para termos uma idéia do seu poder.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. separado do arquivo ASCII. Estes arquivos são armazenados no mesmo diretório que os arquivos .0): Dim xTwips%. yTwips%. alguns controles tem propriedades cuja informação é binária (Por exemplo: propriedade Picture de um PictureBox). Atualizar tabela 5.TwipsPerPixelX yTwips = Screen. ou no menu "Options".Height / yTwips xPixels = Screen. Seu objetivo é fornecer uma interface de alto nível ao usuário. o VB então grava os arquivos no formato ASCII. deverá ser acompanhado de um arquivo FRX correspondente 82 .williamdsilva@aol. Atualizar o campo valor em 10% 4. Movermos o ponteiro para o próximo registro 6. xPixels#. Veja o seguinte código (VB 3. O VB grava todas estas infor mações binárias do formulário. "Environment". Continuar a atualização do campo valor até o final da tabela O código poderia Ter o seguinte aspecto: Dim db as database . imagine que temos que atualizar o campo valor em 10% de uma tabela com diversos registros. não cabe ao usuário definir como o gerenciador de banco de dados executará uma tarefa. e com o mesmo nome.com. Se um projeto é gravado no formato ASCII. e. mas com a extensão FRX. YPixels# xTwips = Screen.

close Observe a utilização da instrução UPDATE. SELECT Count([Código postal]) AS Contagem FROM Clientes 4.[Sobrenome] FROM Empregados 2.10" Db.close Agora utilizando uma instrução SQL teriamos o seguinte código: Dim db as Database Set db=Workspaces(0).mdb") set tabela=db. Note o us o do parâmetro (*) indicando todos os campos da tabela indicada. 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.br 42 Dim tabela as recordset set db=workspaces(0).valor=tabela.execute "UPDATE tabela SET valor=valor*1.Remove registros de uma tabela y INSERT INTO . Vejamos alguns exemplos da instrução SELECT: 1.Obtém um grupo de registros e insere os registros em um dynaset ou em uma tabela y UPDATE .Cria uma tabela de resumo.[Sobrenome] FROM Empregados WHERE [Sobrenome] Like 'S*' .edit Tabela.update Tabela.williamdsilva@aol.mdb") Db. Seleciona os campos "Primeiro nome" e "Sobrenome" para Empregados cujos sobrenomes começam pela letra S.Openrecordset("tabela") While not tabela. bem mais simples.10 Tabela.valor*1.[Sobrenome] FROM Empregados WHERE [Sobrenome]='Pereira' 5. SELECT [Primeiro nome].Define os valores dos campos de uma tabela em uma atualização y TRANSFORM .com.Opendatabase("c:\base.* FROM Empregados 3.Opendatabase("c:\base. não é? Vejamos abaixo as cláusulas manipulativas e suas finalidades: Instrução y SELECT . SELECT [Primeiro nome]. SELECT Empregados.movenext Wend Tabela. SELECT [Primeiro nome]. Seleciona todos os campos da tabela Empregados.eof Tabela. utilizando o conteúdo de um campo como cabeçalho de cada coluna y DELETE FROM . Seleciona os campos "Primeiro nome" e "Sobrenome" de cada registro cujo sobrenome seja Pereira. Seleciona os campos "Primeiro nome" e "Sobrenome" de todos os registros da tabela Empregados.Acrescenta um grupo de registros a uma tabela.

ByVal Y1 As Long.Height / Screen. Sintaxe: FileCopy Exemplo: Public Function MoveArquivo(Origem As String.TwipsPerPixelX useh& = me.Form circular Enviado por: Felipe Maion Garcia Adicione nas declarações da form: Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As _ Long. ByVal Y2 As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd _ As Long. dl& Dim usew&. ByVal bRedraw As Boolean) As Long Agora no form load: Dim hr&. ByVal hRgn As Long.williamdsilva@aol.Especifica as condições que os registros devem satisfazer para compor o subconjunto de dados.Indica as tabelas utilizadas como fonte de dados y WHERE . 84 .TwipsPerPixelY x= 0 .com. useh& usew& = me. Destino As String) As Boolean On Error GoTo ErroMovendoArquivo FileCopy Origem. ByVal X2 As Long. Destino Kill Origem MoveArquivo = True Exit Function ErroMovendoArquivo: MoveArquivo = False Exit Function End Funciotn 85 .Copia o arquivo especificado Enviado por: Felipe Maion Garcia Copia o arquivo especificado.br 43 y FROM .Width / Screen.

bmp) Print "width = " + Str$(bmp. True) Obs. ret% ret = GetObjectAPI(picture1. useh) 'Faz a _ 'forma da janela numa forma de um círculo descrito por x1.com. além de ser muito fácil e com pouca codificação. usando a função LoadPicture. é utilizar a API GetObject. hr. Uma outra forma.Centralizando forms Enviado por: Felipe Maion Garcia Centralizar forms é muito útil. height = " + Str$(bmp.Width) \ 2 Top = (Screen.bmheight) .Height .bmwidth) + ". (O Bitmap deve ser carregado em um PictureBox chamado Picture1): Dim bmp As BITMAP.hWnd. Veja o exemplo abaixo: Coloque o seguinte código em um arquivo . Note que os valores destas propriedades estão em Twips.y2 dl& = SetWindowRgn(me. ByVal nCount% .BAS Type 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%.br 44 hr& = CreateEllipticRgn(0.Height) \ 2 87 . Esta função retorna a estrutura do Bitmap em dois membros.Bitmap Enviado por: Felipe Maion Garcia Você pode utilizar o controle PictureBox com a propriedade AutoSize=True. As propriedades Height e Width deste controle contém as dimensões do bitmap.williamdsilva@aol. bmWidth e bmHeight representando as dimensões do bitmap em pixels. Carregue o bitmap no PictureBox.Width .x2.: mude o nome "Screen" para o nome do seu formulário 86 . Len(bmp). Coloque o seguinte código no evento Form_Load () do form que você quiser centralizar: Left = (Screen. 0.Picture. usew. lpObject As Any) Coloque o seguinte código aonde você quer obter as dimensões do bitmap. O controle irá ajustar o seu tamanho automaticamente.y1. para que o bitmap caiba nele.

contendo tabelas e índices (index) Enviado por: Felipe Maion Garcia 1. assim como se você fosse criar um campo em uma tabela usando o Data Manager.close set db = nothing 3 .Fields. Além de serem mais rápidos.Type = DB_TEXT campo1.Size = 60 campo2. Então.CP=1252.mdb". eles requerem menos código para realizar estas buscas.Como criar um banco de dados Access. com várias propriedades.Criando Índices Índices são muito úteis em rotinas de procura de dados em tabelas.br 45 88 . Criando uma tabela Uma tabela contém vários campos.Append campo1 tb.TableDefs. deve-se atribuir valores a estas propriedades. a tabela conterá dois campos : NOME e IDADE. DB_LANG_GENERAL) 2.Name = "NOME" campo1.COUNTRY=0" SET db = CREATEDATABASE("banco. para cada campo. que vem com o VB: Neste exemplo.LANGID=0x0809.Append campo2 db.Fields.Type = DB_INTEGER tb.com.mdb") tb.Append tb tb.Name = "IDADE" campo2. Veja como criar um índice de um campo em uma tabela já existente: .name = "Tabela" campo1.Path dim db as database CONST DB_LANG_GENERAL = ". Veja o código a seguir : 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. Criando o banco de dados A criação de um banco de dados é relativamente simples : CHDRIVE App.close set tb = nothing db.Path CHDIR App.williamdsilva@aol.

unique = false index2. Assim. só há acesso ao disco uma vez. 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. Dim db as database dim tb as table set db = OpenDatabase("data_base.name = "nome" index1.mdb") .OpenTable("tabela") index1. com CommitTrans.williamdsilva@aol. que é q uando ocorre a gravação dos dados no disco.fields = "NOME" index1.Indexes.Indexes.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.name = "idade" index2.Append index1 tb. as mudanças são armazenadas na memória. Ao invés disso. Observe o exemplo de como se usa estes comandos. 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).unique = true index1.close set db = nothing 89 .close set tb = nothing db.Append index2 tb.fields = "IDADE" index2.com.mdb") set tb = db. até que há o comando CommitTrans.br 46 Dim index1 as New Index Dim index2 as New Index Dim db as database Dim tb as table set db = OpenDatabase("banco.primary = true index1.primary = false tb.

A soma deles incluirá um pequeno erro.close set tb = nothing 'libera a memória alocada pela tabela db. A representação da máquina sobre valores numéricos é em binário.addnew tb!numero = "número" & a tb.51 + (-17.OpenTable("table") BeginTrans for a = 1 to 10 tb. Logo. Isso ocorre. os valores com ponto flutuante são aproximados para o próximo valor que pode ser representado em binário.com. ambos 18. nela percebemos que todos os dados referentes a uma pessoa estão na mesma linha. eles tendem a causar algum erro nos calculos quando são utilizados. porque no Visual Basic. isso não é verdade.51 e 17.#####") 91 .0001 é uma fração repetitiva com um período de 104 bits!). Qualquer valor inteiro pode ser representado "EXATAMENTE" na forma binária. a isso chamamos registros.br 47 set tb = db. faça o seguinte: Format$(18.0001 não pode ser representado exatamente em binário (0.59).9200000000000002. os valores com ponto flutuante são armazenados no formato padrão IEEE.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.williamdsilva@aol. No nosso exemplo. Por exemplo. Então. Para exibir o resultado exato para o usuário. o decimal 0. 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.close set db = nothing 'libera a memória alocada pelo banco de dados 90 .update next a CommitTrans 'as informações serão atualizadas aqui! tb.59 não podem ser representados exatamente pelo padrão de pont o flutuante. .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. Mas nos casos de valores com ponto flutuante.51 + ( -17.59) e você irá receber . A lista telefônica é um exemplo. "###.

mostrar data. as quais chamamos campos. Status do Coaps Lock e Num Lock. relatórios e código são armazenados num único arquivo . Para o Access e o Visual Basic todos os componentes do sistema estão em um único ar quivo com extensão MDB. consultas.br 48 O tipo ou categoria da informação (nome. Shift As Integer. caso contrário aparecerá em vermelho reprovado. relatórios. O Gerenciador relacional de banco de dados do Visual Basic e do Access é o Microsoft Jet.) sobre uma pessoa está separada em colunas. Se a média for menor que 5 imprima em vermelho reprovado. Escolha a cor Veremlho). ele pertence a uma categoria diferente dos Gerenciadores tradicionais. a este "pacote" consideramos o banco de dados.com. indíces. pois possuem características em comum com os banco de dados cliente-servidor. Clicando com o botão direito do mouse é possível personalizado (Número de paineis. Y As Single) . 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.williamdsilva@aol. macros. Logo quando abrimos um arquivo MDB temos acesso a todos os componentes do sistema: tabelas.Enviando texto para barra de status Enviado por: Mauro Sakamoto Suponha que você tenha uma aplicação e ao passar por um botão.0 (para o vb 5.Média}<5) THEN "Reprovado" Em seguida formate o segundo para vermelho (clique com o botão direito do mouse e escolha change Font. Está pronto quando o valor média da tabela for maior que cinco aparecerá no relatório em preto a palavra aprovado.Mudar cor do texto conforme resultado Enviado por: Mauro Sakamoto Supondo que você esteja tirando uma listagem de alunos. X As Single. Para fazer isso utilize dois campos fórmula sobrepostos. Para o padrão MDB este conjunto de dados e sua estrutura denomina-se Tabela. y Admite o armazenamento permanente de comandos SQL. como o Dbase e o Paradox. consultas. 93 . etc). y É possível forçar a integridade referencial entre as tabelas. Portanto aquilo que o Dbase/Clipper considera um banco de dados o Access e o Visual Basic considera como uma Tabela. No primeiro dê o nome de aprovado e insira o seguinte código: IF({Tabela. 92 . etc.telefone. senão imprima em preto aprovado. você queira que emita uma mensagem na barra de status. 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. Tais características comuns são: y Todas as tabelas.etc.0) Em seguida escolha o controle StatusBar. Deixe o segundo painel é o destinado para a mensagem.MDB y Os campos de data suportam informação de hora. Para isso primeiramente vá até o menu Project -Componentes e Selecione Microsoft Windows Common Controls 5.Média}>=5) THEN "Aprovado" No segundo faça: IF({Tabela. hora. No Dbase/Clipper banco de dados significa um arquivo que contém a estrutura de dados(campos) e os dados (Arquivo padrão DBF). A esses componentes chamamos objetos do sistema. y Os campos suportam valores nulos (Null).

TxtCampo3. quero que ao sair do "Form2" esse valor seja exibido no "Form1". Já GetBookMark(0) retorna a linha selecionada.Text=MySet("Campo1") Form1. ou seja ao selecionar um registro no DBGrid. Desenhe a barra de ferramentas e o menu.Text=MySet("Campo2") Form1.CellValue(DBGrid.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)).TxtCampo1.williamdsilva@aol. Para fazer isso utilize os seguintes códigos no evento Click do botão retornar.DBGrid. 95 .Text="Texto desejado" End Sub 'inicia no zero Agora vá até o evento MouseMove do seu Form e faça StatusBar1.GetBookMark(0)) 'valor a ser encontrado Form1.mdb") 'abre o banco de dados Set MySet=MyDB.Columns(0).com. border para 1 e Align para Top. . Esse DBGRid é utilizado para pesquisa.TxtCampo2.Text=MySet("Campo3") Form1.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.Panels(1).br 49 StatusBar1. Dim MyDB As Database Dim MySet As RecordSet 'declaração de variáveis Set MyDB=OpenDatabase("File.TxtCampoN. mude o BevelOuter para 1 (inset).TxtCampo4.Seek "=".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.OpenRecordSet("MyTable") 'abre a tabela MySet.Panels(1).Index = "PrimaryKey" 'busca pelo campo chave MySet. Apague a Caption. Este tamanho não é fácil de ser desenhado manualmente.Text=MySet("Campo4") 'e assim sucessivamente Form1.

williamdsilva@aol.com.br
96 - Livre-se dos zeros inúteis Enviado por: Henrique Angelo

50

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 v ariá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

williamdsilva@aol.com.br

51

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 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 Sub Function 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 simple s, 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, X as Long, Y as Long) Dim Convert as Double Convert = 3.141593 /180 ' PI/180 X = CenterX - (Sin(-Degree * Convert) * RadiusX) RadiusX as Long, RadiusY as Long, _

williamdsilva@aol.com.br

52

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: Sub List1_MouseDown (Button As Integer, _ Shift As Integer, X As Single, Y As Single) Old_index = List1.ListIndex Tmp_text = List1.text End Sub Sub 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

williamdsilva@aol.com.br

53

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. 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

hWnd). quando o usuário maxi miza ou minimiza a janela. O código poderá permanecer durante o desenvolvimento.br 108 . Dim Res% Res = RemoveMenu(GetMenu(Form.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. É possível (VB3/VB4) alternar o conteúdo da Caption. no VB4). 111 . Diferente da borderstyle = 0 (none). você terá um form redimensionável.Path. ByVal nPosition%. ByVal wFlags%) '. "VB") Then 'execute os processos próprios 'de debug e não de sistema executável End IF Uma variação é: If InsStr(App. SC_MOVE.Forms redimensionáveis sem barra de título Enviado por: Henrique Angelo 54 Se você alterar as propriedades (de um form) caption = "" e controlbox = false. Utilizando borderstyle = 5 (sizable toolwindows. você economizará memória se utilizar uma picture box com AutoRedraw = true e BorderStyle = 0. sem afetar o usuário final. pois. enquanto o AutoRedraw do form será desativado (false). se você esquecer. o bitmap persistente criado pelo AutoRedraw é tão grande quanto as dimensões máximas do form para revelar a saída oculta. as propriedades 3D (VB4) são mantidas. MF_BYPOSITION) 110 . E não se esqueça de acrescentar um botão de Fechar (unload) no seu form! 109 . uma borderstyle = 3 (fixed) irá ser mostrada.problemas ao usuário.Path. isto não causará . Se o gráfico a ser redimensionado (mantido) for pequeno em relação ao form.com. 112 .Removendo o move Enviado por: Henrique Angelo Em alguns casos. o desperdício pode ser bem maior. "VB") Then Stop Você pode inserir este código para depuração (debug). Verifique se o caminho procurado é o caminho do seu projeto e não o diretório final de sua aplicação. Se seu form é redimensionável.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.repetimos .williamdsilva@aol.. No VB isto pode ser implementado com APIs: Declare Function GetMenu% Lib "User" (ByVal hWnd%) Declare Function RemoveMenu% Lib "User" (ByVal hWnd%.. é interessante impedir o usuário de mover um form. limpando-a quando conveniente.Animação Enviado por: Felipe Maion Garcia . If InsStr(App.

Direita e Esquerda. e não "3D".Picture Then Set Picture1.Picture = ImageList1.Picture = ImageList1. No ImageList. Coloque. você deve tirar a borda do PictureBox e no Form1.Picture = ImageList1. abra o Visual Basic e comece um EXE normal. ainda no Pi ctureBox. digite: Dim Baixo As Integer Dim Cima As Integer Dim Direita As Integer Dim Esquerda As Integer O código acima foi utilizado para declarar as variáveis Baixo.Top = Picture1. uma vez que é praticamente impossível recortar todas as imagens com o mesmo tamanho.Picture Picture1.Picture = ImageList1.ListImages(1).ListImages(1).br 55 Agora. você dará um grande passo na programação de jogos. o estilo normal. no evento Form1_Load.Top = Picture1. um PictureBox.Top + 50 Exit Sub End If Apesar de parecerem complexos. Como já foi dito anteriormente. Além disso. Ao mesmo tempo. caberá a vocês recortar cada posi ção. Você . 113 . assim. e quer movê -la pela tela usando as setas do teclado.Top + 50 Exit Sub End If If Picture1. Depois. coloque: If Picture1.ListImages(2) .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). Note que para cada imagem dessa lista há um número. cada um desses arquivos contém todos os movimentos de um determinado personagem. um Timer e um ImageList (VB 4 ou superior apenas). ajuste o Timer com "Interval" de 100 milissegund os.ListImages(2). a animação conseguiu mesmo passar esta impressão. No General_Declarations. Como neste exemplo usei imagens de um homem andando para baixo na tela. apesar de não parecer.com. O PictureBox deverá ter sua própriedade "AutoSize" ajustada para "True". programar a propriedade "BackColor" com uma cor preta. insira o seguinte código: Set Picture1. Depois de feito o recorte. selecione as imagens que farão parte da anim ação. então. o programa irá checar qual é a imagem da animação e a trocará para outra. salvando-a com um novo nome de arquivo. Crie um relógio (Timer1). que é o padrão.Picture = ImageList1. Depois disso. esses comandos são simples: a cada 100 milissegundos.Picture Picture1.ListImages(1). esses comandos farão com que o PictureBox se mova para baixo. Cima.Movimento de objeto através do teclado Enviado por: Felipe Maion Garcia Movimentando Objetos Através do Teclado Isso é simples. Trata -se da Animação de Personagens.Picture Then Set Picture1. Suponhamos que você tenha uma forma (Shape1) em seu projeto.williamdsilva@aol. Lembre -se também de ajustar. encontrei muitos desenhos para animações simples no SpriteLib. Infelizmente. No evento Timer1_Timer.

com.williamdsilva@aol.Left = Shape1. 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. digite: If Esquerda = True Then Shape1.Left = Shape1.br 56 pode alterar o nome das variáveis aqui. Agora.Left + 30 End If If Cima = True Then .Left . no evento Form_KeyDown. 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. Logo depois.30 End If If Direita = True Then Shape1. no evento Timer1_Timer. no evento Form_KeyUp. Agora. mas lembre-se de mudar também TODAS as referências a estas variáveis pelas condições novas.

Calma..Top+30" ou . se você aumentar demais a velocidade.br 57 7Shape1. ByVal hwndCallback As Long) As Long Suponhamos que você queira que esta música toque sempre que o programa se iniciar (Form_L oad) e pare sempre que o mesmo for fechado (Form_Unload). Basta colocar em um módulo de declarações (*. basta executar o jogo e ver o funcionamento deste código.. insira este código em um Módulo de seu projeto: Declare Function sndPlaySound Lib "winmm. e quanto maior o número. SND_ASYNC Or SND_NODEFAULT) PRONTO! Isso é tudo que um jogo precisa para tocar efeitos sonoros. 0. no evento Form_Unload. maior a velocidade. no evento Form_Load. referente ao momento em que o jogo é fechado.dll". Então. Para que isso seja possível. Declare Function mciSendString Lib "winmm. além de usar os fundos musicais (MID).. Quanto menor o número. passa a perder muito na suavidade dos movimentos. os comandos do jogo "travam" até que ele acabe. como aparenta). ByVal uFlags As Long) As Long Repare que todo este código deve ser colocado em uma única linha.Left+30" ou ". você não perde velocidade com isso. NOTA: em todos os lugares onde há alg o como ".Top = Shape1.Top . 0. a palavra "winmm.Left -30".BAS) o seguinte código. ByVal uRetrunLength As Long. quando o jogo seja fechado..williamdsilva@aol.Efeitos sonoros Enviado por: Felipe Maion Garcia Também é possível. NOTA: tudo isso é apenas uma linha de texto e não várias.Musica de fundo Enviado por: Felipe Maion Garcia Caso você não saiba.mid type sequencer alias musica". 114 . e o melhor. Depois disso..com. o efeito sonoro "Repique. 115 .. usar efeitos sonoros (WAV) sem que seja necessário interromper a música de fundo.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String.. coloque o seguinte código: result = sndPlaySound("C:\Windows\Repique. NOTA: você pode mesclar os tópicos 01 e 02 para ter uma música de fundo e efeitos sonoros ao mesmo tempo.dll" por "mmsystem. ByVal lpstrReturnString As String. insira o código: result = mciSendString("open C:\Windows\Canyon. menor a velocidade.30 End If If Baixo = True Then Shape1. é possível tocar uma música de extensão MID em um programa e realizar outras tarefas ao mesmo tempo. basta mudar.wav" seja tocado.wav"..Top = Shape1.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String. no Módulo. O código abaixo se refere ao seguinte exemplo: você quer que.Top + 30 End If Repare que a propriedade Interval do objeto Timer1 deve estar ajustada para 1. OBS: Se você estiver usando o Windows 3. 0) .1. irá perceber que este código não irá funcionar. porém enquanto este efeito sonoro toca. Preferimos usar 30. Agora. Porém. você pode mudar o número "30" de acordo com a velocidade do Shape1."Top -30" ou ".

mas no VB3 o u 4 essa propriedade não existe.com. Em seguida mude o texto (esse vai ser o texto do seu micro help).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). 0) result = mciSendString("stop musica". o som escolhido começará a tocar.ListCount-1) If List. Se você mudou a variável "musica" no evento Form_Load. Primeiramente insira um label próximo de um botão.dll" por "mmsystem. No VB5 ele já vem como sendo uma propriedade dos controles. 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. mas não se esqueça de mudar esta variável também na segunda linha.Selected(n)=True then 'se verdadeiro está selecionado showmessage('o item '+ list. 0. insira o seguinte código: result = mciSendString("open C:\Windows\Canyon. 0) Desta vez.dll". na hora da saída. 0. sempre que você iniciar o Jogo.br 58 result = mciSendString("play musica". o som "Canyon. 0. Porém existe uma maneira bem simples de criá -la. PRONTO! Agora. 0. o som irá continuar tocando! OBS: Se você estiver usando o Windows 3. no evento Form_Unload. 116 . não o pare com o botão "Stop".1. Assim. 0) Novamente são duas linhas de código. Agora. quando você iniciar seu programa. 0. a palavra "winmm. no Módulo. 0. que a palavra "musica" pode ser substituida por outra variável.williamdsilva@aol. ou o programa não irá iniciar corretamente. não esqueça de mudá-la aqui também. basta mudar. este som irá parar.Múltipla seleção numa list box. Calma. irá perceber que este código não irá funcionar. 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). Se você não fizer isso. e. NOTA: se você est iver rodando o programa por dentro do VB. e sim feche o Form. o BackColor para &H00C0FFFF& e coloque a propriedade visible=false Agora no evento MouseMove do formulário coloque .mid type sequencer alias musica". são duas linhas mesmo. Repare.List(n) +' está selecionado') end if Next n 117 . depois da palavra "alias".mid" irá tocar.

Application") With ObjectAccess .DoCmd.mdb".williamdsilva@aol.OpenReport ReportName:="Report File Name" End With 'para imprimir sem visualizar 119 .OpenCurrentDatabase filepath:="File.mdb" .com.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 Dim ObjectAccess As Object Set ObjectAccess = CreateObject("Access.OpenCurrentDatabase filepath:="File.Visible=True then Label1. . View:=Access.0) 'executa o pkzip em janela oculta. Então basta colocar os seguintes códigos na opção de backup Dim X as variant X=Shell("pkzip. E quando você estiver sobre o formulário este ficará invisível. Para simplificar a operação podemos utilizar o pkzip (compactador de arquivos) e uma função chamada shell.br 59 If Label1.mdb" .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.DoCmd. 118 .Visible = True .OpenReport ReportName:="Report File Name".zip -& c:\path\file.Visible=False End if Em seguida vá até o evento MouseMove do Botão e coloque If Label1. Principalmente para usuários leigos.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.Visible=False then Label1.acPreview End With 'para visualizar 'E With ObjectAccess .exe a:\file.

williamdsilva@aol. Enviado por: Mauro Sakamoto Para alterar em tempo de execução a impressora é preciso inserir o Controle Common Dialog.br 60 SendKeys "%{F4}".Mudar a impressora em tempo de execução.0) 'executa o pkunzip em janela oculta. Em seguida insira o seguinte código: CommonDialog1. Para isso utiliza a seguinte sintaxe: Dim i as integer For i=1 to Form1.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.zip c:\path".com. SendKeys "%{F4}".Count-1 If TypdeOf Form1.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.Controls.Controls(i) Is TextBox then 'verifica são caixa de texto Form1. True 'fecha a janela 120 . 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.ShowPrinter 122 .Text="" .exe a:\file. If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 Beep End If 121 .Controls(i).

Utilizando Grid para Simular DBGrid Enviado por: Mauro Sakamoto Para quem é usuário do VB 3.Text = "CampoN" Set MyDB=OpenDataBase("File.ColWidth(0) = 100 'formata o Grid Grid1.Col=2 'seleciona a primeira linha e a terceira coluna.ColWidth(N) = 3500 'última coluna Grid1.. 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.br 61 end if Next i 123 .Col=N 'seleciona a primeira linha e a última coluna.Text = "Campo2" 'e assim sucessivamente. .0 e deseja utilizar um DBGrid para visualizar uma tabela ou uma consulta... 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. Os valores são referentes a largura das colunas no Grid. isso pode ser feito utilizando-se um Grid. Os são referentes ao nome dos campos da tabela. Grid1.com.mdb")'abre o Banco de dados . Grid1. Elas devem ser ajustadas conforme o tamanho do campo a ser exibido. Grid1.ColWidth(1) = 3000 'e assim sucessivamente.williamdsilva@aol.Col=1 'seleciona a primeira linha e a segunda coluna. Grid1. Grid1.Text = "Campo1" Grid1.Row=0 Grid1. .

com.Rows = Linhas 'incrementa o número de linhas do Grid Grid1.br 62 Set MyTable=MyDB.Text="" End if ' e assim sucessivamente.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.Text=MyTable("Campo2") Else Grid1.williamdsilva@aol.Text=MyTable("Campo1") Else Grid1.OpenTable("TableName") 'abre a tabela a ser exibida Linhas = 1 'seta o número de linhas (começa em zero) MyTable.Col=2 'seleciona coluna 2 If Not IsNull(MyTable("Campo2")) then Grid1. mostra registros no Grid Grid1.Col=N 'ultima coluna If Not IsNull(MyTable("CampoN")) then Grid1.Text="" End if Linhas=Linhas+1 Loop End Sub 124 .Text=MyTable("CampoN") Else Grid1. Grid1.MoveFirst 'move para primeiro registro da tabela Do Until MyTable.EOF 'enquanto não chegar ao final do arquivo.Col=1 ' seleciona coluna 1 If Not IsNull(MyTable("Campo1")) then Grid1.Text="" End if Grid1. .Row=Linhas 'seleciona linha Grid1.

mdb") 'Abre o Banco de Dados MySQL= " SELECT * FROM [Tabela] " MySQL= MySQL & " WHERE [Tabela]."mm/dd/yy") & Chr(35) Set MyQuery=MyDB. 125 . 63 Set MyDB = OpenDatabase("File.Reparando Banco de Dados Corrompido Enviado por: Mauro Saka moto 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".OpenCreateSnapShot(MySQL) Supondo que TxtDataInicio="31/01/97" e TxtDataFinal="31/12/97" a Query ficará da seguinte maneira SELECT * FROM [Tabela] WHERE [Tabela]. "Opção" DBEngine.mdb") 'apaga o BD antigo Name "c:\path\fileBack. 16.Quando vc utliza campos do tido data é importante observar que a data é no formato mês -dia-ano.br Escreva o seguinte código.Text.mdb" As "c:\path\file."mm/dd/yy") & Chr(35) & " AND " & Chr(35) & Format(TxtDataFinal.Text.williamdsilva@aol.CompactDatabase "c:\path\file.com.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. Dim MyDB As DataBase Dim MyQuery As SnapShot Dim MySQL As String 'Declaração de variáveis.[Data] BETWEEN #01/31/97# AND #12/31/97# Obs:."c:\path\fileBack.RepairDatabase ("c:\path\file.mdb".mdb" 'compacta banco de dados e renomeia Kill ("c:\path\file. 126 . porisso é preciso utilizar a função format.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: Private Sub "nome do botao"_Click() .[Data] BETWEEN " MySQL= MySQL & Chr(35) & Format(TxtDataInicial.mdb") 'repara o Banco de Dados DBEngine.

. SQLPASSTRHOUGH) A SQL Passthrough é o parâmetro para "pular" a tradução.CreateSnapshop(VA_Cmd.br 64 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 . A razão disto é que. Assim. os drivers ODBC atuarão como tradutores dos seus comandos SQL. Assim. poderá ser executado . o ODBC irá "interpretar". VA_Cmd = "Select Cidade. 2) Desvantagem: a "tradução" impacta consideravelmente na performance do sistema.com.sem alteração de fontes . pelo padrão ODBC. o SQL da Informix. a constante chama -se dbSQLPassThrough. A solução é pedir ao ODBC que "pule" a tradução que seria realizada pelos seus drivers. o aplicativo (que pode estar rodando em uma grande rede) tornar -se-á muito mais lento. Além da portabilidade de código fonte.em qualquer banco de dados Client Server. Escrevendo seus comandos em SQL ANSI. a priori.. bases diferentes. 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. . No VB4. cada fornecedor de banco de dados poderá incluir recursos (como storned procedures) e sintaxes específicas em seus prod utos. em tempo de execução. que passaram por processos de fusão ou incorporação com outra empresa (que usa outra "marca" de banco de dados).williamdsilva@aol. Nome from CIDADE where Cidade = " & VA_Cod Set snapCidade = db. existe o ganho em interoperabilidade: o programa poderá acessar. ganha-se tempo de execução. ao mesmo tempo. por exemplo.Performance com a SQL Passthrough Enviado por: Henrique Angelo Quando você acessa uma base dados via ODBC (Open Database Connectivity). o SQL da Sybase etc. A interoperabilidade é necessária em empresas. existe uma linguagem SQL genérica (SQL ANSI) e dialetos SQL distintos nos vários produtos (linguagens e bancos) disponíveis no mercado. 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 '. existem o SQL da Oracle.

Se. ocorrerá um erro (run time error 340). form2 e form3.Show End With Agora altere Caller. No evento click do botão em form3.Value Then MsgBox str(ij). de Control Array. 1. Rodando em Windows 3. No clique do terceiro botão. Por exemplo. Isto não ocorre com o VB3. 129 . Se os elementos forem 0.1 If Option(ij). você precisar de um form modal. Basta alterar a propriedade do form2 (o que chamou) para false. cada control array (vetor de controles) é uma collection e possui uma propriedade Count.Propriedade Count.Solução para bug no DBGrid Enviado por: Henrique Angelo Há um sério bug (erro) em VB4.br 65 O comando SQL passado deve estar na sintaxe específica do SGBD (ou DBMS) utilizado.williamdsilva@aol. "Opção Selecionada" End If Next ij End Sub Esta rotina trabalha apenas com números contínuos. então. With FormModal . entretant o.propCaller = Me . Volte para true no evento Unload.0. nem no help do VB4. A propriedade Count e o método Item são suportados. crie três forms: form1.Count . É possível. Talvez. chame o form2 como modal. simule -o. Adicione um DBGrid no form3. Adicione um C ommand1 (botão) em cada form. No evento click do botão em form1. pelo fato de que uma control array collection não possui todas as propriedades e métodos das demais collections. seguindo-se os passos abaixo (código parametrizado): 1) Programe todas as consultas em todos os dialetos SQL utilizados pelos seus usuários.Enabled = false no evento Load do form "modal". Solução: não use DBGrid com forms modais.com. 3 e 4. ao se tentar fazer referência ao item 2. 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. se criar um loop (laço de repetição) tendo o Count como valor máximo. ocorre um erro de pilha (stack error) com o Visual Basic (tanto em 16 como em 32 bits). escreva o código de um modo fácil de ser compreendido e alterado. no controle Databound Grid usado com forms modais. Execute o form1 e aperte nos referidos botões. No evento click do botão em form2 chame o form3 como modal. Você poderá criar uma property para fazer referência ao form que chamou. Private Sub FindSelectedOption ( ) Dim ij As Integer As Integer For ij = 0 to Option1. o sistema poderá continuar como portável e interoperável. 128 . não documentada Enviado por: Henrique Angelo No VB4. . Este pequeno exemplo usa o Count para determinar qual elemento de um vetor de botões de opção foi selecionado. o sistema trava completamente.1x. enquanto os métodos Add e Remove não o são. use unload form3. Esta característica não aparece nem nos manuais. Mesmo assim .

Para impedir que o usuário interaja com o sistema em algumas operações. via MousePointer e Enabled Enviado por: Henrique Angelo Mudar a propriedade MousePointer do form não impede a ação do usuário. _ plngVolNameSize. A chamada indica o sistema de arquivos: FAT. de rede e CD. HPFS ou CDFS (CD File System). aplicável a MDI parent forms (janelas principais de interface múltipla) e seus MDI children f orms (janelas filhas). Combine a chamada a GetDriveType com uma chamada a GetVolumeInformation para determinar se o drive é.com. plngSysTypeSize) 131 .. a função GetDriveType mostra os Drives CDs em Rede. plngVolSerialNum. ao mesmo tempo. Em alguns processos demorados (como carga de banco de dados) mude a propriedade enabled de um MDI child para false.. plngSysFlags. _ pstrSystemType. assim: . Entretanto. mas não completa.williamdsilva@aol.Identificando uma unidade de CD em Rede Enviado por: Henrique Angelo A API de 32 bits é bem mais rica que a de 16 bits.Prevenindo interação do usuário. apenas altera o desenho do ponteiro. pstrRootPath = "E:\" pstrVolName = Space$(256) pstrSystemType = Space$(32) plngSysTypeSize = Clng(Len(pstr(SystemType)) plnVolNameSize = Clng(Len(pstrVolName)) plngRtn = GetVolumeInformation _ (pstrRoothPath. via mouse ou teclado.br 66 130 . Isto é uma verdade. apenas como DRIVE_REMOTE (de rede). Declare Function GetVolumeInformation _ Lib "Kernel32" _ 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 '. NTFS. plngMaxFileNameLen. pstrVolName. desenvolvi esta dica.

MousePointer = 11 'hourglass (ampulheta) ExecutarProcessoDemorado 'depois Me.Index -1) = . 132 . Se a lista já estiver ordenada por esta coluna.Sorted = False . crie uma Forms Collection e desative (enabled = false) cada form.MousePointer = 0 'padrão No caso de um MDI com muitos filhos ativos.SortKey = ColumnHeader .williamdsilva@aol.1 .Sorted = True End IF End With End Sub 133 .com.SortOrder + 1) Mod 2 Else . Private Sub ListView1_ColumnClick _ (ByBal ColumnHeader As ColumnHeader) Whith ListView1 If (ColumnHeader.SortOrder = 0 .Ordenando Colunas da ListView Enviado por: Henrique Angelo Dê ao seu controle ListView (32 bits) a funcionalidade de ordenação do Windows 95 Explorer.Enabled = True Me. a proprie dade Text é somente-para-leitura.text = "" 'ou Combo1.Limpando Combos Read-Only Enviado por: Henrique Angelo Numa ComboBox com a propriedade Style = 2 (dropdown list).br 67 'antes Me. Este código ordena a lista por qualquer coluna. Depois de desativá-los. use MDIForm.SortKey Then . a ordem será invertida. em construções como estas: Combo1.SortOrder = (. Combo1.Enabled = False Me.text = "novo conteúdo" A solução é limpar a combo com o método clear e adicionar o valor novo.Clear Combo1.AddItem "novo conteúdo " .Hourglass = false. Isto impede limpeza e troca de conteúdo por esta propriedade.

TXT no seu projeto (menu File à Add Fil e). carregamos um Grid simples com dados de uma tabela. já temos o total.path) Enviado por: Henrique Angelo Esteja atento quando usar a propriedade path (caminho) do objeto Application (A pp. Sub SU_CarregarGrid () Dim VA_Cmd As String Dim dynatemp As dynaset Dim dynacont As dynaset Dim VA_Cont. será usado para a consulta. retornará C: \SUBDIR\. Para testar e acrescentar a barra. por exemplo. MyPath = App. posteriormente. Inclua MYCONST. 136 . Apareceu quando o executável está em um subdiretório. No exemplo abaixo. deveremos conhecer o tamanho do retorno da consulta. VA_Curr Dim VA_SevErro On Error GoTo Erro_Carregar_Grid SU_Aguarde True.. 1) = Chr(92) then 'chr 92 = "\" MyPath = MyPath & Chr(92) End If 135 .. O "registro corrente" é obtido dentro do loop. "Carregando tabela de cidades. use o código abaixo que. Se seu executável está rodando na raiz de um drive. copie o arquivo CONSTANT. O número de linhas que irá retornar é calculado por um Select Count (instrução SQL para contador) igual ao Select que.TXT (para o diretório do seu projeto). basta verificar se a mesma já foi definida pela Microsoft e remover o a ' do comentário (reverter a substituição).Mantendo constantes Enviado por: Henrique Angelo Melhore o uso do arquivo CONSTANT.williamdsilva@aol.Path retornará o nome (letra:) na unidade e uma barra (algo como C: \). Utilizamos as rotinas SU_Aguarde e SU_BarraPerc (explicadas nas dicas anteriores). aplicação). poderão ser impedidas consultas longas demais. Para um novo projeto.Path If Not Right(MyPath." 'rotina acima explicada na DICA ANTERIOR . a barra final não é acrescentada (C: \SUBDIR).com. Quando for necessária uma nova constante. Substitua (menu Edit à Replace ou CTRL + R) todas as expressões Global por ' Global neste arquivo. O Count é uma operação rápida. contendo o total de linhas que seria trazido pela consulta.TXT.Inconsistência no caminho da aplicação (app. O retorno do Select Count é um número. Para o percentual.Painel de Percentual com SQL Count Enviado por: Henrique Angelo Complementando a dica anterior: Em uma operação de consulta a um banco de dados (típica de desenvolvimento comercial).TXT para MYCONST. App. principalmente em bancos Client Server (onde o cálculo é executado no servidor). Com o Count.br 68 134 .

Text) > 0 Then VA_Cmd = VA_Cmd + " Where CIDADE.Nome >= '" & (TB_Cidade.Rows = VA_Cont + 1 VA_Curr = 1 Do While Not dynatemp..CreateDynaset(VA_Cmd. limpar o Grid '.Row = 1 '..br 69 '.Row = VA_Curr Gr_Grid.Nome <= '" & (TB_Cidade...williamdsilva@aol.Text) & Chr(255) & "' " End If Set dynacont = db.Text) & "' " VA_Cmd = VA_Cmd + "And CIDADE..EOF Then VA_Cont = dynacont(0) Else VA_Cont = 0 End If If VA_Cont = 0 Then MsgBox "Nenhum registro de cidade encontrado.text 'query VA_Cmd = "Select * From CIDADE" If Len(TB_Cidade.Text) & "' " VA_Cmd = VA_Cmd + "And CIDADE.EOF SU_BarraPerc CInt(VA_Curr * 100 / VA_Cont).Text) > 0 Then VA_Cmd = VA_Cmd + " Where CIDADE.CreateDynaset(VA_Cmd. marcar outra linha do grid Exit Sub End If 'carga do grid Gr_Grid.Col = 0 .Nome >= '" & (TB_Cidade." SU_Aguarde False. VGl_SQLop) If Not dynacont.Text) & Chr(255) & "' " End If Set dynatemp = db. VGl_SQLop) 'query do contador VA_Cmd = "Select Count(*) From CIDADE" If Len(TB_Cidade. "" Gr_Grid.com.Nome <= '" & (TB_Cidade.. formatar TB_Cidade. False 'rotina explicada na DICA ANTERIOR Gr_Grid.

o usuário vê X% da instalação completa.. se conhece o tamanho total dos arquivos (ou quantidade de arquivos) a serem instalados e qual o arquivo atual (no loop). é 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). false '. Num programa de instalação.com.PA_Status.BAS) a rotina SU_BarraPerc.Text = dynatemp("CodCidade") Gr_Grid.Col = 2 Gr_Grid.br 70 Gr_Grid. um número de 0 a 100 '100 = "desliga" a barra 'Acum = boolean.Text = dynatemp("UF") VA_Curr = VA_Curr + 1 dynatemp. o código acima apenas mostra a formação do Select Count e a chamada a SU_BarraPerc. demais lógicas '. acumula o anterior ou não (true/false) Static VA_Vez Static VA_SaveCor As Long If Acum Then Perc = Perc + F00. 2) Insira em um módulo (. Com isto. no MDIForm (aqui chamado de F00). Sub SU_BarraPerc (Perc As Integer.. 16.Text = dynatemp("NomeCidade") Gr_Grid. o DBGrid faz isto sozinho). Para usar um 3D Panel como barra de percentual.williamdsilva@aol. (tratamento de erro e formatações) End Sub Como esta rotina de carga de grid é enorme (e no VB4. por exemplo. "Erro de parâmetro _ em SU_BarraPerc" Exit Sub . com nome PA_Status.FloodPercent End If If Perc > 100 Or Perc < -1 Then MsgBox "Perc deve estar entre -1 e 100". ____________ 137 .. siga estes passos: 1) Insira um 3D Panel.Painel de Percentual Enviado por: Henrique Angelo Para mostrar um percentual.. Acum As Integer) 'recebe perc.Col = 1 Gr_Grid. Atribua Align = Alig Botton.MoveNext Loop 'desliga a barra de percentual SU_BarraPerc 100.

FloodType = 0 'none F00.Caption = "" F00. 255.FloodPercent = Perc VA_Vez = 2 'ou mais Else 'desliga barra .PA_Status.williamdsilva@aol.FontSize = 8.FontSize = 9.BorderWidth = 3 F00.PA_Status.PA_Status. basta passar o valor atual do percentual.PA_Status.PA_Status.PA_Status.altera o painel F00.BevelOuter = 2 'raised F00.BevelOuter = 1 'inset F00.ForeColor = RGB(0.ForeColor = VA_SaveCor F00.ForeColor = RGB(255.PA_Status.PA_Status.PA_Status.PA_Status.BevelWidth = 1 F00.PA_Status. a barra é preenchida de 10% em 10%.reestrutura painel F00. No exemplo abaixo.PA_Status.PA_Status.PA_Status. indicará se o percentual anterior será acumulado com este.PA_Status.FloodType = 1 'left to right F00.PA_Status.FloodShowPct = True VA_SaveCor = F00. 255)'branco End If 'mostra perc F00.ForeColor F00.PA_Status.PA_Status.BevelWidth = 3 F00.br 71 End If If IsEmpty(VA_Vez) Or VA_Vez = 1 Then 'liga barra .75 End If If Perc < 100 Then If Perc > 48 Then F00. 0)'preto F00. 'teste da barra de percentual Dim i As Integer .BorderWidth = 1 F00.FloodShowPct = False VA_Vez = 1 End If End Sub Para chamar a rotina.25 F00. O segundo parâmetro. 0.com.

139 . seu código ficou mais produtivo de ser mantido. WM_PASTE. False 'desliga a barra 138 . não importando o valor de retorno.hWnd. A função SendMessage. Ocorrem chamadas assim: Dim dummy As Integer dummy = SendMessage(Text1. 0.br 72 For i = 1 To 10 SU_BarraPerc (i * 10). byVal lParam As Any) Agora.GetModuleUsage em 32 bits Enviado por: Henrique Angelo Encontrei uma solução para o problema. por exemplo. é declarar a função como Sub e usar um alias (apelido). Uma alternativa. WM_PASTE. False MsgBox "Clique em OK para continuar" Next i SU_BarraPerc (100). o retorno não será utilizado). 0& Observe que.com. mas.Melhorando as declarações API (I) Enviado por: Henrique Angelo Muitas rotinas API são declaradas como função. 0. byVal msg as Integer. Outro exemplo é a função Shell (se o objetivo for chamar e não monitorar um programa externo.exe". o valor de retorno não é sempre utilizado. vbNormalFocus) On Error GoTo finished While True DoEvents AppActivate TaskID Wend Finished: On Error GoTo 0 . A TaskID retornada pela função Shell pode ser usada por AppActivate.williamdsilva@aol. da API GetModuleUsage não trabalhar em VB4 a 32 bits. byVal wParam as Any. depende da mensagem enviada. Assim: TaskID = Shell("DOSAPP. chame pelo nome declarado e não pelo original: SUB_SendMessage Text1.hWnd. Declare Sub SUB_SendMessage Lib "User" Alias "SendMessage" (byVal hWnd as _ Integer . 0&) A variável só foi necessária por causa da declaração.

Adicione o seguinte código no Form: Private Sub cmdToggle_Click() GetKeyboardState kbArray kbArray.BAS Public Const VK_CAPITAL = &H14 Public Type KeyboardBytes kbByte(0 To 255) As Byte End Type . cmdTurnOn.com.kbByte(VK_NUMLOCK) = 1 SetKeyboardState kbArray End Sub Private Sub cmdTurnOff_Click() GetKeyboardState kbArray kbArray.kbB yte(VK_NUMLOCK) = 1.williamdsilva@aol.Ativando Num Lock por um código Enviado por: Henrique Angelo 73 Coloque isto nas declrações gerais de um módulo .Ativando Caps lock por um código Enviado por: Henrique Angelo Coloque isto nas declarações gerais de um módulo . 0.br 140 . 1) SetKeyboardState kbArray End Sub Private Sub cmdTurnOn_Click() GetKeyboardState kbArray kbArray.kbByte(VK_NUMLOCK) = IIf(kbArray. cmdTurnOff) e um label.BAS Public 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.kbByte(VK_NUMLOCK) = 0 SetKeyboardState kbArray End Sub 141 .

kbByte(VK_CAPITAL) = 1.kbByte(VK_CAPITAL) = 0 SetKeyboardState kbArray Label1 = IIf(CapsLock() = 1. 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. 0.kbByte(VK_CAPITAL) = IIf(kbArray. cmdTurnOff) e uma labe l. cmdTurnOff.Já estou no ar? Enviado por: Henrique Angelo . "On". 1) SetKeyboardState kbArray Label1 = IIf(CapsLock() = 1. "On". coloque 3 command buttons (cmdToggle. "Off") End Sub 142 .com. "Off") End Sub Private Sub cmdTurnOff_Click() GetKeyboardState kbArray kbArray.kbByte(VK_CAPITAL) = 1 SetKeyboardState kbArray Label1 = IIf(CapsLock() = 1. "Off") End Sub Private Sub cmdTurnOn_Click() GetKeyboardState kbArray kbArray.br 74 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 Em um form. "On".williamdsilva@aol.

Pois. O controle disto no VB é feito através do objeto App. da Calculadora e de outros.TXT (incorretamente)diz: Type COMSTAT fCtsHold As Long fDsrHold As Long fRlsHold As Long fXoffHold As Long fXoffSnet As Long 'errado 'errado 'errado 'errado 'errado .caption = "Co&lar" + Chr$(9) + "Ctrl + V" na Sub Main ou no form_Load.br 75 Algumas aplicações para Windows podem ter várias instâncias.EXE e APILOD32. podem ser executadas repetidas vezes ao mesmo tempo no mesmo computador..Title App. como o QuickPack Pro (da Crescent). o File Manager e o Excel) ou segurança (como aplicações que usam banco de dados).Listas erradas de API Enviado por: Henrique Angelo Os utilitários APILOD16. Os sistemas comerciais (de banco de dados). serei fechado" 'se for a Sub Main.EXE acessam o arquivo WIN32API para passar os parâmetros de tipos de dados (Type Declarations) necessários para chamar funções Win32 API. Dim SaveTitle as string If App. Por exemplo: WIN32API.. 144 . True End End If O código acima deve ser a primeira coisa a ser executada na sua aplicação. ao invés de abrir uma segunda sessão do programa. É o caso do Bloco de Notas. Porém existem erros. em geral. atribua: mnuPaste. o texto do Clipboard será colado duas vezes. Existem programas cuja múltipla execução não é interessante.. por questões de pro dutividade ao usuário (como o Word. Isto também pode ser feito por APIs (FindWindow. 143 . segunda chamada ao mesmo programa. do Paint.Menu Colar Alternativo Enviado por: Henrique Angelo Se você usa alguns controles. é impossível atribuir CTRL+V para Editar -Colar." Me. Para manter a tecla de atalho. ou seja. ShowWindow e SetFocus. só podem ser executados em uma sessão ao mesmo tempo.Title = ". Assim.. a linha acima.com. obviamente. não existe 'as linhas abaixo fecham a segunda chamada e alternam para 'a primeira AppActivate SaveTitle SendKeys "% R". segunda chamada ao mesmo programa. mas.Caption = ".williamdsilva@aol. o Windows irá alternar para a sessão já aberta. da bilblioteca User). tem o mesmo efeito e é mais trabalhoso.PrevInstance Then SaveTitle = App.

.com. 1)) Numero(5) = Val(Mid(VA_CgcCpf. corretamente... 1)) Numero(8) = Val(Mid(VA_CgcCpf.CgcCpf. 3. 13. A função abaixo não é de minha autoria.Text ' If Fu_consistir_CgcCpf(Vl_CgcCpf) = False then ' MsgBox "( Cgc/Cpf Informado Não é um Cgc/Cpf Correto )" ' Me. 1)) . 2) Numero(1) = Val(Mid(VA_CgcCpf. "@@@@@@@@@@@@@@") VA_Digito = Mid(VA_CgcCpf. adivinhem . 1)) Numero(9) = Val(Mid(VA_CgcCpf. 8. 4. 9.CgcCpf. diz: Type COMSTAT bunch_Of_Bits As Long cbInQue As Long cbOutQue As Long End Type 145 . Os números de CGC e CPF possuem dígitos verificadores para. 1)) Numero(3) = Val(Mid(VA_CgcCpf.br 76 fEof As Long fTxim As Long fReserved As Long cbInQue As Long cbOutQue As Long 'errado 'errado 'errado End Type WINT31APITXT. 1.. 1)) Numero(4) = Val(Mid(VA_CgcCpf.SetFocus ' Exit Sub ' End if Fu_consistir_CgcCpf = False Dim VA_CgcCpf As String Static Numero(15) As Integer Dim VA_Resto As Integer Dim VA_Resultado As Integer Dim VA_SomaDigito10 As Integer Dim VA_resto1 As Integer VA_CgcCpf = Format(Vl_CgcCpf. 1)) Numero(7) = Val(Mid(VA_CgcCpf.Validando CGC e CPF Enviado por: Henrique Angelo Essa é brasileiríssima. verificar! Isto é obvio.williamdsilva@aol. mas. tentando passar a perna na gente"). 7. 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. 2. 1)) Numero(6) = Val(Mid(VA_CgcCpf. 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. achei no meu "baú" de código. 5. 1)) Numero(2) = Val(Mid(VA_CgcCpf. 6.

1)) Numero(14) = Val(Mid(VA_CgcCpf. 1)) Numero(12) = Val(Mid(VA_CgcCpf.br 77 Numero(10) = Val(Mid(VA_CgcCpf. 11. 1)) If Len(Trim(Vl_CgcCpf)) > 11 Then ' Cgc VA_Resultado = Numero(1) * 2 If VA_Resultado > 9 Then VA_SomaDigito10 = VA_Resultado + 1 Else VA_SomaDigito10 = VA_Resultado End If VA_Resultado = Numero(3) * 2 If VA_Resultado > 9 Then VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1 Else VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado End If VA_Resultado = Numero(5) * 2 If VA_Resultado > 9 Then VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1 Else VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado End If VA_Resultado = Numero(7) * 2 If VA_Resultado > 9 Then VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1 Else VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado End If VA_SomaDigito10 = VA_SomaDigito10 + Numero(2) + Numero(4) + Numero(6) If Mid(Str(VA_SomaDigito10). 14. Len(Str(VA_SomaDigito10)).VA_Resto .williamdsilva@aol. 10. 12. 13. 1)) Numero(11) = Val(Mid(VA_CgcCpf. 1) = "0" Then VA_Resto = 0 Else VA_Resto = 10 . _ End If If VA_Resto <> Numero(8) Then Exit Function End If VA_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 11 VA_Resto = VA_Resultado Mod 11 If VA_Resto < 2 Then VA_resto1 = 0 Else VA_resto1 = 11 .com.VA_Resto End If If VA_resto1 <> Numero(13) Then Exit Function End If VA_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 11 VA_Resto = VA_Resultado Mod 11 If VA_Resto < 2 Then VA_resto1 = 0 Else VA_resto1 = 11 . 1)) Numero(13) = Val(Mid(VA_CgcCpf.Val(Mid(Str(VA_SomaDigito10).

br 78 End If If VA_resto1 <> Numero(14) Then Exit Function End If Else ' Cpf VA_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 11 If VA_Resto > 9 Then VA_resto1 = VA_Resto .10 Else VA_resto1 = VA_Resto End If If VA_resto1 <> Numero(13) Then Exit Function End If VA_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 11 If VA_Resto > 9 Then VA_resto1 = VA_Resto .Print Spc(10). Este código falha em VB4. Retirando o último ponto-e-vírgula do primeiro print: Print Spc(10). currentX = 0 currentY = currentY +1 Print Spc(10). "Informe seu nome:".Problemas com o Print Enviado por: Henrique Angelo O código abaixo funciona em VB3: Cls Print Spc(10).com.10 Else VA_resto1 = VA_Resto End If If VA_resto1 <> Numero(14) Then Exit Function End If End If Fu_consistir_CgcCpf = True End Function 146 .Print Spc(10). "Informe seu nome:". "Informe seu nome:". . antes de Print para testar: Cls Debug. "Informe seu nome:" Acrescente Debug.williamdsilva@aol. "Informe seu nome:" currentX = 0 currentY = currentY +1 Debug.

o usuário. há um botão Default. muitos controles customizados (VBX/OCX) pecam neste detalhe importante. Notas do Fórum Access (Charles A. Nestes casos. "Informe seu nome:". o caracter espaço (ou nulo) pode não se encaixar no formato da máscara. Também é possível copiar os valores de controles que estejam corretos. Isto o ajudará a testar suas aplicações de cores.1x. que é o cliente. Depois. uma lista de alteração automática para as cores padrão (além do botão default). esteja atento para o significado das cores e sua harmonia (afinal. algumas possuem o formato # (aceitam somente números). 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). 2) No VB3. Müller): 1) É uma regrinha antiga.selected (-1) = False Isto não funciona em VB4. tente o esquema "deserto" no Windows 95. penteadeiras de camarim na tela não são desejáveis). Por Clint Walker* Na nova paleta de cores do VB4. 148 .TXT.Pinte meu mundo . existem 19 cores de sistema nas constantes de CONSTANT. define externamente (no Windows). Logo. Através do Painel de Controle. Nunca mude as cores que. ... pois. crie um outro esquema horroroso. mas cuidado. Este problema é resolvido por este código: vTemp = masked1. Isto impede o programador de limpar a text do controle diretamente (masked1.br 79 Ou mude o comando para: Print Space(10). pro cure por "Color Constants" ou "VBTranslateColor". ou "verão" no Windows 3. basta devolver a máscara original ao controle. Por exemplo. No VB Help. Verifique se a propriedade Appearance é 3D para obter melhores resulta dos.williamdsilva@aol. o "" não seria aceito.text = "" masked.com. a face do botão por exemplo. 147 . pode não ser cinza. 3) Observamos (no CCE e VBA) que o VB5 terá. Infelizmente.mask = "" masked1. que altera as cores do objeto selecionado para o padrão do Windows. O VB4 dispõe de 24 cores de sistema como constantes.Desmarcar todos os itens de uma lista Enviado por: Henrique Angelo Uma forma rápida de retirar qualquer seleção de uma listbox é: list1. ou ainda.mask = vTemp Removendo a máscara é possível limpar o texto. Copie o valor hexadecimal para a propriedade de cor de seu objeto se ele foi erroneamente redefinido (fora do padrão).mask masked1.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). nas cores padrão! Enviado por: Henrique Angelo Apenas após executar o último "make EXE". em sua paleta de cores. 149 . Uso isto no evento Data1_ValidationError quando adiciono um novo registro.text = ""). a menos que isto traga utilidade.

williamdsilva@aol.PA_Status.PA_Status. O problema é que o mouse se movimenta várias vezes no mesmo controle. Sub SU_Explica (oque As String) 'rotina em VB3." '. A barra de status poderá ser uma picture box com um label.Piscar ou não piscar Enviado por: Henrique Angelo 80 Geralmente.br 150 .Caption = oque End If End Sub A função usa uma constante (CG_EXPLICAPADRAO) que.PA_Status. _ Y As Single) SU_Explica "Grava as alterações no banco de dados.FloodType = 0 MainForm. contém uma frase genérica. Sub txtNome_LostFocus ( ) .Caption <> oque Then MainForm.FloodShowPct = False MainForm. 1)) & Right(oque.um painel 3D. basta verificar se a frase atual é diferente da frase nova." 'acrescenta ponto final End If 'muda a inicial para maiúscula If Len(oque) > 1 Then oque = UCase(Left(oque." Then oque = oque & ". para quand o não houver o que explicar sobre um form ou objeto. Criamos ainda uma função que controla a barra de status.1) Else oque = UCase(oque) End If 'altera a barra se o novo conteúdo for diferente If MainForm. usa um painel 3D oque = Trim(oque) If oque = "" Then oque = CG_EXPLICAPADRAO If Len(oque) > 1 And Right$(oque. um controle statusbar (VB4 -32 bits) ou . Len(oque) .com..." End Sub Pode ser utilizado também o evento GotFocus (para resposta ao teclado). 1) <> ". Para resolver este problema. você irá adicionar código n o evento MouseMove de controles e forms.PA_Status. Para chamar a função: Sub CmdOK_MouseMove(Button As Integer.como mais usado . ao criar uma ajuda de barra de situação (status bar help). X As Single. Global Const CG_EXPLICAPADRAO = "Pressione F1 para obter ajuda. Neste caso. Shift As Integer. o LostFocus deverá limpar a barra de status (como a frase genérica). fazendo a barra de status "piscar".

utilizam menus (?à Conteúdo) ou botões (Ajuda). Uma forma mais simples. apli cativos da linha . 2) com o comando Stop (apenas como interrupção na depuração). principalmente quando se deseja automatizar tarefas. na biblioteca User (como sugere o exemplo SAMPLES\ICONWRKS). A solução ao programador pode ser o uso de API.Capturando parâmetros Enviado por: Henrique Angelo Todos se recordam das velhas linhas de comando nos programas DOS: dir /s. como diferenciar o End "puro" dos outros? Basta chamar sempre uma função pública (codificada em um . No Windows. os programas já sabiam o que fazer ao serem chamados. Somente esta função terá End. Public Sub SU_AbortaSis End 'único local para o End End Sub Private Sub Form_Unload (Cancel As Integer) . Imagine se você precisar depurar um programa para descobrir quais os pontos em que ele é encerrado. Muitas porém. mysys /?. O problema do End é que esta palavra faz parte de outros comandos como End Sub e End If (fechamento de blocos).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..txt entre outros. facilitando o controle do código. SU_GravaConfiguracoes SU_AbortaSis End Sub 153 . myeditor myfile. pkunzip -v. fecha todos os arquivos e limpa todas as variáveis.BAS) que "substituirá" o End. del /p.williamdsilva@aol. Este último. com a função WinHelp. 3) com o comando End. é simular o pressionamento de F1: Sub AjudaConteudo_Click () SendKeys "{F1}" End Sub 152 . Com estes recursos.br 81 SU_Emplica "" End Sub 151 . Nestes casos deve aparecer a página de a juda indicada na propriedade HelpContextID do form ou controle.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 fo rm principal. O próprio Registry do Windows passa os devidos parâmetros ao executar uma aplicação associada a um tipo de arquivo.. Assim. este recurso ainda é utilizado.com.

testes para verificar se o sistema pode ou não ser inicializado. Mas descobri. nas propriedades. criei um atalho para este BAT.BAT.Sub Main. iniciando um projeto sem interface Enviado por: Henrique Angelo Sub Main. .show End Sub 155 . é o de iniciar o projeto executando uma rotina sem form. Para "capturar" a linha de comando com os parâmetros de um executável em VB. às vezes ocorre que. com este conteúdo: EXIT No Windows 95.williamdsilva@aol. nem sempre utilizada. um programa torne o sistema operacional instável. Uma alternativa. No Visual Basic. o recurso é bastante simples. Este caminho é muito mais rápido que um reboot. uma forma mais prática: Criei um arquivo DOS Batch chamado RESTART. recentemente. Primeiro. com abertura de banco de dados. etc. Sub Main 'rotinas de inicialização e leitura de opções 'logon. Costumava derrubar o Windows 95 e reiniciar para limpar a memória de todos os VBXs e DLLs. em segundo plano.BAS). Alguns exemplos: 1) Processo de inicialização muito longo.Show 'default. uma rotina com este nome. 2) Quando o sistema rodará em "background". Este sistema não terá janelas (forms) para interação com o usuário.br 82 Office podem ser disparados para abertura e impressão de arquivos ou execução de macros. basta incluir em um dos módulos de código (.Descarregando DLLs fora de controle Enviado por: Henrique Angelo Quando uso VB em Windows 95.) Depois.Show 'usuários avançados Case "/M" frmMedios. como Program / Advanced.Options à Project à Start Up Form = Sub Main. abertura de banco de dados e restante da inicialização 'mostra o primeiro form form1. se informa ao VB que o projeto iniciará com uma Sub Main (esta informação é passada nas opções de projeto . ou seja. leitura de Registry ou arquivos INI. iniciando um projeto sem interface Nem sempre é necessário ou útil que um sistema (projeto VB) inicie com uma janela (form).Show 'usuários médios Case Else frmBasico. basta utilizar a função Command: Select Case UCase(Trim(Command$)) Case "/A" frmAvanc.com. no seu disco rígido. O modo DOS é selecionado. usuários novatos End Select 154 .

Veja um exemplo: Set db = Workspaces(0). dependendo do sistema operacional.Index = "PrimaryKey" DB. no Windows 95. inclua o método Idle dbFreeLOcks após o recordset ser aberto. Programação é.OpenRecordSet("Customer_Master".O desafio de criar Add-ins Enviado por: Henrique Angelo Escrever add-ins (recursos adicionais) para o VB4 pode ser desafiador. quando quiser escrever uma mensagem. As mensagens são diversas. seja ele compilado pelo VB. podem ser causados GPFs. aparecem mensagens como "Este programa causou um erro e vai ser encerrado" ou "se o problema persistir. blz?" Utilizando o sintaxe: Chr(charcode). inclua -o após ter definido a propriedade Index. mas o resultado é o m esmo. do you want to remove it from the list of add -ins?" Após isto. 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) . Podem aparecer várias mensagens.br 83 Por Michael J. Dyer 156 . ou até mesmo "alterar" o código de um executável (somente as "mensagens"). currently record is locked by user '' on machine ''"). o erro citado ocorre. ou em qualquer outra linguagem. Se for um table recordset. você terá que executar novamente o add -in para registrá-lo como relacionado ao VB. predominantemente.1x. No Windows 3.Usando o CHR() para ocultar "mensagens" Enviado por: Gerson Keiti Motoyama Para quem não sabe.Engine. por um usuário de nível intermediário.Opendatabase("Test.FileName no evento ConnectAddin da Conector Class. é possível "espiar".Evitando Erros de Atualização em Bases Access Enviado por: Henrique Angelo Evite o erro de acesso 3260 ("Couldn't update. O acesso é realizado por objetos recordset (como table ou dynaset). dbOpenTable) TB. como AcitveProject.com. 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.mdb") Set TB = Db. Para evitar este problema. 2) Conectando mais menus ou submenus que você desconectou. uma ciência exata e muitas "regras não documentadas" são uma real necessidade ao se criar um add-in.williamdsilva@aol.Idle (dbFreeLocks) 157 . Por exemplo. contate o fornecedor". Se você não tomar cuidado. o VB poderá "estranhar" algumas coisas e abortar. que ocorre quando duas ou mais aplicações acessam a mesma tabela de uma base de dados Access (Jet). por exemplo do tipo: msgbox "Olá. Vejamos dois casos destes erros: 1) Referenciando uma propriedade da VBIDE Instance Object. Este erros ocorrem quando a IDE está sendo descarrega da (unloaded) e será executada numa posterior abertura do VB com o aviso "xxxxx add-in could not be loaded. 158 . infelizmente. ou pelo menos para dificultar alguma alteração. recompensador e melindroso. sobre uma tabela que contenha uma chave (primária ou não). Para que isso não ocorra.

Porém.williamdsilva@aol. Se você criar um servidor OLE remoto. é. e o VB não iniciará outra cópia de si mesmo para carregar o servidor novamente. mas.Clear On Error Resume Next If TypeOf ob Is TextBox Then J=1 End If Select Case Err. 161 . Cada vez que a classe for chamada. um objeto deve ser "setado" (definido) antes de ser referenciado.Number Case 91 'error 91 = object not set IsSomethig = false Case 0 IsSomething = true Case Else '. a aplicação tentará criar outra instância do servidor. A solução.Passe nothing aos forms com cautela Enviado por: Henrique Angelo ... O servidor estará rodando em tempo de desenho. outro erro ocorreu End Select On Error GoTo 0 End Function 160 .br 84 159 . também permite depurar (debug) o servidor e a aplicação cliente ao mesmo tempo.com.Determinando se um objeto foi definido (Set) Enviado por: Henrique Angelo VB4 providencia uma série de novas capacidades de uso de objetos. Isto tornará o debugging muito mais interessante. Não se esqueça de voltar para Creatable SingleUse antes de compilar o servidor OLE. altere a propriedade Instancing para Creatable SingleUse. definir Instancing = Creatable MultiUse para uso nos testes. Por exemplo: Public Function IsSomething (ob As Object) As Long Dim J as Long Err. temporariamente.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. A única forma de verificar se um objeto já foi definido é através do código de erro (91).

Eliminando o IF quando possível Enviado por: Henrique Angelo . 163 .com. 6) Crie o(s) usuários e o(s) grupo(s) de usuário. com uma não nula Workgroup ID. siga estes passos: 1) Use o Access Workgroup Administrator para criar u m novo grupo de trabalho. adicione-o no grupo de Administração.show Set Form2 = nothing Form2. irá colocar o módulo em um estado confuso. 5) Execute o Access Security Wizard (para o Access 2. A Forms Collection irá conhecer as duas instâncias. Executando este recurso para um form já carregado. com a estrutura For Each (não existente no VB3) é possível se conseguir o Nothing.count & " forms carregados" Unload Form2 Unload Form2 A segunda linha do código tornou form2 nothing. conectando-se como novo usuário. Para contornar este problema. versão 2.Adicionando segurança a uma base de dados Jet Enviado por: Henrique Angelo Para dar segurança a uma base de dados Jet (. copie de www. Private Sub Form_Unload (Cancel As Integer) Dim Form As Form For Each Form In Forms If Form Is Me Then Set Form = Nothing Exit For End If Next Form End Sub 162 .MDB). e altere a senha. em VB4.0 (Access 7/VB4-32 bit). definindo seus privilégios.microsoft. Remova a conta Admin do grupo de administradores.show MsbBox forms. Veja: Form2.5 (Access 2/VB3/VB4 -16 bit) ou versão 3. mas o segundo use do form2. Não é possível executar Set Me = Nothing.br 85 É uma boa idéia passar o valor nothing a variáveis de form para recuperar memória alocada pelo módulo. 7) Não defina nenhuma permissão para o Admin. 4) Reinicie o Access. com os privilégios de administrador.com/accdev).williamdsilva@aol.show irá mostrar uma segunda instância do form2. entretanto. mas apenas uma será descarregad a (Unload Form2). no evento Form_Unload. 2) Inicie o Access e altere a senha para o usuário default Admin. Mas. esteja certo que o form está descarregado. 3) Crie um novo usuário.

Veja: If (age > 18 and sex = "M") and (NecessitaSeContigente = true ) Then ServicoMilitar = true Pode 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 ExecuteDemissao Poderia 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 . 2) Este truque pode ser usado para várias validações. é criar um pequeno Se lect Case. ainda mais fácil.williamdsilva@aol.br 86 Se você atribui true ou false para uma variável (ou propriedade). "ZZ" ProcesseEmpregado . Category = trim(Category) If (InStr(1. "M2". ponto -e-vírgulas etc. basta usar espaço (apenas) como separador e testar o tamanho da categoria. separando os valores válidos por vírgulas: Select Case Category Case "CM". Category)) > 0 then ProcesseEmpregado End If Isto torna o código mais rápido e mais fácil de ser entendido. ValidValues. "P1". Por Jaspreet Singh* Notas de Redação (Charles A. Category)) > 0 and Len(Category) = 2 Then '.com. após testar certas condições. você poderá utilizar espaços ou outros separadores como vírgulas. " P". 3) Outra forma.. como ValidValues = "abcdefghijlmnopqrstuvxz". "2 P" e outras expressões inválidas.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 If Poderia simplificar para: Dim ValidValues as string ValidValues = "CM M2 P1 ZZ" If (InStr(1. Para corrigir esta falha.. ValidValues. Müller): 1) Este teste ainda aceitará "C". por conterem o separador ou terem tamanho inválido. poderia fazê-lo sem o IF. Note que separei os valores com " " para não aparecerem strings como "CMM2P1ZZ".

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.williamdsilva@aol. . 1) Faça uma cópia do seu fonte. Quando o usuário termina de preencher um campo em um terminal 3270. 5) Selecione o botão Add Profiler Code.ActiveControl. 6) Compile (make EXE) o programa (MYAPP.MaxLenght) then Sendkeys "{TAB}" End If End If End Sub 166 .Use o Code Profiler para depuração (debug) Enviado por: Henrique Angelo Algumas vezes. O addin Code Profiler poderá ajudá-lo. 3) Selecione o(s) arquivo(s) de código a serem analisados.ActiveControl.EXE). 4) Selecione a opção Line Hit Count.KeyUp (keycode as integer.com. um erro de execução se manifesta apenas após a criação de um EXE e não em tempo de debug.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). 2) Selecione o add-in Code Profiler.Text) = (Me. Sub Form_KeyPress (keyascii as integer) If KeyAscii = 13 or KeyAscii = 9 Then KeyAscii = 0 End If End Sub 167 . Sub Text1.br 87 End Select 165 . shift as integer) If keycode > 47 and keycode < 123 then If Len(Me. o foco é imediatamente transmitido para o próximo campo.

... 168 .. '. você deve adicionar esta chave de Registry e executá -la no RegEdit..Otimizando consultas no Jet 3 Enviado por: Henrique Angelo Se você precisa analisar a performance de uma query (consulta) no Jet Engine 3..OUT. 8) Volte ao Code Profiler e selecione View Results no menu File.0 (banco .williamdsilva@aol. 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" '. 169 .br 88 7) Execute o seu código com erro..MDB). Queries e bases de dados bem definidas irão gerar planos que. End If End Function Este código funciona em VB3 e VB4. Bases e consultas mal definidas exibem apenas uma leitura de tabela.. O Jet irá gerar um arquivo chamado SHOWPLAN. não se esqueça de alterar o valor para OFF ao term inar. O VB4 adiciona ainda.0\Engines\Debug Para a nova chave Debug. 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 '. . além de controles e forms...com. 'case .. que irá mostrar planos de execução de queries associados com sua aplicação. Veja a última linha que foi executada ao ocorrer o erro. através de um plano de execução de consultas.. Como estes arquivos podem se tornar muito grandes rapidamente. adicione o nome JETSHOWPLAN (tudo maiúsculo) e valor ON. ElseIf TypeOf ctl Is CommandButton Then '.Identificando um controle genérico Enviado por: Henrique Angelo Quando uma rotina pode trabalhar com muitos tipos de controles diferentes. A diferença é que no VB4. indicarão o uso de índices e/ou a tecnologia Rushmore. Case "CommandButton" '. Você terá que executar seu código em modo debug enquanto olha os resultados do Code Profiler. qualquer objeto válido pode ser identificado. \\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.

ao lado do nome do controle).Date Print "Preço de Venda: " & YourObject. 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.williamdsilva@aol. Geralmente se resolve assim: If Not IsNull(myrecordset.myfield) ' para numéricos .Determinando a classe de qualquer objeto Enviado por: Henrique Angelo No VB4.myfield) Then myvar = myrecordset.NumberOfLegs ElseIf TypeOf YourObject Is CHouse Then Print "Object Type: Casa" Print "Número de portas: " & YourObject. poderá não ser 0 (numérico) ou "" (string).NumberOfDoors End If 'impressão das propriedades de mesmo nome Print "Data de Venda: " & YourObject.Price '. o retorno de uma variável. aparecem na Properties Window (janela de propriedades.myfield Else myvar = "" 'myvar = 0. no ambiente do VB.Conversão de Nulos Enviado por: Henrique Angelo Em consultas a bancos de dados. no caso de numéricos End If Uma forma mais simples émyvar = "" & myrecordset. 170 ..myfield Ou myvar = val(0 & myrecordset. quando nula. o comando TypeOf trabalha com qualquer objeto válido.com. End Sub 171 .br 89 End Select End Function Os nomes das classes de controle..

este mui complexo código. No Windows 95 (VB 4-32 bits) . 173 . o SWAP é simulado com strings.Hide) Defina as propriedades Left e Top conforme desejar e inicie a common dialog deste form. Private Sub Form_Load( ) Dim a. mas funciona com outros tipos de dado. que usei para ordenar um arquivo.Posicionando uma Common Dialog Enviado por: Henrique Angelo Ficou triste ao ler a documentação do VB. (FrmDummy_OpenSaveAs.b As String * 4 Dim c As String * 4 ' variável para alternação (Swap) a = "João" b = "Francisco" Debug. VB3 e VB4. Na rotina abaixo. Como o form hide (oculto). BEEP: BEEP: BEEP Ao depurar com passo (F8). No VB4. o comando SWAP do Qbasic não havia sido implementado. . palavras reservadas seguidas de dois pontos (:) são consideradas labels (rótulos de desvio).williamdsilva@aol. exceto no VB4. 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. em Qbasic. você irá ouvir três Beeps.br 172 .Uma história de três beeps Enviado por: Henrique Angelo 90 Seus programas não estão executando instruções em VB4 como executavam em VB3? Tente isto . Assim funciona: Beep Beep Beep E você ouvirá os tão esperados três beeps. isto é imperceptível para o usuário.com.Print "Antes do swap: " & a & " " & b c=a a=b b=c Debug.Print "Após o swap: " & a & " " & b End Sub 174 . a common dialog irá aparecer na posição do form que a chamou.Lembra-se do SWAP? Enviado por: Henrique Angelo Fiquei surpreso quando notei que no Visual Basic.

williamdsilva@aol. Uma dica é criar uma função de código VB que chama a API. usando o novo método NewPassword (database object). Entretanto.Simplificando chamadas API através de funções próprias Enviado por: Henrique Angelo Algumas chamadas à função API (DLL) são bastante complexas. você poderá usar tanto o recurso de DB Password (senha de BD) como o de workgroup (grupos). pois. Este sistema é mais simples de ser utilizado mas é facilmente comprometido. que dará mais segurança). ByVal lpDefault _ As String. Manipule uma DB Password no VB. com códigos como este: Dim wrk As Workspace Dim db As Database Set wrk = DBEngine.NewPassword "".OpenDatabase("MYDB. VL_Key As String. _ ByVal lpFileName As String) As Integer A chamada da função ficaria assim: Global Const Ini_File = App.com. VL_FileName As String Dim VL_SizeHandle As Integer. a complexidade da API só irá aparecer uma vez. Este sistema disponibiliza uma senha para abertura da base de dados .Criando senhas para banco de dados Enviado por: Henrique Angelo 91 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. 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.true) 'note que a base deve ser aberta como exclusiva 'alterando a senha atual (em branco) para "NewPass" db."NewPass 177 . ao mesmo tempo (isto é. ByVal lpReturnedString As String. Workspace(0) Set db = wrk. ByVal lpKeyName As Any.br 176 .. VL_Size As Integer Dim VL_Return As String.. captura uma configuração de arquivo INI.INI) '. a função GetPrivateProfileString que. ByVal nSize As Integer. Por exemplo.path & "\Myapp. Declare Function GetPrivateProfileString Lib "Kernel" (ByVal _ lpApplicationName As String.MDB". Assim. todos os usuários possuem a mesma senha. VL_Valid As Integer Dim Va_Msg As String Const CL_Default = "" 'retorno no caso de não encontrar VL_Sec = "options" .

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_FileName As String Dim VL_SizeHandle As Integer. VL_Key.williamdsilva@aol. A API não retorna a string procurada e sim um buffer. um exemplo de função "tradutora" de API: Function FU_Le_MeuIni (VL_Sec As String. 30) Abaixo. "lastuser".1 Kernel) GetPrivateProfileString On Error GoTo Erro_LeMeuINI Dim VL_Return As String.. VL_SizeHandle..INI" . 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: Global Const Ini_File = App. 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.com. CL_Default. _ VL_Return.path & "\Myapp.INI) '. CL_Default. VL_Valid) Exit Function 'ou Exit Sub Erro_LeMeuINI: VA_LastUser = CL_Default Nota-se uma complexa e grande quantidade de código.. VL_FileName) VA_LastUser = Left$(VL_Return.br 92 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. VA_LastUser = FU_Le_MeuINI ("options".. VL_Key As String. Dim VA_LastUser 'chamada a API para capturar o conteúdo de "lastuser" na seção "options" Global Const Ini_File = "MYAPP. VL_Key.

o argumento lParam é. VL_SizeHandle. Pressione SHIFT e use as teclas de navegação para alterar o tamanho. B . 'rola uma caixa de texto em "HO" linhas 'horizontalmente e "VE" linhas verticalmente 'obs. EM_LINESCROLL.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. EM_LINESCROLL.br 93 VL_Return . você pode utilizar mouse e teclado para obter melhor precisão.Melhorando as declarações API (II .hWnd. 179 .: isto não funciona corretamente longValue& = HO * 65536 + VE . VE Este truque funciona.Quando você desejar alterar o tamanho de um controle: 1._ lParam2) A chamada passa a ser: SUB_SendMessage2 Text1. Esta dica serve também para Access 2 e 7 (95). byVal wParam as Any. na declaração Declare Sub SUB_SendMessage2 Lib "User" Alias "SendMessage" (byVal hWnd as _ Integer. A . SUB_SendMessage Text1.Quando você desejar mover um controle: 1. na verdade. considerado uma combinação de dois valores (words) . 0. VL_FileName) FU_Le_MeuIni = Left$(VL_Return. o conceito de criar funções "traduzidas" ou "facilitadas" de API é aplicável a qualquer versão do Visual Basic. VL_Valid) Exit Function Erro_LeMeuINI: FU_Le_MeuIni = CL_Default Resume Next End Function A função usada como exemplo é do VB3. HO. Por Chris Kunicki. 178 . A solução é dividir o número long de lParam em dois.. byVal lParam1%. 0. pois um valor long integer na "pilha" corresponde a combinação de dois valores word combinados. Mas. longValue O código acima não trabalha corretamente se HO for positivo e VE for negativo.hWnd. repassada por John Chmela (VB Developer's Network)* . Pressione CTRL e use as teclas de navegação para alterar a posição. Selecione-o 2.williamdsilva@aol. A mensagem EM_LINESCROLL pode rolar uma text box multilinha.com. podendo ser usada em VB4 se sua aplicação for em 16 bits. byVal msg as Ao desenhar um form. contém o número de linhas para rolar horizontalmente.Mova e redimensione controles com precisão Enviado por: Henrique Angelo Integer .. a primeira word (low word) contém o número de linhas para rolar verticalmente e a segunda (hight word). Quando uso algumas mensagens em particular. Selecione-o 2.

então.williamdsilva@aol. Mas. Basta selecionar. mas. 1) = "A" ' substituindo caracter End If 181 .dll" Alias "GetUserNameA" _ . 180 . respectivamente . Selecione o(s) controle(s) e clique no botão "cadeado". passando o mouse no form. 2.RecordSet. você sabe como usar o Mid para substituir caracteres no meio de uma string? O Mid é uma pequena excentricidade do VB. top. 2.RecordCount Then DBGrid. ajustar. é possível mover ou selecionar os controles com maior cuidado (para alterar várias propriedades ao mesmo tem po. height e width . ou seja.Alterações com Mid Enviado por: Henrique Angelo Você provavelmente já conhece a função e o comando Mid. D . O VB4 possui o recurso de trava (lock) de tamanho e posição em t empo de desenho. uma parte da string usada como parâmetro. y' (eixo y do topo para baixo) . altera um de seus próprios argumentos. C . h (altura) e b (base).Bookmark End If End Sub 182 . alguns dados abaixo. 2. frames e picture boxes).com. por exemplo).correspondentes a x. 1) = "O" Then Mid(mystring. pois. mas.Mostra o nome que foi usado pelo usuário para se logar no Win95/NT Enviado por: Henrique Angelo Declare Function GetUserName Lib "advapi32.SelBookmarks.br 94 Nota da Redação: Os autores informam que a dica (A e B) se aplica ao VB3. na barra de ferramentas. Acrescentamos. ainda. observe: Dim mystring as String mystring = "SOME STRING" If Mid(mystring.Add _ Data1. via digitação de valores.na Janela de Propriedades ou Janela de Código.Evitando acidentes 1. não funciona. Esta tarefa é um pouco árdua. Isto não se aplica a controles contidos em outros objetos (como painéis.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.RecordSet. que retorna uma substring com um número especí fico de caracteres. O VB3 não possui o recurso de "cadeado".Maior precisão Use os valores numéricos de tamanho e posiç ão: left. isto economi za uma série de instruções de concatenação. uma área em volta dos controles. ByVal LasRow As Integer) If Data1. desenhe o controle com medidas aproximadas p ara depois. Mas.

com.Movimentando um label pela tela Enviado por: Henrique Angelo Inicie um novo projeto. intpos . 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. coloque um label(name=Label1) e um timer(name=Timer1).williamdsilva@aol. 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.enabled = true . vbNullChar) If intpos > 0 Then ClipNull = Left(InString.1) Else ClipNull = InString End If End If End Function 183 . Nas prorpiedades do timer coloque: Interval = 1 Enabled = False No Form_Load() timer1.br 95 (ByVal lpBuffer As String.

br 96 No Timer1_Timer() While Label1.Count > 1 i = Forms.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.left <= 5000 Label1.Count .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.Text = "" Next Controle End Sub 185 .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: .MDIChild Then Unload Forms(i) Wend End Sub 186 .left + 2 wend 184 .left = label1.Controls If TypeOf Controle Is TextBox Then Controle.williamdsilva@aol.1 If Forms(i).com.

williamdsilva@aol. ByVal fInherit As Integer. lpProcessAttributes As Any.dll" (ByVal dwAccess As Long. lpThreadAttributes As Any. 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 . ByVal lpCommandLine As String. ByVal dwCreationFlags As Long.com. ByVal lpCurrentDriectory As String. lpStartupInfo As STARTUPINFO. ByVal hObject As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long. ByVal bInheritHandles As Long. lpEnvironment As Any.br 97 Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String. lpProcessInformation As PROCESS_INFORMATION) As Long Private Declare Function OpenProcess Lib "kernel32.

Utilize o 'With Statement' para não ter que repetir nomes de objetos no código. Click OK to end it.Evite deixar espaços (caracteres) no código. "User" 189 .Usando UNLOAD e HIDE Enviado por: Gerson Keiti Motoyama Use o Hide para apenas esconder o formulário. "Gerson" SaveSetting "MyApp".cb = Len(sInfo) 98 success& = CreateProcess(sNull. então use o Unload. ByVal 0&. para salvar o nome e n.Utilize o Registro do Windows Enviado por: Gerson Keiti Motoyama Armazene qualquer informação no registro do Windows.Deixe seu programa menor Enviado por: Gerson Keiti Motoyama Algumas dicas para diminuir o tamanho do seu arquivo compilado: ."User". sInfo. "Tel") Se quiser excluir: DeleteSetting "MyApp".html"." 187 . NORMAL_PRIORITY_CLASS. 1&.williamdsilva@aol. e depois retorne para ser utilizado no programa. "12345678" E para retornar este valor ao programa: Nome = GetSetting("MyApp".br 3-Agora coloque no Command1_Click: Dim pInfo As PROCESS_INFORMATION Dim sInfo As STARTUPINFO Dim sNull As String sInfo. "Name") Telefone = GetSetting("MyApp". "Name"."User". "notepad. ByVal 0&.com.hThread) ret& = CloseHandle(pInfo. Mas se não quiser mais utilizar os dados alterados no formulário pelo usuário. . sNull.hProcess. . 0&) ret& = CloseHandle(pInfo. ByVal 0&. de telefone do proprietário do programa. que estará realmente descarregando. sendo que a propriedade Visible do formulário recebe o valor False. Por exemplo."User". pInfo) MsgBox "Notepad has been started. "Tel". 188 .exe e:\anexis\vbpage\vbisland."User". faça assim: SaveSetting "MyApp". e voltando aos valores padrões definido no código." ret& = TerminateProcess(pInfo.hProcess) MsgBox "Notepad has been shut down.

williamdsilva@aol. para q uem vc destrubuiu um programa. por um usuário de nível intermediário. blz?" .com. 16.Number & Chr(10) & Err. infelizmente. receber mensagens de erros do tipo: Run -time error. não tem diferença nenhuma. coloque: MsgBox "O (Nome do programa) causou um erro desconhecido. o seguinte: Declare Function GetWinPlatform Lib "VB5STKIT. para o programa.Como detectar erros inexplicáveis? Enviado por: Gerson Keiti Motoyama É comum as pessoas. . ou pelo menos para dificultar alguma alteração.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 .br 99 . Portanto. "Erro Desconhecido" 191 . seja ele compilado pelo VB. retire-o ao compilar.BAS.exe. quando for compilar.Usando o CHR() para ocultar "mensagens" Enviado por: Gerson Keiti Motoyama Para quem não sabe. embora sejam úteis. ou em qualquer outra linguagem. são uns ocupadores de espaço. 190 . retire todos os comentários e salve então em um *.Se seu código possuir estruturas de controle multin iveladas. Informe as _ seguintes 'instruções de erro' ao desenvolvedor :" & Chr(10) & _ Err.Como saber se o programa está rodando no Windows95 (ou em suas futuras versões)? Enviado por: Gerson Keiti Motoyama Insira no módulo . e em seguida ser finalizado sem saber a origem em que causou o erro. quando quiser escrever uma mensagem. Mas não salve no projeto. Mas não salve no projeto. se tiver muito deles. por exemplo do tipo: msgbox "Olá. Para que isso não ocorra. 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.Os comentários. ou até mesmo "alterar" o código de um executável (somente as "mensagens").Description & Chr(10) & Err.Source & _ Chr(10) & App. é possível "espiar". Afinal.Revision.

Os comandos são: AddItem. 1 . Reload. e um atalho dentro dela.Crie um modulo.Criar Atalhos no Menu Iniciar usando DDE Enviado por: Antonio f.1" & ")]" Se quiser que apareça Minimizada.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. que também vale para Win95. etc). para se criar uma pasta no menu iniciar. CreateGroup.1. usuários registrados. Calculadora)]" Text1. cor do form . No evento Click do Botão.br 100 Utilizando o sintaxe: Chr(charcode).exe. 2. Marques Junior Uma maneira fácil de criar atalhos no menu iniciar é usando os comandos DDE usados anteriormente no Windows 3. mude o parâmetro para 2. Por exemplo.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 . 194 .williamdsilva@aol.com.LinkTopic = "Progman|Progman" Text1. 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. e local das imagens. No evento Load do Form. Crie um Form adicione uma TextBox e um CommandButton. ShowGroup. DeleteGroup. faz -se o seguinte: 1. DeleteItem.LinkMode = 2 End Sub 3. escreva o código: Sub Command1_Click cmd = "[CreateGroup(Teste)]" cmd = cmd & "[AddItem(c:\windows\calc. ReplaceItem. escreva o código: Sub Form_Load Text1. 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 .linkexecute cmd Se por acaso você quer exibir uma pasta do menu Iniciar existente defina a string cmd como: cmd = "[showgroup(" & "Acessórios" & ".

Sub Rotina Para Gravar as Informações A=FreeFile Open "preferencias.Text = RTrim(vPreferencias.Sub Rotina Para Ler as Informações A = FreeFile Open vArquivo For Random As #A Len = Len(vPreferencias) 'Abre o arquivo Get #A.vCorDeFundo) txtImagemDeFundo.Text = RTrim(vPrefetencias.Text = RTrim(vPrefetencias.Text) vPreferencias.dbLocalFile) txtNome.vRegistroDoUsuario) txtCorDeFundo.br 101 End Type Global vPreferencias As record 2.vCorDeFundo = RTrim(txtCorDeFundo.Text) vPrefetencias.Verificar precisão a resolução do monitor Enviado por: Anderson Calixto É muito simples a rotina que verifica com precisão a resolução do monitor para VB4. txtLocalDoBanco.com. vPreferencias ' Faz a Gravaçao do arquivo. 1.Text) Put #A.williamdsilva@aol.Text) vPrefetencias.vImagemDeFundo = RTrim(txtImagemDeFundo.dat" For Random As #A Len = Len(vPreferencias) 'Abre o arquivo vPreferencias.0 usando o Sistema API: 'Declaração da Função de busca da Resolução Declare 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 . vPreferencias ' Faz Leitura do arquivo.0 e VB 5.dbLocalFile = RTrim(txtLocalDoBanco. 1.Text = RTrim(vPreferencias. Close #A 3.vRegistroDoUsuario = RTrim(txtNome.vImagemDeFundo) Close #A 195 .

Assim que ele for carregado aparecerá uma caixa onde você deverá o nome e o caminho completo do arquivo . ainda. ByVal szApp As String. Caso vc coloque um valor nulo.Configurar Porta Enviado por: Julio Gavioli . remova o "Private"): Private Declare Function ShellAbout Lib "shell32. 0.williamdsilva@aol.AVI Enviado por: Felipe Maion Garcia Como visualizar um vídeo . 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$. a funcao ira colocar o icone padrao do Windows.: ShellAbout Form1. ByVal szOtherStuff _ As String. Byval wReturnLen%.ico) que esteja em um objeto Picture ou Image.dll" Alias "ShellAboutA" _ (ByVal hWnd As Long.Icon Obs. tocar sons MIDI e . visualizá-los em tela cheia.com.No evento Load do form. A função API mciSendString serve para manipular recursos de multimidia. siga os passos a seguir : 1 . pode -se. 197 .: vc pode utilizar no ultimo parametro uma imagem(tem que ser no formato . Para obter este efeito.Declare a função mciSenString em um módulo de código: Declare Function mciSendString lib "MMSystem" (byval lpstrCommand$. como visualização de vídeos . "Meu Programa". byval lpstrReturnStr as Any.Video . Nas declaracoes gerais vc coloca(se vc colocar em um modulo. 0&. "Desenvolvido por: Mim".WAV. 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.br 102 End Sub 196 . Em relação aos vídeos.Janela de Sobre Enviado por: Julio Gavioli Esta API é muito interessante: ShellAbout. byval hCallBack%) as Long 2 .hWnd.AVI. 0&) Rode o programa. Form1.AVI a ser visualizado. Com ela vc pode abrir a janela padrao de 'sobres' do Windows. 198 .AVI em tela cheia.

Ela pede 3 parametros: 1) Nome do servidor 2) Handle da janela 3) Nome da porta Ex. Form1.@@@/@@@@ -@@"). Q_Cep) End Function ' Uma função que formata CIC e outro exemplo de If Public Function FormataCIC(Q_Cic As String) As String FormataCIC = IIf(Len(Q_Cic) > 11. "@@. _ Format(Q_Cic. "@@@.@@@.br Seria muito legal se tivessemos uma area so para API!! 103 Para vc configurar uma das portas do seu computador. _ Format(Q_Cic.hWnd. vc precisa utilizar uma API: ConfigurePort(Declare Function ConfigurePort Lib "winspool. "COM1" Substitua "COM1" pela porta que deseja configurar! Para certificar se a funcao funcionou.Funções práticas Enviado por: Sirlon Farnei J. Oliveira ' Uma função que formata CEP e um If sem um End If Public Function FormataCEP(Q_Cep As String) As String FormataCEP = IIf(Len(Q_Cep) > 7. ByVal hWnd As Long. ByVal pPortName As String) As Boolean). Format(Q_Cep. 0.williamdsilva@aol.: ConfigurePort "".drv" Alias "ConfigurePortA" (ByVal pName As String. 199 .com.@@@ -@@")) End Function ' Uma função que testa entrada de teclado para somente números Public 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. verifique se ela retornou uma valor igual a 1 ou True. KeyNum) End Function ' Uma função que testa entrada de valores ou percentuais (funciona em conjunto com a função Testa_NumAbs) .@@@. "@@@@@ -@@@").

"Î" Mid(QTexto. y. X. "Ê" Mid(QTexto. "î". "ô". 1) Next X LimpaCampo = IIf(Len(CampoLimpo) = 0. X As Integer For X = 1 To Len(Q_Campo) If Mid(Q_Campo. "". Testa_NumAbs(KeyAscii)) End Function ' Uma função que limpa campos formatados com CIC. y. X." And Mid(Q_Campo. CEP e outros Public Function LimpaCampo(Q_Campo) As String Dim CampoLimpo As String. "û". CampoLimpo) End Function ' Uma função que prepara um campo para ser repassado para um Mainframe Public Function Texto_MainFrame(QTexto As String) As String Dim y As Integer For y = 1 To Len(QTexto) Select Case Mid(QTexto.br 104 Public Function Testa_Moeda(KeyAscii) As Integer ' Permite a digitaçao do ponto como separador decimal Testa_Moeda = IIf(KeyAscii = 46. 1) = "U" End Select Next Texto_MainFrame = UCase(QTexto) . "õ". y. KeyAscii. "ã". "Û" Mid(QTexto. 1) = "I" Case "ó". X.com. "Ó".williamdsilva@aol. "Ã". "Ô" Mid(QTexto. "ê". "Í". 1) <> " -" And _ Mid(Q_Campo. 1) = "E" Case "í". 1) <> "/" And Mid(Q_Campo. "Ç" Mid(QTexto. 1) = "A" Case "ç"." Then CampoLimpo = CampoLimpo & Mid(Q_Campo. X. 1) <> ". X. X." And Mid(Q_Campo. X. 1) = "C" Case "é". "Õ ". "Á". "â". 1) <> "_" And _ Mid(Q_Campo. y. 1) <> ":" And _ Mid(Q_Campo. y. X. "Â" Mid(QTexto. 1) Case "á". "Ú". 1) <> ". y. 1) = "O" Case "ú". 1) <> ". y. "É".

Cols .ColWidth(Coluna) = 99 * IIf(Len(Q_Grade.Col = Coluna For Each DaoRs In Rs_X.williamdsilva@aol.Size) + 200 End If Next Next If Rs_X.Text).AbsolutePosition + 1 With Q_Grade .Fields(Coluna).br 105 End Function ' Uma função que monta uma grade utilizando o MsFlexGrid ' Devem ser passados como parametros o Recordset e o Objeto da grade ' 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.Fields(Coluna).com.Text = DaoRs.Size.Property ' Define o numero de colunas da grade Q_Grade. Q_Grade As Object) Dim Linha.Count ' Monta o cabeçalho da grade Q_Grade. Rs_X.Text) > Rs_X.EOF Coluna = 0 Linha = Rs_X.Fields(Coluna).Cols = Rs_X. Len(Q_Grade.Value Q_Grade.MoveFirst Do Until Rs_X.1 Q_Grade.Name = "Caption" Then Q_Grade.Rows = Linha + 1 .Fields.Rows = 2 Exit Sub End If Rs_X. Coluna As Integer Dim DaoRs As DAO.RecordCount = 0 Then Q_Grade.Rows = 1 Q_Grade.Properties If DaoRs.Row = 0 For Coluna = 0 To Q_Grade.

Fields(Coluna)).Cols .Row = Linha For Coluna = 0 To . "") Next End With Rs_X.Col = Coluna .1 . dbOpenSnapshot) ContaRegistros = RsQ!QuantReg RsQ.Fields(Coluna). 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 . Rs_X. incluindo CGC.williamdsilva@aol.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 string Public Function ContaRegistros(QTab As String) Dim RsQ As Recordset Dim Sql As String Sql = "SELECT Count(*) AS QuantReg FROM " & QTab Set RsQ = CobDB.Text = IIf(Not IsNull(Rs_X.com.br 106 .OpenRecordset(Sql.Close End Function ' ' As funções a seguir trabalham em conjuto e calculam dígitos ' verificadores nas bases 10 e 11.

com. Trim(11 . 7. 4. 1)) Next X Resto = Soma Mod 11 Digito = IIf(Resto = 0 Or Resto = 1. 6. 2) For X = 1 To 9 Soma = Soma + (Regua(X) * Mid(CPF. 1)) Next X Resto = Soma Mod 11 Digito = Digito + IIf(Resto = 0 Or Resto = 1. X + 1. 10.williamdsilva@aol. X. 9. 5. 2) <> Digito. 11) . "0".br 107 Valida_CIC = ValidaCGC(Q_Cic) Case Else Valida_CIC = ValidaCPF(Q_Cic) End Select End Function ' Testa digito verificador do CPF Public Function ValidaCPF(CPF As String) As Boolean Dim Digito. True) End Function ' Testa digito verificador do CGC Public Function ValidaCGC(CGC As String) As Boolean ' Valida primeiro digito ValidaCGC = TestaDig(Left(CGC. 13). 3. Trim(11 . Resto As Integer. Soma. 11) ' Valida segundo digito If ValidaCGC = True Then ValidaCGC = TestaDig(Trim(CGC).Resto)) ValidaCPF = IIf(Mid(CPF. 8. False. X. 10. Regua As Variant If Len(Trim(CPF)) < 11 Then ValidaCPF = False Exit Function End If ' Calcula o primeiro dígito verificador Regua = Array(11. "0".Resto)) ' Calcula o segundo dígito verificador Soma = 0 Resto = 0 For X = 0 To 9 Soma = Soma + (Regua(X) * Mid(CPF.

X As Integer. True) ElseIf Q_Base = 11 Then ' Testa dígito na base 11 TestaDig = IIf(Base_11(Left(Trim(Q_Dado). Soma. Digito As Integer Numero = Trim(QNumero) ' Calcula digito do modulo 11 Multiplicador = 2 . False.1)) <> Right(Trim(Q_Dado). 1) * Peso)) Peso = IIf(Peso = 1. X. Produto.Resto). Multiplicador. 2. 1) Next X X=1 For X = 1 To Len(Regua) Soma = Soma + Val(Mid(Regua.br 108 End Function ' Função que testa outros dígitos verificadores ' O dado a ser testado e a base desejada devem ser passados como parâmetro Public Function TestaDig(Q_Dado As String. 1) End Function ' Calculo do digito modulo 11 Public Function Base_11(QNumero As String) As String Dim Numero. Peso. i. X. False.williamdsilva@aol. 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). 1). Regua As String DadoCalc = LimpaCampo(Q_Dado) Peso = 2 For X = Len(DadoCalc) To 1 Step -1 Regua = Regua + Trim((Mid(DadoCalc. 1)) Next X Resto = Soma Mod 10 Base_10 = Right(Trim(10 . True) End If End Function ' Calcula dígito no módulo 10 Public Function Base_10(Q_Dado) As String Dim DadoCalc. Len(Trim(Q_Dado)) .com. 1). Resto.1)) <> Right(Trim(Q_Dado). Len(Trim(Q_Dado)) .

1)) * Multiplicador Multiplicador = IIf(Multiplicador = 9. coloque um intervalo de 100.Picture Then Set Form1. 201 . 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. Multiplicador + 1) Next ' Exceção Digito = 11 . poderão ser enviadas para o meu e-mail sirlec@gold.Picture Exit Sub End If If Form1. No Form_Load coloque: Form1. 0. 200 . Na Propriedade Form_Load() coloque: Set Form1. i.Picture Then Set Form1.com.icon = ImageList1. Coloque um Timer.caption = "T" .icon = ImageList1.icon = ImageList1.Picture Na propriedade Timer1_Timer() coloque: If Form1.com. coloque os ícones da animação nesta mesma Imagelist.Picture Exit Sub End If No Timer1.icon = ImageList1.icon = ImageList1.ListImages(2).br ou pelo fone abaixo. 2.ListImages(1).williamdsilva@aol.Programa com ícone animado Enviado por: Henrique Angelo Crie um novo projeto.br 109 For i = Len(Numero) To 1 Step -1 Produto = Produto + Val(Mid(Numero.Int(Produto Mod 11) Digito = IIf(Digito = 10 Or Digito = 11.Título Animado Enviado por: Henrique Angelo Coloque um Timer no form com intervalo de 1.ListImages(1).ListImages(1).ListImages(2). coloque no Form uma ImageList.

para utilizar basta jogar o texto e NL entre os campos '======================================================================== ===== NL = Chr(13) + Chr(10) End Sub Function QuebrarLinhas(ByVal S As String.caption = " s" If Form1.williamdsilva@aol.caption = "T" endif e" e" 110 202 .caption = "T" form1. " " & P) End If If S = "" Then R=R&L End If Loop QuebrarLinhas = R End Function .caption = " e" form1. 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. N As Integer) As String '==================================== 'Esta função alinha o String "s" em linhas de no máximo n caracteres(colunas) 'São utilizadas a função Token e a sub Parag '==================================== parag Dim L As String Dim R As String Dim P As String L = "" R = "" Do While S <> "" P = Token(S) If P = NL Then R = R & L & NL L = "" ElseIf Len(L) + Len(P) > N Then R = R & L & NL L=P Else L = L & IIf(L = "".Relatórios via código-quebre uma string em x linhas e por n colunas Enviado por: Mauricio Cunha Caros amigos.caption = " s" form1.caption = " t" form1.com.caption = " If Form1.br No Timer1_Timer() coloque: If Form1.caption = " form1. P.caption = " e" If Form1.caption = " t" If Form1.

Moreirao Para fazer com que um programa receba parâmetros externos. X) S = Right(S.Parametros iniciais VB5 Enviado por: Fabio F.com. 115) If S = "" Then Expectativa = "[Nenhuma]" Else Expectativa = Expectativa + c End If Printer.: " Printer. Mid$(S. EX: msgbox "ERRO 1" 204 ..:!" & Chr(10) Dim X As Integer Dim R As String S = LTrim(S) X=1 Do If InStr(1. separadores. Incluindo o Drive e Pastas !!!) 205 .. Nogueira Coloque em Command1_Click Isso: Shell "Local do . divisores. Len(S) .) DETALHE = DETALHE & "Expectativas... 1)) Or InStr(1.EXE Através de Um Command Button Enviado por: Anderson da S.williamdsilva@aol. Ex: .Print Expectativa 203 . basta utilizar: (. UCase(RS!EXPEC)) S = TEXTO c = QuebrarLinhas(TEXTO. Assim o mesmo pode ser monitotado. X + 1. Mid$(S.Print DETALHE TEXTO = IIf(IsNull(RS!EXPEC). para identificar um loop..Exe. ou erro não localizado.Len(R)) Token = R End Function Para chamar a função.Como Executar Um Aplicativo . 1)) Then Exit Do End If X=X+1 Loop Until X >= Len(S) R = Left(S. use a funcão 'command' no Form_Load. "".br 111 Private 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 = ". X.Localizando uma rotina perdida Enviado por: Cláudio Rocha Vai aí uma dica simples Inclua mensagens entre as linhas do seu programa. rotina.

com. '*********************************************** Private Sub Inet1_StateChanged(ByVal State As Integer) On Error GoTo fim_anormal2 Select Case State Case icError.Text1 = Me.Description GoTo Fim_a Case icResponseReceived ' 12 Dim vtData As Variant ' Data variable. icString) If Len(vtData) = 0 Then bDone = True End If Me.com. bData() *Close #intFile '*************************************************** 'Além disso.OpenURL(strURL. 0) 207 . icDisconnected MsgBox "Erro na comunicação --> " & Err.br 112 Dim sParametro as String sParametro = Command 206 . Dim strData As String: strData = "" Dim bDone As Boolean: bDone = False vtData = Inet1.Text1 = 1 End If ProgressBar1.br/home/user/mercur/usuario.mercur.Text1 > 100 Then Me. ByVal dwReserved As Long) As Long Essa linha seguinte Vai dar o Boot.Microsoft Internet Transfer Protocol Enviado por: marcio fritsch Bem. icByteArray) *Open "C:\usuario.GetChunk(1024. crie no inet1: 'esse procedimento faz com que o arquivo seja 'copiado integralmente.Text1 + 1 If Me.txt" *intFile = FreeFile() *bData() = Inet1. icString) Do While Not bDone strData = Data & vtData vtData = Inet1.williamdsilva@aol.Text1 .txt" For Binary Access Write As #intFile *Put #intFile. coloque a em um botão por exemplo : Call ExitWindowsEx(2.GetChunk(1024. .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.Value = Me. minha sugestão da transferência automatizad a 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:zzzzzz@ftp.

Ex: Para salvar informações: Dim sValor as String SaveSetting "Nome da Aplicacao".br 113 Dim TempoDePausa. "Erro") Fim_a: End. ByVal lpszPassword As String. TempoTotal = Fim . "Secao". Início = Timer ' Define a hora inicial.Description. ByVal lpszLocalName _ As String) As Long Declare Function WNetGetConnection Lib "mpr.williamdsilva@aol. cbRemoteName _ As Long) As Long . Loop End Select GoTo Fim_a fim_anormal2: Dim a a = MsgBox("Erro de copia! " & Err. Araújo Mapear uma unidade de rede.Gravando e Reutilizando informacões no registry VB5 Enviado por: Fabio F. Declare Function WNetAddConnection Lib "mpr. section:="Secao".dll" Alias "WNetAddConnectionA" (ByVal _ lpszNetPath As String. Moreirao Você pode manipular suas informacões que ficam armazenadas banco de dados do Windows. Início. ByVal lpszRemoteName As String. Key:="Chave") Para excluir informações: DeleteSetting "Nome da Aplicacao".dll" Alias "WNetGetConnectionA" _ (ByVal lpszLocalName As String. Do While Timer < Início + TempoDePausa DoEvents ' Submete-se a outros processos.com.Mapear unidade de rede Enviado por: Fabio P. "Chave" Obs: Se você informar apenas o Nome da aplicacão com a Secão todas as Chaves serão excluídas 209 . 208 . Fim.Início ' Calcula o tempo total. Loop Fim = Timer ' Define a hora final. vbCritical. sValor Para recuperar informações 'sValor receberá o retorno': Dim sValor as String sValor = GetSetting(AppName:="Nome daAplicacao". TempoTotal TempoDePausa = 1 ' Define a duração. "Secao". Chave".

Unidade as String Caminho = "\\Computador\Caminho" Unidade = "I:" 'Realiza conexão WNetAddConnection Caminho . 256 'Na variável usuário estará guardado o nome do usuário. 'No módulo coloque Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String. 255) 'Desconecta WNetCancelConnection Unidade. unidade 'Consulta caminho de uma determinada conexão. na variável caminho será armazenado o local do caminho _ 'atual ref. "Se tiver senha. 'Para vc verificar qual o nome da máquina atual. Caminho.br 114 Declare Function WNetCancelConnection Lib "mpr. True 210 . digite á aqui". _ 'neste caso.Travar Ctrl+Alt+Del Enviado por: Fabio Pereira Araújo . nSize As Long) As Long Dim maquina As String maquina = Space(30) GetComputerName maquina. basta criar um módulo e adcionar o seguinte: Declare Function GetUserName Lib "advapi32. nSize As Long) As Long 'Depois. ByVal bForce As Long) As Long Dim Caminho As String.com.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. 211 . crie a variáve usuário Dim Usuario As String Usuario = Space(256) GetUserName Usuario. 30 'Na variável maquina estará guardado o nome do computador.williamdsilva@aol.dll" Alias "WNetCancelConnectionA" _ (ByVal lpszName As String.dll" Alias "GetUserNameA" (ByVal lpBuffer As String. a unidade WNetGetConnection Unidade.

br 115 Travar pressionamento das teclas Ctrl + Alt + Del: Private Const SPI_SCREENSAVERRUNNING = 97& Private Declare Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoA" _ (ByVal uAction As Long. 0&) 212 .com.williamdsilva@aol. ByVal uParam As Long. X. X. 1))) Next For X = 1 To 13 dig2 = dig2 + (Val(Mid$(VALOR. 14. X. X.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. 13. 0&) 'Para abilitar: lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING. blnOld. False. Abaixo segue o Código: Public Function Calc_CGC(VALOR As String) As Boolean Dim Mult1 As String Dim Mult2 As String Dim dig1 As Integer Dim dig2 As Integer Dim X As Integer Mult1 = "543298765432" Mult2 = "6543298765432" For X = 1 To 12 dig1 = dig1 + (Val(Mid$(VALOR. Temos a mesma função mais simples para ler. ByVal fuWinIni As Long) As Long Dim lngRet As Long Dim blnOld As Boolean 'Para desabilitar estas teclas: lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING. 1)) Then Calc_CGC = False End Function 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 Mult1 = 10 . _ True. 1)) * Val(Mid$(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_CGC = True If dig1 <> Val(Mid$(VALOR. _ lpvParam As Any. 1)) Then Calc_CGC = False If dig2 <> Val(Mid$(VALOR. 1)) * Val(Mid$(Mult1. blnOld.

'**** Private Sub Text3_GotFocus() Text3. sem ter que especificar um diretório para ele.Diretorio da App Enviado por: Death Angel Para vc abrir um programa que esteja no mesmo diretório que o seu projeto.xxx") 'Fim da String 214 .\nome_do_programa.1 Next For X = 1 To 10 dig2 = dig2 + (Val(Mid$(VALOR. 1)) * Mult1) Mult1 = Mult1 . 10.williamdsilva@aol. 1)) * Mult2) Mult2 = Mult2 . 1)) <> dig2 Then Calc_CPF = False End 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" 213 .SelStart = 0 Text3. é soh' fazer o seguinte comando!! 'Abre no mesmo diretório Shell (".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. 11. 1)) <> dig1 Then Calc_CPF = False If Val(Mid$(VALOR.com. public tecla as integer Na propriedade da caixa de texto ( text3 ).br 116 Mult2 = 11 For X = 1 To 9 dig1 = dig1 + (Val(Mid$(VALOR.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. X.SelLength = Len(Text3) End Sub . X. deixe a "text = 0".

SelStart = Len(Text3) End If End Sub '**** Private Sub Text3_KeyDown(KeyCode As Integer.Abrindo arquivos com senha Enviado por: Marcos Sixel Após algum tempo sempre recebendo a mensagem senha inválida no VB consegui algo no mínimo interessante."..br 117 '**** Private Sub Text3_Change() If Text3..PWD=SENHA") ' sempre dava errado :( set base = opendatabase("tal.com.. Enviado por: Ricardo Ele só é fechado se o micro é renicializado. e é bem simples: Private Sub Form_Unload(Cancel As Integer) Dim ReAbre as string . Shift As Integer) If KeyCode = 96 Or KeyCode = 110 Then Tecla = 1 End If End Sub 215 .mdb". Só faltava eu especificar os padrões default....PWD=SENHA") ' funciona.false.".false. 216 . isso fui eu que descobri.. os valores false são default :) Espero ter ajudado alguém.Enabled = True Then If Tecla = 0 Then Text3 = Val(Text3) End If Tecla = 0 Text3.mdb". :o) Detalhe. set base = opendatabase("tal..williamdsilva@aol.Como impossibilitar que o form seja fechado.

williamdsilva@aol.br 118 ReAbre = Shell("Nome do Programa em EXE". Chr$(0)) If intZeroPos > 0 Then StripTerminator = Left$(strString. . No módulo ( .PrevInstance Then MsgBox "O sistema já está aberto. e coloca -lo no comando shell explicado anteriormente. Function SpaceCut(ByVal strString As String) As String Dim intZeroPos As Integer intZeroPos = InStr(strString. se você guarda no seu bando de dados as senhas do sistema. 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.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.1) Else StripTerminator = strString 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.Limpando strings de funções API Enviado por: Gregório V. 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.1) End Sub OBS: Atenção para que de certo. qualquer pessoa pode acessa -ló ( por exemplo utilizando o Access ) ." Unload Me End If 218 . intZeroPos . 217 .com.bas ). crie uma variável "SENHA" ti po String. você precisa transformar o Form em exe.

com. 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 Do While Not I = Len(Texto) I=I+1 LN1 = Asc(Mid(Texto. I.williamdsilva@aol. 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. 1)) + 16 Senha = Senha & Chr(LN1) Loop End Function '**** Essa função vai transformar a senha em uma outra palavra ou conjunto de caracteres. I. 1)) .16 Senha = Senha & Chr(LN1) Loop .br 119 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.

com.ListImages(icone).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 Set Banco = CurrentDB 'variável do tipo conjunto de registros 'Carrega a variável Banco com o Banco de Dados Ativo 'Carrega a variável Tabela com a tabela "Nome_da_Tabela" Set Tabela = Banco. 221 .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() . Segundo: Você declara no general uma variável denominada "icone".williamdsilva@aol. 220 . Se alterar o número 16.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.Campo_Do_formulário = Tabela!Nome_do_Campo_da_Tabela 'Carrega o Campo do formulário atual com o campo da tabela. Podendo assim utilizar qualquer número no lugar de 16 a senha terá valor diferente. Terceiro: Declare um valor para a variavel no form_load.OpenRecordSet("Nome_da_Tabela") Me. tipo integer. Qualquer dúvida ou sugestão enviar E-Mail. um valor = 0.br 120 End Function '**** 'ex : Descriptografar {|lq%@# senha = klayton '**** Reparem que o número 16 foi utilizado nas funções. Primeiro: Você coloca no imagelist os icones que serviram para a animação. 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. a senha a ser transformada muda de valor.

ListImages(icone). é 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 .williamdsilva@aol.com.Picture End Sub Bem é so isso assim as linhas de código ficam reduzidas a bem menos.br 121 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.Como não deixar que o form feche Enviado por: Pedro Henrique Para não deixar que a form feche. Qualquer dúvida ou sugestão enviar E-Mail.selstart = 0 textbox1. 222 . 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).sellenght = (len(textbox1. 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 cai xa de texto será selecionada se for pressionada seta para cima a caixa anterior será selecionada.text)) 224 .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.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 usar estas rotinas abaixo para facilitar a entrada de dados.SelStart = 0 .

KeyCode As Integer. 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 ) . 13 If Index < Dado.SetFocus Case vbKeyUp If Index > Dado.SetFocus End Select End Sub 225 . End Property vValor as MeusValores . .lBound Then Index = Index .Defina uma lista de valores para uma propriedade no seu UserControl.uBound Then Index = Index + 1 Else Index = Dado.Define que vValor é a enumeração MeusValores. Legal. ou seja.williamdsilva@aol. Enviado por: Clark Para definir uma lista de valores para uma determinada propriedade do seu UserControl. não ? Clark . quando a propriedade for publicada na janela Properties do VB.SelLength = Len(Dado(Index)) End Sub Private Sub Dado_KeyDown(Index As Integer. .br 122 Dado(Index).1 Else Index = Dado. a mesma apresentará uma lista (Combo) contendo os valores definidos na emumeração.com. Shift As Integer) Select Case KeyCode Case vbKeyDown.lBound Dado(Index).uBound Dado(Index).

Refresh Sql é um comado sql MeuDataLink é um data link rsMeuComando é um command(recorset) 227 .Text) Searchlen = Len(Search) If Searchlen Then .rsMeuComando. '---Declaro as Variáveis--Dim Search As String Dim Searchlen As String '-------------------------Search = UCase(TxtProcura.Busca Rápida Enviado por: Régis Augusto Quinelato Private Sub Form_Unload(Cancel As Integer) 'Vou precisar de um text1.Open MeuDataLink. _ 'a palavra que vc procura será marcada. quando _ 'vc digitar a primeira letra automaticamente.br 123 226 . Private Sub Form_Unload(Cancel As Integer) label1.visible) 228 .Properties. List.williamdsilva@aol.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.Piscar um texto na tela Enviado por: Fernando D.Close MeuDataLink.visible = not(label1. Para fazer um texto piscar basta adicionar uma Label contendo o texto que deseja fazer piscar e digitar a seguinte linha no evento Timer.com.rsMeuComando.rsMeuComando.Source = sql MeuDataLink.rsMeuComando.

ListIndex = lRetVal cbo.List(lRetVal) cbo.List(Contador).ListIndex = Contador Exit For End If Next Contador End If 229 . .com.SelStart = Len(sBuffer) cbo.1 If UCase(Left(Lista.Text = cbo. ByVal wMsg As Long.keyascii) e pronto.Text) KeyAscii = 0 End If End Sub e no combo no change colocar o seguinte : Private Sub Form_Unload(Cancel As Integer) call ComboMagico(.Text. -1. ByVal wParam As Long.SelLength = Len(cbo..hWnd). O combo devera esta com o style = 0 .SelStart) & Chr(KeyAscii) lRetVal = SendMessage((cbo.ListCount . Searchlen)) = Search Then Lista.williamdsilva@aol. Colocar esta rotina no modulo bas Private 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 sBuffer) If lRetVal <> CB_ERR Then cbo. CB_FINDSTRING. KeyAscii As Integer) Dim sBuffer As String Dim lRetVal As Long sBuffer = Left(cbo. lParam As Any) As Long Sub ComboMagico(cbo As ComboBox.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.dropDown Combo. cbo.br 124 For Contador = 0 To Lista.

sobrenome sem Data Enviado por: angelo da silva .Pesquisando por nome.Caption = " e" Timer1.Enabled = False End Sub 231 .Menu com texto animado Enviado por: André Barros 125 Na propriedade do menu você coloca.Enabled = True End Sub Private Sub Timer4_Timer() 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.williamdsilva@aol. Private Sub menu_Load() Menu.Enabled = False Timer4..Caption = " n" Timer2.Enabled = False Timer3.Enabled = True End Sub Private Sub Timer2_Timer() Menu.com.Enabled = True End Sub Private Sub Timer3_Timer() Menu.Caption = "Menu" Timer4.Caption = " u" Timer3.Enabled = False Timer2.br 230 ..

connect (endereço ip).Aplicações Client/Server Enviado por: Daniel(Shadow) Para fazer um cliente de qualquer aplicação em Visual Basic.(porta) Por exemplo: winsock1.0 no form. UCase(Trim(rsequi("uti_equi"))). que seria vc clicando com o botão direito do mouse na barra de tarefas e escolhendo a opção Minimizar todas as janelas. Você tem apenas que colocar um controle Microsoft Winsock 6. 232 . ou false se não.0.Minimizando Todas as Janelas Enviado por: Antonio Ferreira Marques Junior Para minimizar todas as janelas de uma maneira bem simples. e em qualquer botão ou na propriedade load do form. basta simularmos.0 keybd_event vk_lwin.williamdsilva@aol.0. 5555 234 .1. UCase(Trim(pat))) Instr=true se estiver contindo.0. o pressionamento das teclas Alt+M.Nomes das letras maiúsculas e sem espacós a mais Enviado por: Eduardo Mazzarino Costa .br 126 dim texto as boolean dim pat as string pat="Silva" texto = InStr(1. byval bscan as byte. via API.connect 127. 0. para qualquer tipo de aplicativo server.0. você coloca o seguinte comando: winsock1.com.0 keybd_event &H4D. byval dwextrainfo as long const vk_lwin = &H5B const keyeventf_keyup = &H2 const vk_apps = &H5D Num evento click de um botão keybd_event vk_lwin.0 Boa Sorte 233 . É simples: Num módulo: Declare Sub Keybd_event lib "user32" (ByVal bvk as byte.0.keyeventf_keyup. byval dwflags as long.0.

williamdsilva@aol.br 127 Public Function Maiusc(Palavra As String) As String 'converte as primeiras letra dos nomes em maiúsculas(me nos: de.text = "" text1.Proibindo campos nulos Enviado por: FÁBIO FUR Na Proc LostFocus de uma caixa de texto você digita: if trim(text1. 'dos. da. Posic)) & " " Loop Maiusc = Trim(Maiusc) End Function 235 . das. a.text) = "" then msgbox "Preenchimento do campo é obrigatório!" text1. do.setfocus Exit sub End If . Resto.com. Posic As Byte Resto = Trim(LCase(Palavra)) & " " Do Until Resto = " " Posic = InStr(1. 1. 1)) & Mid(Parte. 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. e e) 'retira os espaços em branco excedentes entre as palavras. 2) End If Maiusc = Maiusc & Parte Resto = Trim(Mid(Resto. " ") Parte = Mid(Resto. 21 / 3 / 99 Dim Resto As String. exemplo: 'string inicial = "nome sobrenome1 dos sobrenome2 " 'string de retorno = "Nome Sobrenome1 dos Sobrenome2" ' EDUARDO MAZZARINO COSTA. Parte As String.

'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 ho uver caracteres não-numéricos. 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. Dettmann 128 'Sub que orderna os números de uma ComboBox em ordem crescente ou decrescente.I)) Step IIf(Sort.1) As Long For I = 0 To UBound(Itens) Step 1 Itens(I) = Combo. 'certifique-se de que só existam números em todas os Itens do ComboBox.Clear Sort = (SortType = COMBOSORTASCENDING) For I = 0 To UBound(Itens) Step 1 For I2 = IIf(Sort. UBound(Itens). por isso.Organizando números numa Combo Box Enviado por: Gregório V. UBound(Itens) _ . ASCEND. UBound(Itens)) To IIf(Sort.ListCount .List(I) Next I Combo.williamdsilva@aol.com. Itens(I2) End If Next I2 Combo. DESCEND) If Sort Xor (CLng(Itens(I2)) > CLng(Itens(I))) Then Swap Itens(I).AddItem Itens(I) .(UBound(Itens) .ListCount = Empty Then Exit Sub ReDim Preserve Itens(Combo. I + 1.br 236 .

Y.williamdsilva@aol. X) End If If X = Len(ESPAÇO) Or X = Len(ESPAÇO) + 1 Then Y=Y+1 NEWS = Mid(MENSAGEM. Mas pode posicionar o List da Combo numa posição com conteúdo vazio. Len(ESPAÇO)) & Mid(MENSAGEM. Ao invés de Combo. não pode-se usar a propriedade Text para limpar um Combo Read-Only.Mensagem randonica Enviado por: José Roberto de Paula Passe para esta funçao sua mensagem e o tamanho do objeto que a contem ex: Randon_Msg(Label1. Len(MENSAGEM)) .Caption.Limpando Combos Read-Only 2 Enviado por: Jeferson Luiz Ravate Complementando dica enviada por Henrique Angelo Como diz o autor da dica. 1.Text = "". 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.Width) Function Randon_Msg(MENSAGEM. 238 .br 129 Next I End Sub 237 . faz -se Combo.List = -1 O texto da combo ficará em branco sem alterar seu conteúdo. X.com.Label1.

vbNullString) lRetVal = PostMessage(hwnd. etc. WM_COMMAND.williamdsilva@aol. 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". ByVal wParam As Long. Pois bem.br 130 If Y = Len(MENSAGEM) Then Y=0 X=0 End If End If End Function 239 . tipo minimizar todas janelas.Propriedades da Barra de Tarefas Enviado por: Junior Digamos que vc quer realizar as operações daquelas que vc clica com o Direito do mouse. despreze o bloco Enum/End Enum e coloque no Click do botão: ExecutaTarefas 416 (Por Ex. 0&) End Sub Agora no evento click de um botão: ExecutaTarefas Açao Obs. ByVal lpWindowName As String) As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long. ByVal wMsg As Long. . Ação. lado a lado.com. o argumento ação vc escolherá automaticamente depois de vc digitar o ExecutaTarefas.: para minimizar todas as janelas).: Se vc tiver usando VB5 ou superior. o código é este: Const WM_COMMAND As Long = &H111 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String. Se vc tiver usando VB4.

AutoRedraw = True Me.Application 'Abre o MDB 'GetSetting e usado na inicializacao junto com 'SaveSetting salvando o local do arquivo objAccess. y)-(Me.Application Set objAccess = New Access. RGB(0.acPreview.ScaleMode = 3 Me. View:=Access.DrawStyle = 6 Me. "0") 'se for relatorio objAccess.Width. "MDB".RunMacro ("NomedaMacro") 'e assim por diante Set objAccess = Nothing 241 .OpenCurrentDatabase _ filepath:=GetSetting (NOME_SISTEMA.DoCmd.ScaleHeight = (256 * 2) For i = 255 To 0 Step -1 Me. _ wherecondition:=Condicoes objAccess.Abrindo qualquer tipo de objeto do Access Enviado por: Luiz 131 Dim objAccess As Access.williamdsilva@aol. 0. y + 2).br 240 .DrawWidth = 2 Me. i).Visible = True objAccess.Line (0.DrawMode = 13 Me. Dim i as Integer Dim y as Integer Me.Maximize 'se for macro objAccess.Docmd.com. BF y=y+2 Next i .DoCmd.OpenReport reportname:=rptname _(1).fundo degrade Enviado por: Marcio fritsch 'no Resize() de um formulário qualquer coloque: 'simples e rápido.

digite: Command2. _ 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. Public Function MarcaTexto(Campo) . Dentro do command1.. "Calculadora") If IsWindow(hWindow) < 0 Then 'esta Ativa Else 'esta Inativa End If 243 . Uehara Private Declare Function FindWindow Lib "User32" _ Alias "FindWindowA" _ (ByVal lpClassName As String.visible = true 244 . Enviado por: Pablo R.Mover o Botão de lugar ao passar o Mouse por cima Enviado por: O Sensacional® Use a propriedade Mouse Move. Till Crie um módulo (.visible = false Command2. e 2 command button.br 132 242 . digite : Command1. com o false do "Visible" ativado.visible = false Command1.com.Verificar se programa esta ativo Enviado por: Nilson M.Bas) e dentro do mesmo digite..Marcar o Texto de um Campo.visible = true Dentro do command2..williamdsilva@aol.. O 2º.

Text = TXT. deve ter a propriedade Multiline = True e ScroolsBar = 2 (vertical). utilize o seguinte código: RS.Text) End With End Function A função é bem simples mas pode ajudar. Ferraz Para vc mudar a cor da label conforme o mouse passa sobre ele. 245 . Label1.. Private Sub Form_MouseMove(Button As Integer.com.br 133 With Campo . RS: Nome da variavel declarada como Recordset DB: Nome da variavel declarada como DataBase 247 .Mudar a cor do Label quando o mouse passar sobre o label.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.Text = RS("Campo") RS.MoveNext Wend Obs: O textbox (no caso TXT)..Text & ".MoveNext While Not RS.SelStart = 0 .williamdsilva@aol. dando a aparencia de um link Enviado por: Thadeu R. " & texto RS.Comando Printer Enviado por: Anderson A Lopes . sem utilizar SQL.MoveFirst TXT.ForeColor = &H80000012 End Sub Private Sub Label1_MouseMove(Button As Integer. basta colocar o seguinte comando abaixo.ForeColor = &HFF& End Sub 246 .SelLenght = Len(.EOF texto = RS("Campo") TXT. Label1.

.Testando um Laço For.Buscar data/hora em outro computador da rede Enviado por: Antonio Aristides Mochi Junior Option Explicit Private Declare Function NetRemoteTOD Lib "NETAPI32. por exemplo: Printer. i. Enviado por: AndreRP Escreva em um botão de Comando a seguinte codificação : var1 = "TESTANDO" For i = 1 To 8 MsgBox Mid(var1.com. ByVal cbCopy As Long) Private Type TIME_OF_DAY t_elapsedt As Long t_msecs As Long t_hours As Long t_mins As Long t_secs As Long t_hunds As Long t_timezone As Long t_tinterval As Long t_day As Long t_month As Long t_year As Long t_weekday As Long End 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.Print "String a ser Impressa" Você pode definir margem de quantos centímetros você quiser usando: Printer.williamdsilva@aol.ScaleLeft = .DLL" (ByVal buffer As Long) As Long Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any. 248 ..br 134 Com o comando printer podemos imprimir várias coisas rapidamente..DLL" (ByVal server As String.. hpvSource As Any. buffer As Any) As Long Private Declare Function NetApiBufferFree Lib "NETAPI32. 1) Next i 249 . Ex: \\SERVIDOR1 ' Private Function BuscarDataHora(sComputador As String) As String Dim sRetorno As String Dim todTime As TIME_OF_DAY Dim ptrTime As Long Dim lRetorno As Long Dim sServidor As String Dim dRemoto As Date On Error GoTo ERRO . Bom é isso aí pessoal...Valor da margem..

ptrTime) If lRetorno = 0 Then CopyMemory todTime. também no evento Click de um botão: Private Sub Command2_Click() Shell "start http://www.com.br 135 sRetorno = "" Screen. coloque um Command Button no form e digite o seguinte no seu evento Click: Private Sub Command1_Click() Shell "start mailto:seu@email.com.williamdsilva@aol. 1) + (todTime.homepage. o comando é de apenas 1 linha!! 'Para abrir o programa de E-Mail." & vbCrLf & vbCrLf & sServidor.BAS no seu programa e coloque a declaração abaixo nele: Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long.t_timezone / 60 / 24) 'AJUSTAR PARA DIFERENÇAS DO TimeZone sRetorno = Format(dRemoto. 36. "hh:mm:ss") NetApiBufferFree (ptrTime) 'LIBERA O PONTEIRO DA MEMÓRIA Else 'Erro 53: cannot find server MsgBox "Não pode encontrar o serv idor.txt" 'E assim por diante. você pode abrir qualquer programa que quiser!! 251 . "Erro" FIM: Screen.MousePointer = vbDefault BuscarDataHora = sRetorno Exit Function End Function 250 .Desligando o computador pelo VB Enviado por: Daniel Sitnik 'Primeiro adicione um Módulo .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.Description. vbUnicode) lRetorno = NetRemoteTOD(sServidor.MousePointer = vbHourglass sServidor = StrConv(sComputador. pode ser usado para qualquer outro programa.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.br" End Sub 'Para iniciar o Browser digite o código abaixo.com. 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?". "Sair") = 6 Then . E o melhor. Len(todTime) 'COPIA O PONTEIRO RETORNADO PARA A ESTRUTURA TIME_OF_DAY dRemoto = DateSerial(70. "dd/mm/yyyy") & " -" & Format(dRemoto.t_elapsedt / 60 / 60 / 24) 'CONVERTE O TEMPO DECORRIDO DESDE 1/Jan/70 PARA UMA DATA dRemoto = dRemoto . "Atenção" End If GoTo FIM ERRO: MsgBox Err. vbExclamation. ByVal ptrTime. 1.Number & vbCrLf & Err. ByVal dwReserved As Long) As Long 'Pronto. vbCritical.(todTime.

...10) ElseIf numero >= 21 And numero <= 99 Then If Right(numero.Print Text1.Imprimindo Enviado por: Elder Paes Para vc imprimir um documento. 1)) End If ElseIf Mid(numero. 1)) & " e " & dezenas(Mid(numero.com.Função para transformar sifras em extenso Enviado por: Evandro Massini 'Função para transformar sifras em extenso Option Explicit Dim unidade(1 To 9) As String Dim dezena(17) As String Dim centena(1 To 9) As String Dim inteiro As String Dim tamanho As Integer Public Function unidades(numero As String) As String unidades = unidade(numero) End Function Public Function dezenas(numero As String) As String If numero > 9 And numero < 21 Then dezenas = dezena(numero . 2))) End If End Function . 252 . 1) = "0" Then dezenas = dezena(Int(Left(numero. 2) = 0 Then If numero = 100 Then centenas = "cem" Else centenas = centena(Left(numero.2))) & " e " & unidade(Int(Right(numero. 3. 1) = 0 Then centenas = centena(Left(numero.williamdsilva@aol. 1) . 1) = 0 Then centenas = centena(Int(Left(numero. utilize o comando Printer ao invés do comando PrintForm.br 136 Call ExitWindowsEx(1. 2)) ElseIf Mid(numero. Ao clicar 'Não' nada acontecerá. 1))) & " e " & dezenas(Int(Right(numero.' vai aparecer e o computador será desligado. 1) Else Exit Sub End If End Sub 'Ao clicar o botão ou o formulário uma MsgBox aparecerá perguntando se você quer desligar o Windows. 1))) Else centenas = centena(Int(Left(numero.Print Picture1.Text Printer. 2. se você clicar 'Sim' aquela famosa tela 'Seu Computador Já Pode Ser Desligado. 2.Picture 253 . 1) + 8)) Else dezenas = dezena(Int(1 & Int(Left(numero. 1))) End If End If End Function Public Function centenas(numero As String) As String If Mid(numero. Vamos fazer com um TextBox e um PictureBox: Private Sub command1_click() Printer. 1))) & " e " & unidade(Int(Right(numero. 2.

com.99 Then ext = "Número fora dos padrões válidos !": Exit Function unidade(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" 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 tamanho Case 1 ext = unidades(inteiro) Case 2 ext = dezenas(inteiro) Case 3 ext = centenas(inteiro) Case 4 If Right(inteiro. 2)) & " mil e " & dezenas(Int(Right(inteiro. 3))) End If . 3)) > 99 Then ext = unidades(Left(inteiro. 3)) < 10 Then ext = unidades(Left(inteiro. 3)) < 10 Then ext = dezenas(Left(inteiro. 2)) & " mil e " & centenas(Right(inteiro. 1)) & " mil e " & centenas(Int(Right(inteiro. 2)) & " mil e " & unidades(Int(Right(inteiro. 3)) > 9 And Int(Right(inteiro. 3) = 0 Then ext = unidades(Left(inteiro. 3) = 0 Then ext = dezenas(Left(inteiro. 3)) < 100 Then ext = dezenas(Left(inteiro. 3)) > 99 Then ext = dezenas(Left(inteiro. 3))) ElseIf Int(Right(inteiro.williamdsilva@aol. 3))) ElseIf Int(Right(inteiro. 1)) & " mil" Else If Int(Right(inteiro. 2)) & " mil " Else If Int(Right(inteiro. 3))) ElseIf Int(Right(inteiro. 3))) End If End If Case 5 If Right(inteiro. 3)) ElseIf Int(Right(inteiro. 1)) & " mil e " & unidades(Int(Right(inteiro. 3)) < 100 Then ext = unidades(Left(inteiro. 1)) & " mil e " & dezenas(Int(Right(inteiro. 3)) > 9 And Int(Right(inteiro.br 137 Public Function ext(numero As Currency) As String If numero > 999999.

deixe a propriedade alignment = 2 no MouseDown adicione o seguinte código : .1) = messes(contador) Next contador Obs.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 integer for contador = 1 to 12 grid1. 3)) & " mil e " & unidades(Int(Right(inteiro. 3)) & " mil e " & dez enas(Int(Right(inteiro. 3))) ElseIf Int(Right(inteiro.williamdsilva@aol. 1) * 10 If fra >= 10 Then ext = ext & " e " & dezenas(fra) & " centavos" ElseIf fra < 10 Then ext = ext & " e " & unidades(fra) & " centavos" End If End If End Function 254 . 3)) < 100 Then ext = centenas(Left(inteiro.: A propriedade Rows do controle MsFlexGrid deve ser definida com o Mínimo 13.Efeito de profundidade Enviado por: Fernando Augusto dos Santos É muito simples.Int(numero) <> 0 Then Dim fra As String fra = Right(numero. 255 . 2) If InStr(1. 3)) > 9 And Int(Right(inteiro. Se quiser colocar essa oba-oba no seu projeto : 1 2 3 4 adicione um label.TextMatrix(contador. fra. 3)) < 10 Then ext = centenas(Left(inteiro.") <> 0 Then fra = Right(fra.com. 3)) & " mil e " & centenas(Int(Right(inteiro.br 138 End If Case 6 If Right(inteiro. 3))) ElseIf Int(Right(inteiro. deixe o fontsize dele com tamanho 10. 3)) > 99 Then ext = centenas(Left(inteiro. 3)) & " mil " ElseIf Int(Right(inteiro. 3))) End If End Select ext = ext & " reais" If numero . ". 3) = 0 Then ext = centenas(Left(inteiro.

139 256 . .ScaleMode = 3 PicDestino. e o seu usuario trocar as cores do sistema para o padrao "Deserto" e seu controle continuar cinza. 0.BackColor = SystemColorConstants. ByVal YSrc%. PicDestino As PictureBox) Dim xX As Integer.hDC. 0.fontsize = 10 OBS : Utilize este recurso para substituir botões. 0. xX. SRCCOPY) End Sub 'Flip Vertical Public Sub imgFlipV(PicOrigem As PictureBox. -xX.ScaleMode = 3 PicDestino.ScaleHeight ReturnV = StretchBlt(PicDestino. 0. ByVal dwRop&) #ElseIf Win16 Then Declare Function StretchBlt% Lib "GDI" (ByVal hDC%.ScaleWidth yY = PicOrigem. ByVal YSrc%. use o SystemColorConstants Ex: Controle. ByVal x%. ByVal nSrcWidth%. PicOrigem. ByVal nHeight%.Flip Horizontal e Vertical Enviado por: Gustavo (Toni) 'coloque os dados abaixo em um module #If Win32 Then Declare Function StretchBlt% Lib "GDI32" (ByVal hDC%. -yY.no MouseUp adicione o seguinte código : label1. por exemplo. 0. xX. ByVal hSrcDC%. ByVal nSrcHeight%.fontsize = 8 5 . ReturnV As Integer PicOrigem.Cores do Sistema Enviado por: Ivan Para nao ocorrer de você colocar um controle em cor Cinza.Cls xX = PicOrigem.ScaleHeight ReturnV = StretchBlt(PicDestino.vbActiveTitleBar E assim por diante.ScaleWidth yY = PicOrigem. PicOrigem. ByVal x%.ScaleMode = 3 PicDestino. ByVal nWidth%.Cls xX = PicOrigem. ByVal dwRop&) #End If Const SRCCOPY = &HCC0020 'Flip Horizontal Public Sub imgFlipH(PicOrigem As PictureBox. yY As Integer. ByVal XSrc%. SRCCOPY) End Sub 257 .vb3DDKShadow Controle. PicDestino As PictureBox) Dim xX As Integer.BackColor = SystemColorConstants.com.hDC. yY. xX.ScaleMode = 3 PicDestino. 0. ByVal y%. yY.br label1. ByVal nSrcHeight%.vb3DFace Controle. ByVal nHeight%. yY As Integer. usando o evento click do label para executar ações. ByVal hSrcDC%. ReturnV As Integer PicOrigem.hDC. ByVal nWidth%. xX.hDC. ByVal XSrc%. yY. ByVal y%.BackColor = SystemColorConstants.williamdsilva@aol. ByVal nSrcWidth%. yY.

36.Enviando registros para Excel Enviado por: luiz Private Sub Command1_Click() 'aconselhavel para poucos registros Dim rs As Recordset . Y as single) ReleaseCapture Dim a& a& = SendMessage(ToolBar1. 0&) End Sub 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.movenext Espero ter ajudado!! 261 . X as single. Enviado por: José Pereira Crie um MsgBox com sinal de interrogação e com os botões Vbyes e Vbno. 161..recordset.hwnd. 2. ByVal wMsg As Long.com. ByVal lParam As Any) As Long Declare Function ReleaseCapture Lib "user32" () As Long Sub Toolbar1_MouseDown(Button as integer.Criando toolbars dockaveis Enviado por: Leon Serfaty Kacowicz Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long.recordset.delete data1.williamdsilva@aol. em um botão de comando digite: timer1.br 140 258 . ByVal wParam As Long.Crie um botão: Private Sub comman1_Click() resp = MsgBox("Tem certeza que deseja sair?". Defina a propiedade enabled = false do timer. Shift as integer.enabled = true No timer: on error resume next data1. "SAÍDA") If resp = vbYes Then End Else MsgBox ("Continue seu trabalho!") End If End Sub 259 .Como sair no msgbox..

br 141 Dim cn As Connection Set cn = New Connection Set rs = New Recordset 'estabelece coneccao cn. adLockReadOnly Exporta rs rs.Workbooks. temp.3.Fields.Value = MCampos(temp .EOF Set RSConeccao = Nothing Set mExcelApp = Nothing End Sub 262 . 1) & "1" For Each c In mExcelApp.Count For Each c In mExcelApp.Name Next If Not RSConeccao.Add 'imprime nome dos campos Dim ABCD For temp = 1 To RSConeccao.Data Source=D:\Program Files\Microsoft Visual Studio\VB98\Biblio. temp.Fields.Fields(temp).Fields. adOpenStatic.EOF Then 'popula recordset RSConeccao.OLEDB.Count) 'armazena nomes dos campos Dim temp As Long For temp = 0 To RSConeccao.1) Next c Next Dim TTemp2 TTemp2 = 1 'para cada registro Do TTemp2 = TTemp2 + 1 'para cada campo 'imprime dados do registro For temp = 1 To RSConeccao.ActiveWorkbook.Value = RSConeccao(MCampos(temp .Jet.MoveLast RSConeccao.MoveNext 'ate fim dos registros Loop While Not RSConeccao.Worksheets.Fields.Open "Select * From Authors".1)) Next c Next RSConeccao.Count ABCD = Mid(ALFABETICO.williamdsilva@aol.Application ReDim MCampos(RSConeccao. cn.Close cn.MoveFirst Else RSConeccao.com.mdb" 'abre recordset rs.Close Exit Sub End If 'instancia excel Set mExcelApp = New Excel.Range(ABCD) c.Application Dim c As Range Const ALFABETICO As String = "ABCDEFGHIJKLMNOPQRSTUVXYWZ" Set mExcelApp = New Excel.ActiveWorkbook.Range(Mid(ALFABETICO.Count .Worksheets.Close Set cn = Nothing Set rs = Nothing End Sub Sub Exporta(ByVal RSConeccao As Recordset) Dim MCampos() As String Dim mExcelApp As Excel.Open "Provider=Microsoft.Application mExcelApp. 1) & TTemp2) c.51.Application.Persist Security Info=False.Visible = True mExcelApp.Application.1 MCampos(temp) = RSConeccao.Max lenght Combo-box Enviado por: Marcelo .

Text = Left$(Trim(Combo1. "yyyy") Next End Sub 'código para o formulário: 'insira 1 Combo-box no formulário Private Sub Form_Load() G_Preenche_Combo_Data Combo1 End Sub 264 . desde o dia de hoje até o ultimo dia do mês: 'código para o módulo: Option Explicit Sub G_Preenche_Combo_Data(ComboDatas As Control) Dim I. 10) End if End Sub Private Sub Combo1_KeyPress(KeyAscii As Integer) 'use send keys quando o form tiver mais 1 controle 'que receba o foco If KeyAscii = 13 Then SendKeys "{Tab}" If Len(Combo1. "0#") & "/" & Format(Now.Preencher Combo Datas Enviado por: Marcelo 'Rotina para adicionar datas do mes corrente.Centralizar Form Enviado por: Mimo Para centralizar um Form siga estes passos: Clique no Form. UltimoDia As Integer DiaCorrente = Day(Now) MesCorrente = Month(Now) AnoCorrente = Year(Now) UltimoDia = Day(DateValue("01/" & _ Str(MesCorrente + 1) & _ "/" & Str(AnoCorrente)) .Text) >= 10 Then Combo1.williamdsilva@aol.Como saber se o seu Computador está preparado para o ano 2000.Text) = 10 Then If KeyAscii <> 8 And KeyAscii <> 13 Then KeyAscii = 0 Combo1. DiaCorrente. AnoCorrente.Text). .Locked = False End If End If End Sub 263 .Locked = True Beep Combo1.com. tecle F4. Enviado por: MPS Informática Ltda. "mm") & "/" & Format(Now.br 142 'Maxlenght no Combo-box Private Sub Combo1_Change() If Len(Combo1. em Properties altere StartUpPosition para 2. MesCorrente.AddItem Format(I. 265 .1) If MesCorrente = 12 Then UltimoDia = Day(DateValue("31/" & "12/" & Str(AnoCorrente))) End If For I = DiaCorrente To UltimoDia ComboDatas.

e onde aparecer este campo com o ponto decimal. 1. todas as vezes que for preenchido com o valor igual ao de maxlength automáticamente passará para o próximo controle sem codificação.Como re-abrir um projeto do VB6 no VB5 Enviado por: Robson . Após uma pequena surra.br 143 Private Sub Command1_Click() Dim Test As Date Test = Text1 Text2 = Format(Test. Exemplo: TEXT1. e deparei com o problem a com a casa decimal.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. Tamanho As Integer Tamanho = Len(Trim(NumeroTexto)) Posicao1 = InStr(1. mude a propriedade para TEXTO (estou falando da importação do ACCESS).TROCAR PONTO POR VÍRGULA Enviado por: PAULO EDUARDO PACHECO Função para trocar o ponto de um TEXTBOX por vírgula.. Posicao2. estava importando uma base de dados do DATAFLEX.Tab Automático sem codificação Enviado por: Nildo Veras Use o MaskEdBox setando o valor da propriedade autotab com true. ". Posicao1) + ". E depois volte ao ACCESS e mude para MOEDA. O problema estará resolvido." + Right(NumeroTexto.TEXT) Function trocar(NumeroTexto) Dim Posicao1.TEXT=TROCAR(TEXT2. "long date") End Sub 266 .. Tamanho ) Else trocar = NumeroTexto End If End Function 268 .williamdsilva@aol.0.com.") 'Achar o ponto Tamanho = Tamanho . Recentemente. NumeroTexto.Posicao1 'Para saber qtos item serão coletados If Posicao1 <> 0 Then 'Achou o ponto Posicao1 = Posicao1 . descobri a solução: Importe a base de dados. 269 . 267 .1 Posicao2 = Posicao1 + 1 'P/ encontrar o próximo espaço trocar = Mid(NumeroTexto. Execute a função abaixo.

The file .dwNumberOrfProcessors & " Power PC 620" End Select GetSysInfo = Proc End Function 271 .dwNumberOrfProcessors & " Intel 80486" Case Is = 586 Proc = INFO.dwNumberOrfProcessors & " MIPS R2000" Case Is = 3000 Proc = INFO. can´t be loaded" Para quem quiser consertar o problema..dwNumberOrfProcessors & " MIPS R3000" Case Is = 4000 Proc = INFO.dwNumberOrfProcessors & " Intel 8086" Case Is = 386 Proc = INFO.dwProcessorType Case Is = 860 Proc = INFO..vbp com o notepad (ou outro editor de texto) e retire a linha com o seguinte comando: Retained=0.dwNumberOrfProcessors & " Power PC 601" Case Is = 603 Proc = INFO.dwNumberOrfProcessors & " Power PC 603" Case Is = 604 Proc = INFO.Salvando uma Picture Enviado por: ton .dwOemID = Len(INFO) Call GetSystemInfo(INFO) Select Case INFO.dwNumberOrfProcessors & " Power PC 604" Case Is = 620 Proc = INFO. Boa sorte.br 144 Tive uma grande supresa quando abri e rodei um projeto no VB6 e depois quis abrir -lo no VB5.dwNumberOrfProcessors & " ALPHA 21064" Case Is = 601 Proc = INFO.com.dwNumberOrfProcessors & " MIPS R4000" Case Is = 21064 Proc = INFO. 270 .dwNumberOrfProcessors & " Intel 80386" Case Is = 486 Proc = INFO.dwNumberOrfProcessors & " Intel Pentuim" Case Is = 2000 Proc = INFO.williamdsilva@aol.. abra o arquivo nomedoprojeto. Ao tentar fazer isto o VB5 mostrou a seguinte mensagem: "'Retained' is an invalid key.Nome do processador Enviado por: Rodolfo Nunez Lacé Private Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO) Private Type SYSTEM_INFO dwOemID As Long dwPageSize As Long lpMinimumApplicationAddress As Long lpMaximumApplicationAddress As Long dwActiveProcessorMask As Long dwNumberOrfProcessors As Long dwProcessorType As Long dwAllocationGranularity As Long dwReserved As Long End Type Function GetCPUInfo() As String Dim Proc As String Dim INFO As SYSTEM_INFO INFO.

2)) Mes = CInt(Mid(Datas. Ano. Dim formulario As Form Dim controle As Control For Each formulario In Forms For Each controle In formulario. d.com.bmp" 272 .Text.br 145 SAVEPICTURE picture1. Mes.image.MaxLength + 1 texto = Mid(Mask1. Primeiro_Numero_Ano As Integer Dim Mensagem As String On Error GoTo Tratamento_Data Dia = CInt(Mid(Datas.Text = "" End If Next controle Next formulario 274 .Mask = "(###)###-####" Then If Mask1. "c:\imagem.Limpar todos os TextBox de todos os Formularios Enviado por: Alexandre Sergio Nakano Outra dica de como limpar os textbox dos formulários.Verificaçao de Data Enviado por: André Luiz Ribeiro de Araújo Public Function Verifica_Data(Datas As String) As Boolean Dim DiasMes.Controls If TypeOf controle Is TextBox Then controle.Text = "(___)___ -____" Then MsgBox "Vazio" Else: Dim d d=1 Do While Not d = Mask1.Validar conteudo do MaskEdit Enviado por: Vava Private Sub Command1_Click() If Mask1. 4.williamdsilva@aol. 1) If texto = "_" Then MsgBox "Vazio" Exit Sub Else d=d+1 End If Loop MsgBox "cheio" End If End If End Sub 273 . Dia. 2)) . 1.

.. caso contrário.: Castelluber. Espero que ajude a resolver seu problema 275 ... Douglas Henrique 'Data/Hora. não tem problema não passe o dia.: 0 (igual). 7... Function FirstDate(Date1 As Date.Qual data ou mês/ano é maior Enviado por: Douglas Henrique Castelluber Simples declare essa função no .19:00 'Função...Bas e passe as datas.br 146 Ano = CInt(Mid(Datas...1 (primeira data + antiga) ou 2 (segunda data + antiga) 'Dependência..: '*********************************************************************************************** FirstDate = 0 .Text) 'Irá Retornar Verificação = True se a Data Digitada for Válida.....: Nenhuma 'Observação. 4)) Primeiro_Numero_Ano = CInt(Mid(Datas. 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 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. se for uma string converta com o CDATE e passe. o importante é ser um parametro do tipo data.. Date2 As Date) As Integer 'FirstDate************************************************************************************** 'Programador. Retorna Verificação = False 'se a Data Digitada for Inválida..: 01/12/98 .. no caso de mês/ano.: Retorna a maior data 1 ou 2 para as datas passa das 'Retorno. 7.Number = 13 Then End If End Function Um exemplo de como funciona: Dim Verificação as boolean Verificação = Verifica_Data(Text1.williamdsilva@aol. Boa Sorte.com.

*)|*.XLS" 'caminho do arquivo em anexo objMessage.: a propriedade .Recipients. Private Sub Command1_Click() 'para utilizarmos aquelas caixas padrão de abrir 'arquivo use: .Add objMessage.Enviar E-Mail Enviado por: Erica Pimentel Souza Dim objSession As Object Dim objMessage As Object Set objSession = CreateObject("MAPI.false. False.*|" 'a propriedade acima aplica um filtro para os 'arquivos que podem ser gravados .Resolve objMessage.Text = "Texto da Mensagem" objMessage.Filter = "arquivos de texto (*.Logon "Your Profile Name".Recipients.txt)|*.Attachments.Action = 2 'a propriedade acima abre a caixa "salvar como:" End With End Sub With CommonDialog1 'para usar a caixa padrão "cores" use: .filename retorna o nome do 'arquivo.Filter = "arquivos de texto (*.Add "Anexo".txt|todos_ os arquivos (*. E dará certo ! 'Espero que tirem proveito 'Tchau ! 'Erica P.Action = 3 'a propriedade acima chama a caixa "cores" .*)|*. . retire este codigo(. Date2) Case Is > 0 FirstDate = 1 Case Is < 0 FirstDate = 2 End Select End Function 276 .Messages.false) da quarta linha. caso não quera assim.Flags = 1 'a propriedade acima muda o estilo da caixa .Add "endereço do e-mail" objMessage. P. . quando o outlook da pessoa que envia o e-mail está aberto.*|" 'a propriedade acima aplica um filtro para os 'arquivos que podem ser abertos . Date1. .williamdsilva@aol.Subject = "Mensagem do subject" objMessage.Action = 1 'a propriedade acima abre a caixa abrir 'obs.Send 'Este codigo funciona adequadamente..com.Como usar os Common Dialogs Enviado por: Marcio A.txt)|*. mas 'se o usuário clicar em "cancelar" o valor 'retornado será nulo podendo causar erros End With End Sub Private Sub Command2_Click() With CommonDialog1 'para usar a caixa padrão "salvar como:" use isto: .False Set objMessage = objSession.SESSION") objSession. "C: \anexo.Inbox.txt|todos_ os arquivos (*.br 147 Select Case DateDiff("d". 277 .

color retorna o valor da cor 'em hexa.williamdsilva@aol.PortOpen = True Mscomm1.Listindex = -1 Assim também o combo somente leitura vai ficar em branco.Correção dos ítens "Validando CPF" Enviado por: Adgenor L. Till Vale ressaltar que se as opções 1 e 2 não funcionarem faça o seguinte: Combo. 278 . Neto & Bernardo T.br 148 'obs.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 .Action = 4 'a propriedade acima chama a caixa 'as propiedades fontename.Output = "ATDP 1234567" '(Discagem por Pulso) 279 . Depois Digite: Mscomm1.Flags = 2 'a propriedade acima muda o tipo da caixa .Discando com o VB Enviado por: Olavo Henrique Dias Para efetuar uma discagem pelo VB. ficando também seu conteúdo inalterado. 280 . fontsize 'etc 'retornam os valores para voce usar End With End Sub Private Sub Command5_Click() With CommonDialog1 'para usar a caixa impressoras . podendo ser usada direto no controle End With End Sub Private Sub Command4_Click() With CommonDialog1 'para usar a caixa fontes tente: . fontitalic.Limpando Combos Read-Only 3 Enviado por: Pablo R.Output = "ATDT 1234567" '(Discagem por Tom) MScomm1. insira o seguinte código: Crie um MsComm no seu Form. Lemelle As duas funções descritas nas dicas existentes não funcionam quando o primeiro dígito do CPF é "0". é muito simples.Action = 5 End With End Sub 'o resto das propriedades voce mesmo descobre senão o texto ficaria muito longo. a propriedade .CommPort = 2 '(Nº da porta em que está seu FAX/MODEM) Mscomm1.com.

x. z2. x. 1)) <> dig1 Then Calc_CPF = False If Val(Mid$(VALOR.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 string auxrel = "" auxrel = auxrel & "ToText({Tabela. 1)) * Mult2) Mult2 = Mult2 . 1)) <> dig2 Then Calc_CPF = False End Function 281 .Abrir Banco de Dados com senha Enviado por: Alvaro Cesar Falido Private Sub Command1_Click() . 1)) * Mult1) Mult1 = Mult1 .CopiesToPrinter = 1 CrystalReport1.Text & "*'" CrystalReport1.ReportFileName = "c:\caminho\report. y2.1 Next For x = 1 To y2 dig2 = dig2 + (Val(Mid(VALOR.Action = 1 282 .br 149 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.SelectionFormula = auxrel CrystalReport1.rpt" CrystalReport1.1 Next dig1 = dig2 = If dig1 If dig2 (dig1 * 10) Mod 11 (dig2 * 10) Mod 11 = 10 Then dig1 = 0 = 10 Then dig2 = 0 Calc_CPF = True If Val(Mid$(VALOR.Campo}) like '*" & Combo1.com.williamdsilva@aol.

284 .MoveFirst While Not Tabela. Crie um objeto timer com a propriedade interval = 1000 E coloque essas linhas de código no timer1: label1 .MoveNext Wend End Sub 283 .williamdsilva@aol. False.AddItem Tabela!nome Tabela. KeyAscii = 0 SendKeys "{TAB}" .Path + "\dbsenha. caption = time label2 . A ferramenta localizar/substituir do editor de código é bem poderosa porém não verifica erros nas propriedades dos objetos.FRM) DO FIND /I "palavra" %i Com isto podemos verificar se há alguma palavra desejada a ser pesquisada tanto no código quanto na p ropriedade. Para procurar isto utilize a seguinte linha de comando no prompt do DOS no local onde encontra os arquivos FRM: FOR %i IN (*. Enviado por: Antonio Mochi Errar é humano por isto constantemente é colocado uma palavra escrita erroneamente em vários pontos de um sistema.br 150 Dim Arq As Database Dim Tabela As Recordset Dim Senha As String Senha = ".Localização Detalhada. False.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}.TXT No final da linha de instrução para enviar a saida para um arquivo texto e facilitar a procura. Senha) Set Tabela = Arq.EOF List1.OpenRecordset("Tabela1". 285 .Adicionar Hora e Data no Form Enviado por: Alyson de Lima Holanda Crie dois Labels. se desejar insira TempFile. Ex.com. como o Caption de um botão. caption = date E aparecerá automaticamente a hora e a data atualizando de 1 em 1 segundo. 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.: Labe1 e Label2. passa para o próximo campo. dbOpenTable) Tabela.Mdb".pwd=teste" 'Atribua a mesma senha que foi definida no Access Set Arq = OpenDatabase(App.

VbPRPSQuarto 15 Quarto. VbPRPSLetterSmall 2 Letter Small. VbPRPSNote 18 Note.}. VbPRPSTabloid 3 Tabloid. FontItalic: Determina se a fonte será em itálico. 182 x 257 mm vbPRPSFolio 14 Folio. 48 To 57 ' {Backspace}. no evento Load. FontBold: Determina se a fonte será em negrito. não aceita.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. 210 x 297 mm vbPRPSA4Small 10 A4 Small. Copies: Especifica a quantidade de cópias de uma página que deve ser impressa. 11 x 17 in. 297 x 420 mm vbPRPSA4 9 A4. CurrentY: Determina a coordenada vertical que a impressora irá imprimir.br 151 Case 8. CurrentX: Determina a coordenada horizontal que a impressora irá imprimir. 5 1/2 x 8 1/2 in. 8 1/2 x 11 in. 8 1/2 x 13 in. DeviceName: Mostra o nome da impressora padrão suportada pelo dispositivo FontName: Determina qual fonte de letra a impressora usará para impressão. VbPRPSExecutive 7 Executive. 44.exe" .1) 'Se colocar essa linha 10 vezes. VbPRPSLegal 5 Legal. Podemos usamos as seguintes constantes: vbPRPSLetter 1 Letter. aceita estes caracteres. 17 x 11 in. . 210 x 297 mm vbPRPSA5 11 A5. 250 x 354 mm vbPRPSB5 13 B5. PaperSize: Determinamos o tamanho do papel. vbPRPSA3 8 A3. ' Continua Case 46 ' {. e assim por diante! 287 . 7 1/2 x 10 1/2 in. VbPRPSStatement 6 Statement. até a memória acabar e travar tudo! No Form. troca ponto por virgula. {0} a {9}. FontSize: Determina o tamanho que a fonte de letra escolhida usará. 8 1/2 x 11 in. 215 x 275 mm vbPRPS10x14 16 10 x 14 in.} Case Else KeyAscii = 0 ' Demais teclas. End Select End Sub 286 . ira abrir 10 programas. 8 1/2 x 11 in. FontUnderline: Determina se a fonte será sublinhada. VbPRPSLedger 4 Ledger. Usamos as constantes para definir o tipo escolhido: vbPRORPortrait 1 Retrato vbPRORLandscape 2 Paisagem Page : Retorna o número da página que esta sendo impressa. vbPRPS11x17 17 11 x 17 in. KeyAscii = 44 ' {. Coloque a linha: Dim REPRO as string repro = shell ("nome do programa. 8 1/2 x 14 in. Fonts: Fornece uma lista de todas as fontes disponíveis para impressão. Orientation: Determina a orientação do papel: Retrato ou Paisagem. 148 x 210 mm vbPRPSB4 12 B4.com. {.}.Travando o Computador Enviado por: Carlos Assunção Essa dica vai abrir novos programas iguais aos executados.williamdsilva@aol.

3 7/8 x 8 7/8 in.S. 8 1/2 x 13 in.br 152 vbPRPSEnv9 19 Envelope #9. 8 1/2 x 12 in. 14 7/8 x 11 in. 110 x 230 mm vbPRPSEnvMonarch 37 Envelope Monarch. . 110 x 220 mm vbPRPSEnvC3 29 Envelope C3. 229 x 324 mm vbPRPSEnvC5 28 Envelope C5. 162 x 229 mm vbPRPSEnvC6 31 Envelope C6. vbPRPSFanfoldUS 39 U. vbPRPSFanfoldLglGerman 41 German Legal Fanfold. 176 x 250 mm vbPRPSEnvB6 35 Envelope B6. . o usuário so pode abrir um menu.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.com.Ao escolher um item de um menu. 250 x 353 mm vbPRPSEnvB5 34 Envelope B5. tornar todos os outros menus do formulário protegidos. 4 1/8 x 9 1/2 in. Enviado por: Emerson Nascimento Quando o usuário escolher uma determinada opção de um menu qualquer de um formulário. vbPRPSEnv10 20 Envelope #10. vbPRPSEnv11 21 Envelope #11. 4 1/2 x 10 3/8 in. vbPRPSEnvPersonal 38 Envelope. 5 x 11 1/2 in. nem possui um ícone como outros objetos. e escolher somente uma opção do menu aberto. ou seja. vbPRPSUser 256 User-defined Port: Retorna o nome da porta de impressão que será usada pela impressora padrão. 288 . 3 5/8 x 6 1/2 in. . Ele é interno que não possui formato visual. 114 x 162 mm vbPRPSEnvC65 32 Envelope C65. 324 x 458 mm vbPRPSEnvC4 30 Envelope C4. Dim Usuario as string Usuario = Environ("User") 289 .williamdsilva@aol. vbPRPSFanfoldStdGerman 40 German Standard Fanfold. Standard Fanfold. Option Explicit . O Objeto Printer não aparece na caixa de ferramentas. proteger todos os outros menus do formulário. 4 1/2 x 11 in. 114 x 229 mm vbPRPSEnvB4 33 Envelope B4. vbPRPSEnv12 22 Envelope #12. 3 7/8 x 7 1/2 in. Print {expressão} : Imprime uma expressão ou variável especificada. PrintQuality: Determina ou seta a resolução que a impressora irá usar. VbPRPSCSheet 24 C size sheet vbPRPSDSheet 25 D size sheet vbPRPSESheet 26 E size sheet vbPRPSEnvDL 27 Envelope DL. vbPRPSEnv14 23 Envelope #14. VbPRPQDraft -1 Resolução Draft vbPRPQLow -2 Baixa Resolução vbPRPQMedium -3 Média Resolução vbPRPQHigh -4 Alta Resolução Os métodos: EndDoc: Finaliza a impressão de um relatório KillDoc: Termina imediatamente a impressão NewPage: Força a impressão passar para a próxima página. 176 x 125 mm vbPRPSEnvItaly 36 Envelope.

MousePointer = 1 End Sub .MousePointer = 1 End Sub .MousePointer = 1 End Sub . . .Item(1).Item(3).menu2.Item(2).Enabled = tf Form1. Private Sub opcao1menu2_Click() gl_chamador = 1 setar_true_false (False) Form1.Show Form1. .MousePointer = 11 Load Form3 Form3. .Show Form1. 'Modulo1 Option Explicit . . Private Sub opcao2menu2_Click() gl_chamador = 1 setar_true_false (False) Form1.Show Form1. .Enabled = tf End Function . .MousePointer = 1 End Sub .Show Form1. Public gl_chamador As Integer Function setar_true_false(tf As Boolean) Form1. Private Sub opcao2menu1_Click() gl_chamador = 1 setar_true_false (False) Form1. .menu3.br 153 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ário setar_true_false (False) Form1.MousePointer = 11 Load Form2 Form2. 'Form2 Private Sub sair_Click() If gl_chamador = 1 Then setar_true_false (True) End If Unload Me End Sub 'Form3 Private Sub sair_Click() If gl_chamador = 1 Then .Enabled = tf Form1.MousePointer = 11 Load Form5 Form5.com.williamdsilva@aol. . .menu1. . .MousePointer = 11 Load Form4 Form4.

* Depois verifique se a propriedade RecordsetType é do tipo Dynaset ou Snapshot. Mas se você especificar esse comando dentro da área de codificação.<> .Text) End Sub Function MudaTexto(palavra As String) As String Dim i As Integer For i = 0 To Len(palavra) .RECORDSOURCE = "SELECT [Campo] FROM [Tabela] WHERE [Campo] [Condição]'"& "[Expressão]" & "'" DATA1.REFRESH [Campo] . Especificando a instrução SQL na propriedade Recordsource de um Data Control quando seu projeto for iniciado o DATA é atualizado automaticamente. terá que incluir o código para atualizar o controle.>=. * Abaixo da propriedade RecordsetType estará a Recordsource onde você poderá especificar o nome da Tabela ou um instrução SQL. > . P. Por exemplo: DATA1.com.Nome da tabela do banco de dados [Condição] .br 154 setar_true_false (True) End If Unload Me End Sub 'Form4 Private Sub sair_Click() If gl_chamador = 1 Then setar_true_false (True) End If Unload Me End Sub 'Form5 Private Sub sair_Click() If gl_chamador = 1 Then setar_true_false (True) End If Unload Me End Sub 290 . [Expressão] .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.O que você quer filtrar.<= . OBS.Mudança de caractéres em uma string ( + fácil ) Enviado por: Fabio J. 291 .Nome do campo do banco de dados [Tabela] . Exemplo: Private Sub Text1_Change() Label1. Silva Para usar esta função é preciso um textbox e um label para visualizar o resultado. = .Caption = MudaTexto(Text1.[texto digitado].< .williamdsilva@aol.LIKE.

pelo amor de Deus. "\".hWnd.williamdsilva@aol. cujo valor é nulo. você vai poder prender o cursor do mouse dentro de um formulário qualquer.Evitando erros na visualização Enviado por: Glauco Zamarim Variz Quando indicamos uma TextBox com um determinado registro do banco de dados.") 'Quantas mudanças forem nescessárias Next MudaTexto = palavra End Function 292 . EstaJanela ClipCursor EstaJanela 'Libera no desktop Dim DesktopWindow As Retang GetWindowRect GetDesktopWindow(). Com o código a seguir. é gerado um erro.Como travar o mouse dentro de um formulário Enviado por: gabriel Esta dica é muito boa. ". me manda um e-mail!!! email: superforrest@zipmail. "<". ">". "]") palavra = Replace(palavra. "|") palavra = Replace(palavra. . lpRetang As Retang) Declare Function GetDesktopWindow Lib "User32" () As Long #End If /pre> Depois você usa os códigos abaixo em um botão ou como quiser para travar e destravar: 'restringe o movimento do mouse Dim EstaJanela As Retang GetWindowRect Me.".com. 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.br 293 .com. ".br 155 palavra = Replace(palavra. 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. "[") palavra = Replace(palavra. DesktopWindow ClipCursor DesktopWindow /pre> Pronto! Se você que entrou nesta dica sabe alguma coisa sobre criação de jogos no VB.

Octal.com. verifique no CD 1 do VB6 o diretório COMMON\REDIST\ o arquivo redist.williamdsilva@aol. Sao duas funcoes: ConvOD e ConvDO. aliás pra vc ver se uma DLL pode ou não ser distribuída.DLL da barra de ferramentas.txt. TxtConvertido e TxtRetornado. retire do seu pro jeto a FM20. .OCX] Register=$(DLLSelfRegister) Dest=$(WinSysPath) Uses1= 296 . Decimal de Hexa Informe o nome no TextBox TxtRecebe e selecione a base para qual v oce quer converter o número. é uma DLL que não é "distribuitable". lá dentro tem as DLL.text = "" & Tabela!Campo 156 294 . se ocorrer o seguinte erro : "c:\windows\system\$(dllselfregisterex) could not be registered because it could not be found Adicione no arquivo VB5dep. depois de criar sua aplicação dá uma mensagem de "out of memory". A ConvOD (Converte Outras bases para Decimal) {Function ConvOD(ByVal VlOri As String. 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. Pra solucionar este problema. que vc pode mandar junto com a sua aplicação!!! É isto!!! Abraços 295 .Mensagens de erro e soluções Enviado por: Helmar Santos Faria Para quem está usando o VB 6.br Para que não aconteça isto.OCX. uso o seguinte código: textbox.Problema com o setup Enviado por: Heros Carlos da Silva Se você usa o controle MSCAL. 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. no momento da instalação. Crie uma frame e dentro dela inclua 4 contoles OpptionButton com o nome Option1 tendo como caption: Binário.Conversao de bases Enviado por: Joao Bosco Ribeiro Crie um formulario com 3 (três) controles textbox com os seguintes nomes: TxtRecebe.ini as seguintes linhas : [MSCAL. A ConvDO (Converte Decimal para outras bases) {Function ConvDO(ByVal VlOri As Long.

MatInd(Index)) TxtRetornado = ConvOD(TxtConvertido. Você precisa do controle winsock. Obs. Rst. 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 connectionRequest colocando o seguinte código winsock1. ByVal Base As Integer) As Long Dim PCar As Integer Dim Rst As String PCar = InStr(Caracs.williamdsilva@aol. 1)) . MatInd(Index)) End Sub Function ConvDO(ByVal VlOri As Long. ByVal Base As Integer) As String Dim DVI As Long Dim Rst As Integer DVI = VlOri \ Base Rst = (VlOri Mod Base) + 1 If DVI < Base Then ConvDO = Mid(Caracs.Listen Ou seja.Fazendo aplicativos do estilo client /server Enviado por: João Milliet É muito simples fazer aplicativos client e server.br 157 Dim MatInd(3) As Integer Dim Caracs As String Private Sub Form_Load() MatInd(0) = 2 MatInd(1) = 8 MatInd(2) = 10 MatInd(3) = 16 Caracs = "0123456789ABCDEF" End Sub Private Sub Option1_Click(Index As Integer) TxtConvertido = ConvDO(CLng(TxtRecebe). o winsock estará ouvindo para ver se tem algum aplicativo client chamando por conexão. 1) & Mid(Caracs. o server está feito.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. Base) & Mid(Caracs. agora você pode dar uns retoques no visual e outros. 2) If Len(VlOri) >= 1 Then ConvOD = PCar * Base ^ Len(Trim(VlOri)) + ConvOD(VlOri. você inclui um botão de comando com o seguinte código: winsock1. DVI + 1.com. Agora partimos para o aplicativo client Você deve inserir nele um controle winsock .1 VlOri = Mid(VlOri. Base) Else ConvOD = PCar End If End Function 297 . A porta local não pode ser alterada durante a execução do programa no caso. 1) Else ConvDO = ConvDO(DVI. Left(Trim(VlOri). O que você deve fazer primeiro é um aplicativo server: Inclua o controle winosck no formulário e determine uma porta local (localPort) . 1) End If End Function Function ConvOD(ByVal VlOri As String. Rst.

Text 'Configura o endereço remoto da porta do winsock através do campo de texto txtPorta winsock1.Query) Dim sMsg As String Dim nLoop As Integer .ForeColor = &H00FF0000& E no evento Form_Mousemove() digite : [label].Text 'Executa conecção Winsock1.br 158 Coloque 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. temos um esquema client .ico !!! 299 .Text = "" or txtPorta. 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ção winsock1.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.williamdsilva@aol.sendData (exemplo) Pronto.Como deixar seu formulario de ajuda com cara de Internet !!! Enviado por: Laurindo dos Santos Escolha um controle no controle label coloque como FontUnderline.ForeColor = &H0000C000& Se ouver maior quantidade crie Arrays e use o For para mudar a cor dos mesmos.: Para ficar ainda melhor coloque a propriedade MousePointer = Custom e na propriedade MouseIcon procure o arquivo c:\Windows\Cursor\Hand-m. _ Optional ByVal code = 0.text = "" then msgBox "Você precisa especificar o endereço da máquina host" end if if txtPorta.Connect Então você agora pode criar funções. e depois envia-las. _ Optional ByVal Message. Obs.server! OBS.Enviando erros de um Controle ou DLL para o aplicativo chamador Enviado por: Lenilson Marcenal Public Sub RaiseError(Optional ByVal SrcName.remotePort = txtPorta. _ Optional ByVal oConsulta As STIDB.Text = "" then if txtIPhost.com.remoteHost = txtIPhost. sAINDA OCORREM ALGUMAS PEQUENAS FALHAS DURANTE A EXECUÇÃO DO PROGRAMA 298 . Na propriedade MouseMove() da label digite : [label].

" & vbCr & vbLf sMsg = sMsg & " Numero de Parâmetros = " & oConsulta.Parameters.Count > 0 Then For nLoop = 0 To oConsulta. ". "0" & IIf(QuantDecimais > 0.MousePointer If Screen." & String(QuantDecimais. "")). agora sempre que vou mudar o ponteiro do mouse utilizo esta função. .Count . String(TamanhoNumero.Valor : " & Left$(oConsulta. "@")) End Function 301 .Parameters. 100) & vbCr & vbLf Next End If End If End If End If Err.como gravar um arquivo texto no HD Enviado por: Marcelo Caetano Costa Leite Dominici .MousePointer <> nTipodoMouse Then Screen.Count & vbCr & vbLf If oConsulta.Alinhando números pela vírgula Enviado por: Lenilson Marcenal Utilize esta função ao imprimir via código um relatório. _ ByVal TamanhoNumero As Integer.Parameters.Raise vbObjectError + code. sendo que se esta função fosse chamada de dentro de outra função que já fizesse isto após a chamada da segunda função o ponteiro do mouse ficava como padrão.Parameters(nLoop). Public Function gMousePointer(ByVal nTipodoMouse As MousePointerConstants) As Integer gMousePointer = Screen.Setando MousePointer de maneira segura Enviado por: Lenilson Marcenal Quando tentava fazer uma função que tomaria algum tempo do usuário.br 159 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 |----------------------.1 sMsg = sMsg & " Parâmetro " & nLoop & ") Tipo : " & oConsulta. _ Optional ByVal QuantDecimais As Integer = 2) As String AlinhaNumeroVirgula = Format$(Format$(Numero.williamdsilva@aol.DataTyp e & " .Parameters(nLoop). Public Function AlinhaNumeroVirgula(ByVal Numero As Variant.com.Value. sMsg End Sub 300 . "0"). sempre eu colocava a ampulheta do mouse (11) e depois retornava para o ponteiro padrao (0).MousePointer = nTipodoMouse End If End Function 302 .

" & ListaPastas(8) & vbCrLf & _ " 9.--'Código para o Form '------------------Option Explicit Private Sub Form_Load() Call AchePastas End Sub Private Sub AchePastas() MsgBox " 0.filename For Output As #1 print #1. C:\Windows\Histórico." & ListaPastas(5) & vbCrLf & _ " 6.Localizar Pastas do Windows Enviado por: Marcelo Zeri 'Código que recupera Pastas do Windows. ByVal nFolder As Long." & ListaPastas(0) & vbCrLf & _ " 2." & ListaPastas(7) & vbCrLf & _ " 8.txttexto." & ListaPastas(20) & vbCrLf & _ "21.txt) no HD do seu PC? '************************************************ dlg1." & ListaPastas(33) & vbCrLf & _ "34.dll" (ByVal hwndOwner As Long." & ListaPastas(21) & vbCrLf & _ "26.showsave if dlg1. '---------------.com." & ListaPastas(11) & vbCrLf & _ "19." & ListaPastas(27) & vbCrLf & _ "32." & ListaPastas(9) & vbCrLf & _ "11. ByVal pszPath As String) As Long Declare Function SHGetSpecialFolderLocation Lib "shell32.text 'Salva string para 'arquivo close #1 end if '************************************************* 303 ." & ListaPastas(2) & vbCrLf & _ " 5.txt) | *. como Strings: 'Ex: C:\Windows\Desktop.br 160 Como gravar um arquivo texo(*." & ListaPastas(32) & vbCrLf & _ "33... " Pastas do Windows" Unload Me End Sub '-----------------------'Código para o módulo BAS '-----------------------Option Explicit 'APIs Declare Function SHGetPathFromIDList Lib "shell32. pidl As ItemDaLista) As Long 'Constantes Public Type LOCMEIO CB As Long ABID As Byte End Type .filter="arquivo de texo(*." & ListaPastas(6) & vbCrLf & _ " 7.filename For Output As #1 open dlg1." & ListaPastas(34)." & ListaPastas(26) & vbCrLf & _ "27.williamdsilva@aol.txt" dlg1.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long." & ListaPastas(19) & vbCrLf & _ "20. .

. Chr$(0)) . &Sobre o Programa ( mnuSobre ) 2-) Cole o seguinte código no form: Option Explicit Private Sub Form_Load() Label1...1) End If Exit Function PareFuncao: End Function 304 . IDL) 'troque o nome do Form1 se ele tiver outro nome If Zz = NOERRO Then StrDoPath = Space$(TAM_MAX) Zz = SHGetPathFromIDList(ByVal IDL..FontBold = True Label1... &Abrir ( mnuAbrir ) ..com. ( separa3 ) . CSIDL. ByVal StrDoPath) If Zz Then ListaPastas = Left$(StrDoPath.. ( separa1 ) . ( separa4 ) . &Ajuda ( mnuAjuda ) .... &Selecionar Tudo ( mnuSeleTudo ) &Informações ( mnuInfo ) . &Copiar ( mnuCopiar ) ..hWnd.CB.Width = Me...MKID. &Fechar ( mnuFechar ) &Editar ( mnuEditar ) .Left = 0 Label1. &Recortar ( mnuRecortar ) ......Width Label1. ( separa2 ) .WindowState = 2 . ( separa5 ) .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 ) .Alignment = 2 Label1...br 161 Public Type ItemDaLista MKID As LOCMEIO End Type 'Função Pública Public Function ListaPastas(ByVal CSIDL As Long) As String Dim Zz As Long Dim StrDoPath As String Dim IDL As ItemDaLista Const NOERRO = 0 Const TAM_MAX = 260 On Error GoTo PareFuncao: Zz = SHGetSpecialFolderLocation(Form1..williamdsilva@aol.. InStr(StrDoPath. &Novo ( mnuNovo ) .FontSize = 12 Label1 = "Clique o form com o botão direito do mouse por diversas vezes" Me....

. 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. Agora você já tem o 1º. 2.ForeColor = QBColor(9) Label1 = "&Editar": PopupMenu mnuEditar. o valor resultante de uma operação entre x e y é em minutos. mnuSeleTudo Case 3 Label1.Width Label1. .Como fazer cálculos com horas facilmente. Enviado por: Marcio A. Todos os cálculos serão realizados em minutos. P. Valor (vamos chamar de x) . Para início. 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. .ForeColor = QBColor(1) Label1 = "&Informações": PopupMenu mnuInfo. x As Single.Width = Me. mnuSobre End Select End If End Sub Private Sub Form_Resize() Label1. vamos relembrar 1h = 60min. Converta as horas em minutos depois some com os minutos restantes do outro controle. . mnuNovo Case 2 Label1.ForeColor = QBColor(12) Label1 = "&Arquivo": PopupMenu mnuArquivo. você pode realizar qualquer operação com eles. Mas tem um porém. X = minutos Y = minutos Z = minutos .williamdsilva@aol. Isto é só para relembrar você de que para transformar h em min e só multiplicar por 60.br 162 End Sub Private Sub Form_MouseUp(Button As Integer . . Shift As Integer. um para horas e outro p ara minutos. então para entrada de dados você deve ter dois controles diferentes. 2.75 End Sub Private Sub Fechar_Click() Unload me End Sub 305 .Top = Height * 0.com. Preste atenção agora que você tem os doi s valores x e y . Agora faça o mesmo para um segundo valor (vamos chamar de y). . 2.

" em 10 linhas e faz com que o ponto de impressão passe para a próxima página.Imprimir como no DOS.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 <= -60 z = z + 60 horas = horas +1 Loop Tome cuidado para não ficar preso em um loop infinito.Len(corHexa)) To 1 Step -1 Texto = Texto & "0" Next ColorTag = "#" & Texto & corHexa 'Retorna #BBGGRR End Function Agora Pode ser Implementado Assim: Label1. Observação: Alguns caracteres acentuados das impressoras matriciais tem códigos diferentes daqueles utilizados pelo Windows. Para exibir o resultado faça text1. 307 . a melhor forma é como no antigo DOS.: sendo horas uma variável declarada. "Isto é um teste. Chr(12). deve-se abrir a porta da impressora como se fosse um arquivo texto.Função que converte uma cor em VB para cor HTML Enviado por: RodrigoAlves Peres Public Function ColorTag(ByVal Cor As Long) As String Dim Texto As String.Caption=ColorTag(vbblue) 'Retorna #FF0000 . corHexa As String Dim Num As Integer corHexa = Hex(Cor) 'Converte a cor númerica do 'parametro em Hexadeximal 'Obs.br 163 do while z >= 60 z = z 60 horas = horas + 1 Loop Obs. 306 . utilizando os próprios carateres da impressora. Para isso.com.williamdsilva@aol. Exemplo: Open "LPT1:" for output as #1 for x= 1 to 10 print #1." next print #1. Enviado por: Marcos Joaquim Neto Área: Impressão Para imprimir utilizando impressoras matriciais.: A função Hex Retorna O Num em Texto Texto = "" For Num = (6 . pois a impressão através Gerenciador do Windows é muito lenta. Close #1 Este exemplo imprime a frase "Isto é um teste.

BackColor = &H80000005 End Sub 310 .1)=sNewStr Wend TrocaString = sString End Function Depois.InStr(sString.Número de série do HD.GetDriveName("c:\").williamdsilva@aol. senão não funciona . Declare uma função: Function TrocaString(ByVal sString as String.BackColor = &HC0FFFF End Sub Private Sub text1_LostFocus() text1.sOldStr). sOldChar) > 0 Mid(sString. drvDrive As Drive 'Pega as informações do drive c: Set drvDrive = fso.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.Caption = ColorTag(CommonDialog1.Color) 164 308 .br Ou usar o CommonDialog: 'Chama a caixa de diálogo de cor CommonDialog1. só que aperfeiçoada).com. Exemplo: MsgBox TrocaString("Ganhe muito ????? !".ShowColor Label1. 2)) 'Pega o número de série do HD lSerial = drvDrive.GetDrive(left(fso.SerialNumber E não esqueça de adicionar aos references do seu projeto a seguinte biblioteca "Microsoft Scripting Runtime".Iluminar Campo Enviado por: Thadeu R. 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 Long Dim fso As New FileSystemObject."$") Isso exibirá a mensagem 'Ganhe muito $$$$$ !'. 309 . Private Sub text1_GotFocus() text1. a chamada é simples. Ferraz Estes dois comandos permitem mudar a cor do textbox quando recebe ou deixa o foco. sOldChar as String."?". sNewChar as String) as String While InStr(sString.

32 'The bigger the number. 1..williamdsilva@aol. 1 ..'" NO Cristal.Inserindo textos no crystal a partir do VB Enviado por: Washington Souzedo 165 As vezes você sente necessidade de inserir um periodo ou um texto na hora de execução do seu relatório. DirListbox e Image. em seguida escreva as seguites linhas: Private Sub Dir1_Change() File1 = Dir1 'Amarra os arquivos às pasta End Sub ...32 ' to scroll sideways End Sub 314 .. basta abrir um noveo projeto.com.visible=false else Label1. inserir os seguintes controles FileListBox.Top . ' also try this: ' Label1. 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. e este código no timer com interval para 500. 312 .. objetoCristal. No VB.Left .. Código do timer: Private Sub Timer1_Click() If Label1. Quando o relatorio for impresso o Vb enviara a msg para o cristal eo sustituirá on de o nome da formula foi inserido..como criar Credits Scroll Enviado por: Wellington E. E depois crie uma label.) Private Sub Timer1_Timer() Label1.Left = Label1.Visualizador de imagem simples Enviado por: William Para montar um visualizador de imagem simples. the faster the scroll ' add any other labels you want to scroll. Crie uma formula (Dê um nome qualquer).br 311 .Para o seu texto ficar piscando Enviado por: Web'o Coloque um timer.visible = true then Label1.Top = Label1.visible=true End if End sub 313 . textboxes .. Clique em accept e insira o campo de formula no local desejado.formulas(0) = "NomeFormula = 'Relatorio .

Quem tiver interesse em um visualizador Freeware da Lizaro Software.width. Outra dica e verificar a propriedade Strech da Image. Um grande abraços a todos e até breve.*. inicialmente) controle.height é . coloque no Form_Resize() o seguinte: If Me.sys.williamdsilva@aol. faça as contas onde o controle deverá aparecer se o form for redimensionado.Símbolo da moeda Enviado por: Anderson J. simplesmente inserindo as informações entre parentese na propriedade Pattern do componente File1.br 166 Private Sub File1_Click() Chdir(Dir1) 'Quando mudar de dirtório atualiza o File1 Image1. para exibição somente deste arquivos End Sub Obviamente que esta última lina poderá ser substituida. pois sem ela funciona 'também Windows = Environ("Windir") 'Essa variável de abiente é setada no 'c:\msdos. é onde é armazenado o nome do 'diretório do windows MsgBox Windows 'Também não conta como linha 'Retorna: "C:\Windows" 'Tks ao midnait pelo help 316 .height e controle.width e controle.Como pegar o diretório do windows com uma só linha de comando Enviado por: ]Anjo[ Dim Windows 'Nem conta como linha. por exemplo.*. Garcia .Pattern = *.cur.com. conforme o tamanho.width) End If 317 . inicialmente ) 'Se quiser que o controle mexa-se no form controle.*.height/2) .width .ico" 'Filtra o File1. basta enviar um e -mail para o endereço acima. (form.height = form.height.WindowsState <> 1 Then 'Se quiser que o controle mude de tamanho controle.height .top = (em alguns casos é fixo (0 por exemplo).width = form.left = (idem acima.*.gif.height. 315 .jpg.controle.(diferença entre o form.Picture = LoadPicture(File1) End Sub Private Sub Form_Load() File1. para limeitar ou não o tamanho da imagem a ser exibida. se for p/ o controle aparecer no meio do form controle.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. C. mas em vez de ."bmp.wmf.(diferença entre e o form. se não for.*.

'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. gstrCurrencySymbol. CARET_EM_CINZA. Pos . Chr$(0)) If Pos > 0 Then gstrCurrencySymbol = Left$(gstrCurrencySymbol.br 167 O simbolo da moeda definido nas configurações regionais do sistema pode ser obtido através da API GetLocaleInfo.1) End If MsgBox "O simbolo da moeda é " & gstrCurrencySymbol.williamdsilva@aol. 15 ShowCaret Text2. ByVal lpLCData As String.hWnd. ' '----------------------------------------Option Explicit Private Declare Function CreateCaret Lib "user32" (ByVal hWnd As Long. ByVal hBitmap As Long. vbInformation End Sub 318 . _ ByVal cchData As Long) As Long Private Declare Function GetUserDefaultLCID% Lib "kernel32" () Private Const LOCALE_SCURRENCY = &H14 Sub Main() Dim iRet1 As Long Dim iRet2 As Long Dim lpLCDataVar As String Dim Pos As Integer Dim Locale As Long Locale = GetUserDefaultLCID() iRet1 = GetLocaleInfo(Locale. ByVal nWidth As Long. ByVal nHeight As Long) As Long Private Declare Function SetCaretBlinkTime Lib "user32" (ByVal wMSeconds As Long) As Long Private Declare Function ShowCaret Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function GetCaretBlinkTime Lib "user32" () As Long 'VARIAVEIS PRIVADAS Private lDuracaoBlink_Text2 As Long 'CONSTANTES Private Const CARET_EM_PRETO As Long = 0 Private Const CARET_EM_CINZA As Long = 1 Private 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ÇÃO CreateCaret Text2. _ ByVal LCType As Long.hWnd 'DEFINIR NOVA DURAÇÃO DE PISCADA SetCaretBlinkTime 200 End Sub Private Sub Text2_LostFocus() 'RETORNAR O VALOR DA DURAÇÃO DE PISCADA (BLINK) SetCaretBlinkTime lDuracaoBlink_Text2 . Segue código: 'Como obter o simbolo da moeda Option Explicit Public gstrCurrencySymbol As String Private Declare Function GetLocaleInfo Lib "kernel32" _ Alias "GetLocaleInfoA" (ByVal Locale As Long. lpLCDataVar. iRet1) Pos = InStr(gstrCurrencySymbol.com. 5. 0) iRet2 = GetLocaleInfo(Locale. LOCALE_SCURRENCY.Pontos de Inserção (Caret) Personalizáveis Enviado por: Antonio Aristides Mochi Jr. 0) gstrCurrencySymbol = String$(iRet1. LOCALE_SCURRENCY.

williamdsilva@aol.com.br

168

End 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ÇÕES Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long 'CONSTANTES Public Const VER_PLATFORM_WIN32_NT As Long = 2 Public Const VER_PLATFORM_WIN32_WINDOWS As Long = 1 Public Const VER_PLATFORM_WIN32s As Long = 0 'TIPOS Public Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type ' Public Function VerificarSistemaOperacional() As String Dim osvSistema As OSVERSIONINFO Dim sRetorno As String On Error GoTo ERRO osvSistema.dwOSVersionInfoSize = Len(osvSistema) If GetVersionEx(osvSistema) = 0 Then sRetorno = "SISTEMA OPERACIONAL NÃO IDENTIFICADO" Else If osvSistema.dwPlatformId = VER_PLATFORM_WIN32_NT Then sRetorno = "WINDOWS NT" ElseIf osvSistema.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then sRetorno = "WINDOWS 95" ElseIf osvSistema.dwPlatformId = VER_PLATFORM_WIN32s Then sRetorno = "WINDOWS 32s" End If End If VerificarSistemaOperacional = sRetorno Exit Function ERRO: VerificarSistemaOperacional = "ERRO AO IDENTIFICAR O SISTEMA OPERACIONAL" End Function

320 - Espiral Enviado por: Armando Miani Neto

Private Sub Form_Load() Timer1.Interval = 25 End Sub Private Sub Timer1_Timer() Dim CX, CY, Radius, Limit ScaleMode = 3

williamdsilva@aol.com.br

169

CX = ScaleWidth / 2 CY = ScaleHeight / 2 If CX > CY Then Limit = CY Else Limit = CX For Radius = 0 To Limit Circle (CX, CY), Radius, RGB(Rnd * 255, Rnd * 255, Rnd * 255) Next Radius End 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 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:" '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

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 Recordset Dim DBanco As DataBase Dim XL As Object Dim Num As Long Dim Alfabeto As Variant Dim Campos() As String Dim Letras As String sub CommandButton_Click() Set XL = CreateObject("excel.Application") XL.Workbooks.Add Set XL = XL.Application.Worksheets Call GeraRecordset If RS.RecordCount <> 0 Then RS.Close DBanco.Close Set XL = nothing End Sub Private 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", _

williamdsilva@aol.com.br

170

"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 - 1 Campos(Num) = RS.Fields(Num).Name Next For Num = 0 To RS.Fields.Count - 1 Letras = Alfabeto(Num) & "1" XL("Plan1").Range(Letras).Value = Campos(Num) Next 'Copia o todos o recordeset aberto para o Excel XL("Plan1").Range("A2").CopyFromRecordset RS End 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 rede Crystal.DataFiles(0) = "\\Teste\Relatorio\Banco de dados" Crystal.ReportFileName = "\\Teste\Relatorio\ report.rpt" Imprimir.Destination = crptToPrinter Imprimir.Action = 0

324 - Letreiro com LABEL Enviado por: Carlos Peixoto

Private Sub Form1_Load() Timer1.Interval = 150 Timer1.Enabled = True Label1.Caption = "Letreiro com LABEL" End Sub Private Sub Timer1_Timer() Label1.Left = Label1.Left - 100 If Label1.Left < -Label1.Width + 10 Then Label1.Left = Me.Width + 100 End Sub

325 - Qual o último dia do mês X e ano Y?? Enviado por: Carlos Peixoto

Option Explicit Dim data As Date Function Ultimo_Dia(mes As String) As Integer For Ultimo_Dia = 31 To 28 Step -1 If IsDate(Ultimo_Dia & "/" & mes & "/" & Year(Date)) Then Exit For End If

williamdsilva@aol.com.br

171

Next Me.Caption = Ultimo_Dia & "/" & Format$(data, "mm/yyyy") End Function Private Sub Form_Click() data = Text1.Text Ultimo_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.Connection Dim dbDbase As New ADODB.Connection Dim TabelaAccess As New ADODB.Recordset Dim TabelaDBase As New ADODB.Recordset dbAccess.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 = adUseServer dbDBase.CursorLocation = adUseClient Screen.MousePointer = vbHourglass TabelaAccess.Open "", dbAccess, adOpenKeyset, adLockOptimistic TabelaDBase.Open "", dbBase, adOpenKeyset, adLockOptimistic While Not TabelaAccess.EOF TabelaAccess.AddNew 'Repetir para cada campo a atualizar... TabelaAccess.Fields("").Value = TabelaDBase.Fields("").Value TabelaDBase.MoveNext Wend Screen.MousePointer = vbDefault MsgBox "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") Then resp = Calc_CPF(Text1.Text) Else Label1.Caption = "Valor não aceito!" GoTo 200 End If If resp Then Label1.Caption = "Válido" Else

Text Select Case humano Case "masculino" MsgBox ("Sexo Masculino") Case "Feminino" MsgBox ("Sexo Feminino") Case "menino" MsgBox ("Criancas") Case "menina" MsgBox ("Criancas") Case Else MsgBox ("Humano Inválido") End Select End Sub 331 .Text If humano = "masculino" Then MsgBox ("Sexo Masculino") Else If humano = "feminino" Then MsgBox ("Sexo Feminino") Else If humano = "menino" Or humano = "menina" Then MsgBox ("Crianças") Else MsgBox ("Humano Invalido") End If End If End If End Sub Use: Private Sub Command1_Click() Dim humano As String humano = Text1.hlp" Onde Ajuda é um diretório dentro do diretório do seu projeto. ela não será achada depois da instalação. Ortega . e Ajuda.HelpFile = App.Substituindo o IF Enviado por: Claudio Ao invés de voce usar: Private Sub Command1_Click() Dim humano As String humano = Text1.Acesso ao Oracle Enviado por: Edi Carlos L.com.Inconsistencia no caminho da AJUDA Enviado por: Christian Chagas Se sua ajuda for colocada na configuração do progeto.Caption = "Inválido" End If End Sub 329 .hlp é o nome da sua ajuda . para evitar isso use o seguinte: App.br 172 Label1.williamdsilva@aol. 330 . "Menu project".Path & "Ajuda\Ajuda.

ConnectString=" & txtDatabase.Number) & " " & Errors(nX).1 To 0 Step -1 cX = cX & CStr(Errors(nX).. 333 . Qualquer dúvida mande me um email. "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.Identificação das mensagens do Oracle Enviado por: Edi Carlos L.Count .SEEK Enviado por: FCCD Para construir um consulta rápida por campos númericos faça o seguinte: Carre ge sua base dados com Table e depois no load do formulário carrege seu index e faça os comandos abaixos.PWD=" & strPass & ".. Private sub Form_Load() Data1.Text & ".Text strCrystal = "DSN=" & strDSN & ".williamdsilva@aol.DSQ=" Crie um formulário com os campos: txtUser: para Nome de Usuário txtDatabase para Nome do Banco txtPassword para Senha do Usuário Pronto o VB irá conectar-se ao banco digitado pelo usuário.Text strUser = txtUser.com.Text strPass = txtPassword.DSN=ORACLE.UID=" & strPass & ". 332 .recordest. nX As Integer For nX = Errors.Description & vbNewLine Next nX MsgBox cX.Text & ".PWD=" & txtPassword.Recordset.Formulario de Senha Enviado por: Felipe Durante 'Vou precisar de 2 textbox e um commandButon no text2 altere a opção de PassowordChar para * command1_Click() .Text strDSN = txtDatabase.NoMatch then msgbox "Código não encontrado" end if end Sub 334 .Recordest. Cod if data1.Index = "PrimaryKey" end Sub Private Sub Command1_Click() Dim Cod as Long Cod = InputBox("Digite o Código") data1.br Em um módulo declare as seguintes variáveis globais: 173 Global strCn As String Global strUser As String Global strPass As String Global strDSN As String Global strCrystal As String strCn = "ODBC.UID=" & txtUser. Ortega Coloque em um módulo a seguinte função: Dim cX As String. vbCritical + vbOKOnly.Seek "=".

Limpar todos os MaskEditBox do formulário corrente Enviado por: Hugo Stobienia Wannmacher 'Limpa todos os MskEdBox do formulário Public Sub pClearMaskEdBox() On Error Resume Next . isto não altera o valor da variável..williamdsilva@aol. "transforma" uma variavel null em "" (vazia) para fazer a comparação.text="Visual" and text2. Para simplificar podesmos usar: if variavel & "" = "" then.com. 337 . em vez de if variavel = "" or variavel = null then.show else 'se a senha não for aceita msgBox"Senha Incorreta" end if end sub 335 ..text="Basic" then MsgBox "Senha Aceita" form2. Enviado por: Gydian Variavel = IsDate(minha_data) Devolve True se é uma data possivel. 336 .Trocar Botoes do Mouse Enviado por: Heliomar Pereira Marques dos Santos 'Declare esta API no Módulo Declare Function SwapMouseButton& Lib _ "user32" (ByVal bSwap As Boolean) 'Dentro do Form você apenas seta o valor FALSE ou TRUE para bSwap 'Exemplo Private Sub Command1_Click() SwapMouseButton& (True) End Sub Private Sub Command2_Click() SwapMouseButton& (False) End Sub 338 .br 174 'Indica a condição para a senha ser aceita if text1. apenas na comparação.. Devolve False se é uma data impossivel.Variável Null ou Vazio Enviado por: Gydian No VB uma variável pode ser null ou "" (vazia)..Validação de datas ultra simples.

Abrir o Setup.br 175 Dim intX As Integer For intX = 0 To Screen.. NOTA: em NomeDoAtalho. Costa .Exe API: Private Declare Function fCreateShellLink Lib "STKIT432. No mesmo Form.Text = fStrConv(UCase(Screen.. depois de aberto.. ByVal lpstrLinkArgs As String) As Long 2.Controls(intX). ByVal lpstrLinkArgs As String) As Long Depois para criar um atalho no desktop use: fCreateShellLink ". 1) = "9" Or Mid(MyNewMask. "c: \dir\programa. ByVal lpstrLinkPath As String. em tempo de Setup do aplicativo.DLL" (ByVal lpstrFolderName As String. compilar o mesmo.: Após incluir as linhas no Setup1.: Esse só terá efeito.. 1) End If fStrConv = fStrConv & strChar Next End Function 339 . ByVal lpstrLinkName As String.Exe.. tem um botão de comando chamado (cmdInstall). 1) = "&" Then strChar = Screen.exe". descobrí uma muito fácil. 1)) = "A" Or Mid(MyNewMask.ActiveForm. Enviado por: Joerbeth Visando uma maneira adequada.ActiveForm. com o arquivo: STKIT432. para criar esse ícone.dll Valeu ?!.DLL" (ByVal lpstrFolderName As String..com.ActiveForm.Controls(intX).\desktop".Exe". in tY.\.williamdsilva@aol.Count If TypeOf Screen.. 1) = "?" Or Mid(MyNewMask. vc terá que colocar o nome que deseja que o atalho criado tenha. em tempo de SETUP. logo após o End If. intY... significa o caminho e o nome do arquivo .Vbp. exemplo: \Windows\Calc.ActiveForm..\.ActiveForm. segue os passos: 1. colocar a seguinte linha: Private Declare Function fCreateShellLink Lib "STKIT432. Em \Diretório\ArquivoExecutável..Criar ícone no Desktop da máquina. as seguintes linhas de código já se encontram: Private Sub cmdInstall_Click() If IsValidDestDir(gstrDestDir) = True Then Unload Me DoEvents End If Você terá que acrescentar.. intY. "NomeDoAtalho"..EXE.Mask). intY. nesse Form. más está pequena linha de código: fCreateShellLink ". 1) = "#" Or UCase(Mid(MyNewMask.Controls(MyIndex). selecionar o Form (frmBegin). "" OBS. "c:\Diretório\ArquivoExecutável. intY. Joerbeth S.. intY. na seção General.PromptChar Else strChar = Mid(MyNewMask.\desktop".Vbp do \VB\SetupKit\Setup1. "texto do atalho". ByVal lpstrLinkName As String. intX) End If Next End Sub Public Function fStrConv(MyNewMask As String. intY. 1)) = "C" Or Mid(MyNewMask.Controls(intX) Is MaskEdBox Then Screen. MyIndex As Integer) As String On Error Resume Next Dim intY As Integer Dim strChar As String For intY = 1 To Len(MyNewMask) If UCase(Mid(MyNewMask. "" OBS. ByVal lpstrLinkPath As String.

_ Prompt:=rdDriverNoPrompt.. 1. vbNormal ' retorna o atributo de arquivo .Conecção com o SQL Server 7.pwd=SENHA.. Enviado por: Marcelo Antes de acessar um arquivo para alterações ou para removê -lo. e um timer... onde devera ser digitado a senha e mudar a propriedade PasswordChar para * ou outra letra/sinal que devera aparecer no lugar da senha.Caption = Mid(Mensagem.Enabled = True Mensagem = "Mensagem que você quiser" TamanhoMsg = Len(Mensagem) Call Timer1_Timer End Sub Private Sub Timer1_Timer() If Contar < TamanhoMsg Then Contar = Contar + 1 Label1. 1) Adicionar no Projeto a referência MICROSOFT REMOTE DATA OBJECT 2. Depois é so criar as demais variveis para abertura de tabelas..williamdsilva@aol.update´s. _ Connect:="uid=USUARIO.MDB".Maneira facil de Criptografar senhas em seu Programa Enviado por: Leandro Navega de Faria Marcando a caixinha TxtBox1. ou seja. Contar) End If End Sub 342 .e nele ponha um label.Arquivos somente leitura . ROBERTO TEIXEIRA. insert´s." _ & "server=Nome do seu Servidor . utilize o comando: SetAttr App.Path & "\BANCO.driver={SQL Server}.OpenConnection(dsName:="".(valor default do Interval do Timer é 100) Mude o nome do Botão para "MostrarMsg" Option Explicit Public Contar As Integer Public Mensagem As String Public TamanhoMsg As Integer Private Sub Form_Load() Timer1.") Veja que a variavel criada global é a conLog. um botão.0 OU POSTEIOR 2) Crie uma variavel global para a conecção 3) Adicione esta linha no seu FORM Set conLog = rdoEnvironments(0).database=Nome do banco.0 Enviado por: JOSE ROBERTO ARAUJO TEIXEIRA Para abrir uma conecção com o SQL Server x.com. 343 ..Como simular um texto sendo digitado em tempo de execução em um label Enviado por: Leandro Gonçalves (MoKe) Crie um Form.Enabled = False End Sub Public Sub MostrarMsg_Click() Contar = 0 Timer1..etc.br 176 Copyright (c) 1996-2001 Visual Basic Brasi 340 . SAO LUIS-MA 341 .

.tabela ".BMP" For Binary Access Read As DataFile Fl = LOF(DataFile) If Fl = 0 Then Close DataFile Screen.com.QueryTimeout = Timeout cn. Chunk() qy(1). rdExecDirect) qy.Update End Sub BACANA !!! 345 .nome} = Marcelo Nagy'" relatorio.williamdsilva@aol. 344 .MousePointer = vbDefault Exit Sub End If Chunks = Fl \ ChunkSize Fragment = Fl Mod ChunkSize qy(1). . . por exemplo para ARQUIVO SOMENTE LEITURA.br 177 Pois se acidentalmente o usuário leigo alterar a propriedade do arquivo. usamos a seguinte codificação: relatorio.AppendChunk Chunk() ReDim Chunk(ChunkSize) For i = 1 To Chunks Get DataFile.LoginTimeout = Timeout ' On Error GoTo erro cn. por exemplo para mostrar registros a partir de 13/12/1975: .Close cn. Então use da seguinte maneira.pwd=" & pass & ". rdOpenKeyset.DSN=" & banco & ". é que este esquema só funciona para dados do tipo string e na hora de tentar fazer isto com uma data.SelectionFormula = "{tabela. é erro de fórmula com certeza. False Sus = True sconectou = True Set qy = cn.OpenResultset("Select tabela_cod.tabela_img from BANCO. 4.Action = 1 O problema. ocasionará um erro de execução no programa.EstablishConnection rdDriverNoPrompt. Chunk() qy(1).AppendChunk Null ReDim Chunk(Fragment) Get DataFile.driver={SQL Server}" cn.Gravar um BMP em um campo Image do SQL usando RDO Enviado por: Marcelo Nagy Aqui vai a rotina: Dim cn As New rdoConnection Dim qy As rdoResultset Private Sub Command1_Click() ChunkSize = 16384 login = "usuario" pass = "senha" Timeout = 15 cn.CursorDriver = rdUseOdbc banco = "BANCO" Conexao = "uid=" & login & ".AppendChunk Chunk() Next i Close DataFile qy.Connect = Conexao cn.AddNew qy(0) = 2 ' rotina de gravação de imagem no campo tabela_img DataFile = 2 Dim Chunk() As Byte Open "c:\imagem\teste.Filtrando Datas no Crystal Enviado por: Marcelo Nagy Para imprimir registros que satisfaçam uma determinada condição.

DESLIGAR o Computador 'Abra 1 novo projeto.Action = 1 É isso aí !!!!! 346 ..br 178 relatorio. Enviado por: Marcelo Nagy Primeiro. 2 para reiniciar o Windows" End Sub .Width * 0. REBOOT.br" mapimessages1.Width = Me.8 Label1.AddressResolveUI = True mapimessages1.RecipAddress = "fulano@provedor.Height = 400 Label1 = "Digite na caixa texto: 0 para logoff. 2) End If Case Else MsgBox Label1 Exit Sub End Select End Sub Private Sub Form_Load() Text1 = "" Label1. 1 para des ligar o Computador.com.com.williamdsilva@aol.1 Label1. Então use a seguinte codificação para enviar uma mensagem: mapisession.MsgNoteText = "conteúdo da minha mensagem. 0) End If Case "1" If MsgBox("Deseja d esligar o Computador agora?".12.bas 'Código para o módulo .ResolveName mapimessages1. 1) End If Case "2" If MsgBox("Deseja reiniciar o Windows agora?".SessionID = mapisession. vbExclamation + vbSystemModal + vbYesNo) = vbYes Then Variav = ExitWindowsEx(EWX_REBOOT.Action = 1 mapimessages1. REBOOT. selecione o componente MICROSOFT MAPI CONTROLS.Compose mapimessages1. vbExclamation + vbSystemModal + vbYesNo) = vbYes Then Variav = ExitWindowsEx(EWX_LOGOFF.Send False BACANA !!!! 347 . " mapimessages1.Enviando um email pelo Outlook.SelectionFormula = "{tabela.Width * 0. 1 text1.SessionID mapimessages1. DESLIGAR o Computador Enviado por: Marcelo Zeri 'API para LOGOFF. ByVal dwReserved As Long) As Long Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_LOGOFF = 0 'Código para o form Option Explicit Private Sub Command1_Click() Dim Variav Select Case Text1 Case "0" If MsgBox("Deseja fazer Logoff agora?".Left = Me.MsgSubject = "Titulo da minha mensagem" mapimessages1.data} >= Date(1975. 1 command1 e 1 módulo . adicione 1 label1. vbExclamation + vbSystemModal + vbYesNo) = vbYes Then Variav = ExitWindowsEx(EWX_SHUTDOWN.API para LOGOFF. blablablablabla. Depois acrecente no seu form o objeto MAPISESSION e MAPIMESSAGES que apareceram na sua toolbox.bas Option Explicit Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long.13)" relatorio..

williamdsilva@aol.com.br
348 - Delimitar o tamanho mímino e máximo de um form Enviado por: Marcelo Zeri

179

'CÓDIGO PARA DELIMITAR O TAMANHO MÁXIMO E MÍNIMO DE UM FORMULÁRIO 'código para o módulo .bas Option Explicit Public OldWindowProc As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare 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 Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Const WM_GETMINMAXINFO = &H24 Type POINTAPI x As Long y As Long End Type Type MINMAXINFO ptReserved As POINTAPI ptMaxSize As POINTAPI ptMaxPosition As POINTAPI ptMinTrackSize As POINTAPI ptMaxTrackSize As POINTAPI End Type Public Function SubClass1_WndMessage(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long If Msg = WM_GETMINMAXINFO Then Dim MinMax As MINMAXINFO CopyMemory MinMax, ByVal lp, Len(MinMax) ' Altere estes valores para aumentar ou diminuir o tamanho mínimo MinMax.ptMinTrackSize.x = 4800 \ Screen.TwipsPerPixelX MinMax.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.TwipsPerPixelY CopyMemory ByVal lp, MinMax, Len(MinMax) SubClass1_WndMessage = 1 Exit Function End If SubClass1_WndMessage = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp) End Function 'código para o form 'O formulário deve ter a propriedade 'BorderStyle = 2- Sizable Option Explicit Private 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 = 7000 Me.Height = 4000 Me.Caption = "Posicione o mouse num canto e resize o form!" 'para aumentar o limite do tamanho do form 'altere os valores do módulo bas End Sub Private Sub Form_Unload(Cancel As Integer) 'importante: comando para remover o código da memória Call SetWindowLong(Me.hwnd, GWL_WNDPROC, OldWindowProc) End Sub

williamdsilva@aol.com.br

180

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 Explicit 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 Const CB_SHOWDROPDOWN = &H14F Private Sub Combo1_GotFocus() Dim lRet As Long lRet = SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&) End Sub Private Sub Form_Load() Combo1.Clear Combo1.AddItem "111111" Combo1.AddItem "222222" Combo1.AddItem "333333" Combo1.AddItem "444444" Combo1.AddItem "555555" 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 .bas Option Explicit Declare Function GetLocaleInfo Lib "kernel32" Alias _ "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, _ ByVal lpLCData As String, ByVal cchData As Long) As Long Declare Function SetLocaleInfo Lib "kernel32" Alias _ "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, _ ByVal lpLCData As String) As Boolean Declare Function GetUserDefaultLCID% Lib "kernel32" () 'Constantes das Configurações Regionais Public Const LOCALE_ICENTURY = &H24 Public Const LOCALE_ICOUNTRY = &H5 Public Const LOCALE_ICURRDIGITS = &H19 Public Const LOCALE_ICURRENCY = &H1B Public Const LOCALE_IDATE = &H21 Public Const LOCALE_IDAYLZERO = &H26 Public Const LOCALE_IDEFAULTCODEPAGE = &HB Public Const LOCALE_IDEFAULTCOUNTRY = &HA Public Const LOCALE_IDEFAULTLANGUAGE = &H9 Public Const LOCALE_IDIGITS = &H11 Public Const LOCALE_IINTLCURRDIGITS = &H1A Public Const LOCALE_ILANGUAGE = &H1 Public Const LOCALE_ILDATE = &H22 Public Const LOCALE_ILZERO = &H12 Public Const LOCALE_IMEASURE = &HD Public Const LOCALE_IMONLZERO = &H27 Public Const LOCALE_INEGCURR = &H1C Public Const LOCALE_INEGSEPBYSPACE = &H57 Public Const LOCALE_INEGSIGNPOSN = &H53 Public Const LOCALE_INEGSYMPRECEDES = &H56 Public Const LOCALE_IPOSSEPBYSPACE = &H55 Public Const LOCALE_IPOSSIGNPOSN = &H52 Public Const LOCALE_IPOSSYMPRECEDES = &H54 Public Const LOCALE_ITIME = &H23

williamdsilva@aol.com.br

181

Public Const LOCALE_ITLZERO = &H25 Public Const LOCALE_NOUSEROVERRIDE = &H80000000 Public Const LOCALE_S1159 = &H28 Public Const LOCALE_S2359 = &H29 Public Const LOCALE_SABBREVCTRYNAME = &H7 Public Const LOCALE_SABBREVDAYNAME1 = &H31 Public Const LOCALE_SABBREVDAYNAME2 = &H32 Public Const LOCALE_SABBREVDAYNAME3 = &H33 Public Const LOCALE_SABBREVDAYNAME4 = &H34 Public Const LOCALE_SABBREVDAYNAME5 = &H35 Public Const LOCALE_SABBREVDAYNAME6 = &H36 Public Const LOCALE_SABBREVDAYNAME7 = &H37 Public Const LOCALE_SABBREVLANGNAME = &H3 Public Const LOCALE_SABBREVMONTHNAME1 = &H44 Public Const LOCALE_SCOUNTRY = &H6 Public Const LOCALE_SCURRENCY = &H14 Public Const LOCALE_SDATE = &H1D Public Const LOCALE_SDAYNAME1 = &H2A Public Const LOCALE_SDAYNAME2 = &H2B Public Const LOCALE_SDAYNAME3 = &H2C Public Const LOCALE_SDAYNAME4 = &H2D Public Const LOCALE_SDAYNAME5 = &H2E Public Const LOCALE_SDAYNAME6 = &H2F Public Const LOCALE_SDAYNAME7 = &H30 Public Const LOCALE_SDECIMAL = &HE Public Const LOCALE_SENGCOUNTRY = &H1002 Public Const LOCALE_SENGLANGUAGE = &H1001 Public Const LOCALE_SGROUPING = &H10 Public Const LOCALE_SINTLSYMBOL = &H15 Public Const LOCALE_SLANGUAGE = &H2 Public Const LOCALE_SLIST = &HC Public Const LOCALE_SLONGDATE = &H20 Public Const LOCALE_SMONDECIMALSEP = &H16 Public Const LOCALE_SMONGROUPING = &H18 Public Const LOCALE_SMONTHNAME1 = &H38 Public Const LOCALE_SMONTHNAME10 = &H41 Public Const LOCALE_SMONTHNAME11 = &H42 Public Const LOCALE_SMONTHNAME12 = &H43 Public Const LOCALE_SMONTHNAME2 = &H39 Public Const LOCALE_SMONTHNAME3 = &H3A Public Const LOCALE_SMONTHNAME4 = &H3B Public Const LOCALE_SMONTHNAME5 = &H3C Public Const LOCALE_SMONTHNAME6 = &H3D Public Const LOCALE_SMONTHNAME7 = &H3E Public Const LOCALE_SMONTHNAME8 = &H3F Public Const LOCALE_SMONTHNAME9 = &H40 Public Const LOCALE_SMONTHOUSANDSEP = &H17 Public Const LOCALE_SNATIVECTRYNAME = &H8 Public Const LOCALE_SNATIVEDIGITS = &H13 Public Const LOCALE_SNATIVELANGNAME = &H4 Public Const LOCALE_SNEGATIVESIGN = &H51 Public Const LOCALE_SPOSITIVESIGN = &H50 Public Const LOCALE_SSHORTDATE = &H1F Public Const LOCALE_STHOUSAND = &HF Public Const LOCALE_STIME = &H1E Public Const LOCALE_STIMEFORMAT = &H1003 '==================== 'Código para o form Option 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 etc Public Sub Get_locale() ' Buscando a configuração regional Dim Symbol As String Dim iRet1 As Long Dim iRet2 As Long Dim lpLCDataVar As String Dim Pos As Integer Dim Locale As Long Locale = GetUserDefaultLCID()

williamdsilva@aol.com.br

182

'LOCALE_SDATE é a constante para separador de data 'para outro locale setting apenas troque a constante 'Função para alterar o separador atual de data iRet1 = 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 Then Symbol = Left$(Symbol, Pos - 1) MsgBox "Separador atual = " + Symbol End If End Sub Public Sub Set_locale() 'Altera configurações Regionais Dim Symbol As String Dim iRet As Long Dim Locale As Long On Error GoTo ErroTexto If 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 data Locale = GetUserDefaultLCID() 'Get user Locale ID Symbol = Text1 'Novo caracter para a configuração Regional 'digite um novo separador na caixa-texto iRet = SetLocaleInfo(Locale, LOCALE_SDATE, Symbol) Exit Sub ErroTexto: MsgBox "Digite um separador válido" End Sub Private Sub Command1_Click() 'exibe a configuração Regional Atual Call Get_locale End Sub Private Sub Command2_Click() 'altera configurações Regionais Call Set_locale End Sub Private 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 etc Me.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 Me End Sub Private Sub Form_Load() Call DisableClose(form1) End Sub 'Código para o módulo .bas Private Declare Function GetSystemMenu Lib "user32" (ByV al hwnd _ As Long, ByVal bRevert As Boolean) As Long Private Declare Function GetMenuItemCount Lib "user32" (ByVal _ hMenu As Long) As Long

hwnd End If End Sub 352 .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 Integer nDiaMes = 32 . Optional _ Disable As Boolean = True) 'Setting Disable to False disables the 'X'.Day(CDate("01/" & Month(dData) _ & "/" & Year(dData)) + 31) End Function 354 . False) nCount = GetMenuItemCount(hMenu) Call RemoveMenu(hMenu. nCount .Fazer uma caixa de texto ler somente números Enviado por: Osmilto X. ByVal wFlags As Long) _ As Long Private Declare Function DrawMenuBar Lib "user32" _ (ByVal hwnd As Long) As Long Private Const MF_BYPOSITION = &H400& Private Const MF_REMOVE = &H1000& Public Sub DisableClose(frm As Form.2. MF_REMOVE Or _ MF_BYPOSITION) Call RemoveMenu(hMenu.Gerar relatórios por intervalo de datas no Crystal usando VB Enviado por: Roberto Luís Ghisleni . MF_REMOVE Or _ MF_BYPOSITION) DrawMenuBar frm.williamdsilva@aol.hwnd.1.hwnd Else GetSystemMenu frm. nCount . Rebouças Private Sub Text2_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 48 To 57 Case 8 Case 13 Case Else KeyAscii = 0 Beep End Select If KeyAscii = 46 Then KeyAscii = 8 KeyAscii = 44 End If End Sub 353 .hwnd. 'otherwise. it's reset Dim hMenu As Long Dim nCount As Long If Disable Then hMenu = GetSystemMenu(frm.com. True DrawMenuBar frm.br 183 Private Declare Function RemoveMenu Lib "user32" (ByVal _ hMenu As Long. ByVal nPosition As Long.

Como concatenar informações pelo VB em um relatório no Crystal Enviado por: Roberto Luís Ghisleni 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 Tabela Private Sub cmdImprimir_Click() 'Formula para Descricao concatenada CrystalReports1." & Mid$(mkeDT_Final.Text.rpt" CrystalReport1.Como mover um valor numérico de uma TextBox para um relátorio Crystal Reports .DiscardSavedData = True CrystalReports1.campo_data_final = Clientes. ".Text.campo_data_Inicial} >= DATE(" & Mid$(mkeDT_Inicial.Campo2 = Fornecedor." & Mid$(mkeDT_Inicial.Campo} + {Tabela2. lpos + 1) Else CrystalReports1. 4) & _ ".campo_data_Final} <= DATE(" & Mid$(mkeDT_Final.: 1. 2) & "))" 'para visualizar a formula msgbox lformula CrystalReport1.") If lpos > 0 Then CrystalReports1. 4) & _ ".: 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. 2) & _ ".103.Formulas(0) = "Descricao = {Tabela. 4.Formulas(0) = "Valor = " & Left$(txtvalor. para ai sim mover valores para ela. Espero ter ajudado!! 356 .45) para um relatorio do crystal.: 'tabela.DataExclusao Para que o relatório funcione basta cria-lo no crystal e inserir este código.ReportFileName = App.williamdsilva@aol.DataCadastro 'tabela.br 184 Para gerar um relatório por intervalo de datas coloque o segu inte código: Private Sub cmdImprimir_Click() Dim lFormula As String 'Captura data inicial lFormula = "({tabela. insira o seguinte código: Private Sub cmdImprimir_Click() Dim lpos As Integer 'Formula de Valor lpos = InStr(txtValor. 1.campo_data_inicia = Clientes.com.Campo2}" CrystalReports1. lpos .1) & ". e o crystal vai listar só o que estiver entre este intervalo de datas. 1.: Formula "Valor").Campo = Clientes.SelectionFormula = lformula CrystalReport1.Codigo 'Usando valores de TextBox Private Sub cmdImprimir_Click() . 7. 2) & "))" 'Captura data final lFormula = lFormula & " AND ({tabela.DiscardSavedData = True CrystalReport1.Action = 1 End Sub 'Ex." & Mid$(mkeDT_Final.Text End If End Sub obs. 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. 7. 4.Codigo 'Tabela2." & Mid$(mkeDT_Inicial.Action = 1 End Sub 'Tabela. 2) & _ ". Espero que Ajude!!!! 355 ." & Mid$(txtValor.Path & "\Nome.Text.Formulas(0) = "Valor = " & txtValor.

357 .text = Roberto 'Sobrenome 'textbox2.williamdsilva@aol.Formulas(0) = "Descricao = " & textbox1. Para avitar isso.Text Unload Form1 End Sub É lógico que isso é somente um exemplo. 4) & _ ". Repare que não foi usado o método UNLOAD. 7. Clark 359 .Text1. 358 .Action = 1 End Sub obs.text & "+" & textbox2. para ai sim mover algo para ela. em projetos MDI principalmente. 4.Text1.: Formula "Data").Como mover uma data informada em um MaskEdit para um relatório no Crysta l 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 Inicial CrystalReports1. use sempre o método UNLOAD após usar qualquer utilização de um formulário.Action = 1 End Sub 'Nome 'textbox1. o formulário FORM1 foi carregado para que o objeto TEXT1 possa ser usado. bin.com. a momentos em que é vantajoso o formulário continuar na memória porque poderá ser usado posteriormente. 2) & ".DiscardSavedData = True CrystalReports1. n." & Mid$(MaskEdit1.text CrystalReports1." & Mid$(MaskEdit1. de forma que. para ai sim mover algo para ela.: 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. 1. 2) & ")" CrystalReports1. Abraços. O sintoma deste erro de programação é o programa não finalizar após ter clicado no botão FECHAR. Veja: Private Sub Command1_Click() Dim vTexto as String vTexto = Form1. e ser necessário clicar no botão END para concluir sua finalização.Formulas(0) = "Data = Date ( " & Mid$(MaskEdit1.: 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.Text End Sub No código acima.Clark Quando se trabalha com formulários no Visual Basic.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. deve -se tomar cuidado para não deixá-lo na memória após usá-lo.: Formula "Descricao"). mesmo que ele não seja exibido no video.br 185 'Formula para Descricao concatenada CrystalReports1. dec As Double 'Declara variáveis dec = Text1 . o formulário continuará na memória mesmo que o procedimento (SUB) seja finalizado (END SUB).text = Luís Ghisleni obs.DiscardSavedData = True CrystalReports1. mesmo que não foi usado o método LOAD.Formulários Enviado por: Rogério Adriano de Morais . Veja o código correto abaixo: Private Sub Command1_Click() Dim vTexto as String vTexto = Form1.

Senha Enviado por: Thiago MuNhÓz Crie um Text e um commandbutton. Sigam os passos: Crie duas formulários. 1) Next n 360 . ATENÇÃO: Esta função não cria um formulário Ontop para todas as janelas e sim só para o programa aberto.CONECTION E RS AS NEW ADODB. mas. agora insira um botão no formulário.Open ABRE O BANCO 361 . clique duas vezes no botão e insira este código Form2.ConnectionString = "Provider=SQLOLEDB. Me Pronto.show else msg box "Senha Incorreta digite novamente" end if qualquer duvida envie e-mail para T_Munhoz@zipmail. . Ex: Form 1 e Form2.ACESSO SQL-SERVER ATRAVES DO OLEDB Enviado por: SAMUEL BADY HELOU FILHO 1º-FAZ REFERENCIA AO MICROSSOFT ADO 2. no commandbutton digite: if text1.com.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.1. O form2 sempre ficará sobre o form1.User ID=SA.Text = Text1 & Mid(Text1.. Eles puxam módulas e mais módulos.RECONDSET 3º-DB.text = "Senha desejada" then form2. Para isso fiz esta função.br 186 resp = Int(Text1) Text1 = "" While resp <> 0 resp = Int(dec / 2) If resp * 2 = dec Then bin = 0 Else bin = 1 End If Text1 = Text1 & bin dec = resp Wend For n = Len(Text1) To 1 Step -1 Text1.Persist Security Info=False.williamdsilva@aol. n.0 LIBRARY E AO DATA BINDING COLLECTION 2º-DECLARE DB AS NEW ADODB.com.Data Source=" & SERVIDOR DB..Show .ConnectionTimeout = 10 DB.Initial Catalog=" & NOME DO BANCO & ".br 362 .

ByVal lpFile As String. Ex: Form1 e Form2. é só isso qualquer dúvida me envie um e -mail. .Text. ByVal lpParameters As String.wagner Dim xtempo As Long Dim xInicio As Long Dim xfinal As Long xtempo = 1000 * Segundos xfinal = 0 xInicio = GetTickCount() 'retorna valor em milesimos While (xfinal .xInicio < xtempo) xfinal = GetTickCount() Wend End Sub .com. Pronto! Conseguiu.williamdsilva@aol. mas e agora eu clico no Form1.dll" Alias "ShellExecuteA" (ByVal hwnd As Long.-D 363 . Siga os passoas abaixo: Na guia General declare estas funções: Option Explicit Private Declare Function ShellExecute Lib "shell32. Na 1ª: Coloque na prop riedade TEXT. vbNullString. Ex: C: \Pagina.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. O caminho onde está o arquivo à abrir. "open". Okz? . Insira um botão e clique nele duas vezes e insira este código ShellExecute hwnd. : -( Descobri a solução para isso. depois insira um botão no form1. SW_SHOW PRONTO.br Qualquer dúvida me enviem um e-mail. e o Form2. Clique duas vezes no botão e insira este código. ByVal lpOperation As String. form1. ByVal lpDirectory As String. some. Crie dois formulários. Quer saber como? Simples.html Na 2ª: Deixei em branco para o usuário digitar códigos HTML ou simplesmente um endereço à abrir Agora que fez isso. -D 365 .enabled = false pronto! 364 . ByVal nShowCmd As Long) As Long Private Const SW_SHOW = 5 Depois disso insira 2 caixas de texto em seu formulário. muitas vezes já deve ter tentado fazer com que o formulário que se abre sem ficasse sobre o formulário abaixo. vbNullString. Nome_da_1ªCaixa.Como dar uma pausa no programa sem utilizar Timer Enviado por: Wagner Lasdowsky 'codigo para dar pausa no programa utilizando API GettickCount 'declarando API Public Declare Function GetTickCount Lib "kernel32" () As Long Public Sub Pausa(ByVal Segundos As Integer) 'igual a inkey() do clipper .Impossibilitando o clique no formulário de trás Enviado por: Thomas Gonzalez Miranda 187 Você.

1) If IsNumeric(verificacao) Then cont = soma & verificacao soma = cont Else End If Next i If IsNumeric(cont) Then VALOR = True Else VALOR = False End If IsAlfaNumeric = VALOR End Function .br 366 . segundo1) 'Coloca os dados do Primeiro horário em horario_2 horario_2 = TimeSerial(hora2. minuto1.Soma horas mais facilmente Enviado por: Washington Coutinho Corrêa Junior 188 'Guarda os dados do Primeiro Horário hora1 = 14 minuto1 = 34 segundo1 = 25 'Guarda os dados do Segundo Horário hora2 = 2 minuto2 = 23 segundo2 = 34 'Coloca os dados do Primeiro horário em horario_1 horario_1 = TimeSerial(hora1. minuto2.Verificando se o Campo é Alfanumérico Enviado por: Cicero Public Function IsAlfaNumeric(VALOR) dim cont as variant dim verificacao as variant dim soma as variant cont = "soma" For i = 1 To Len(VALOR) verificacao = Mid$(VALOR.com.SelStart = 7 End If End Sub Espero que tenha utilidade 368 .williamdsilva@aol.Máscara de data no TextBox Enviado por: Beraldo Lopes Figueiredo Evita todo o problema causado pelo famigerado MASKEDBOX Private Sub Text1_Change() If Len(Text1) = 2 Then Text1 = Text1 + "/" Text1. i.SelStart = 4 End If If Len(Text1) = 5 Then Text1 = Text1 + "/" Text1. segundo2) 'Mostra a soma deles MsgBox horario_1 + horario_2 367 .

OpenDataBase(app. Esse tipo de recurso será mais conhecido com a difusão do Windows 2000. .Workspaces(0). que deve ser feita numa máquina com o Windows no idioma que se deseja trabalhar. oque possibilitará a inserção e leitura desses caracteres pelo controle TEXTBOX. mas no caso do ACCESS eu aconselho criar a Base de Dados através do seu aplicativo. Por isso estou enviando essa dica de trabalho. 371 .openRecordSet("Tabela") . (Essa propriedade somente é disponibilizada neste tipo de situação. Esse procedimento é valido para a Versão 6 do Visual Basic. Obs. pois passei por várias dificuldades e espero conseguir ajudar os colegas.O Segundo ponto consiste na instalação do Visual Basic. 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 d e texto. Esse dispositivo é instalado automaticamente com o Windows em Japonês ou em outro idioma que use caracteres próprios. Digite o comando abaixo dentro do timer: Me!Command1. Isso é possível graças a um dispositivo chamado IME. e utilizar a declaração dbLangGeneral na criação do Banco de Dados.Visible = True 'Onde o objeto a piscar é um botão com o name Command1. Porém quando um desenvolvedor tem um problema como esse é muito mais difícil ainda encontrar soluções para essa condição.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. .) Depois desses cuidados o programador deverá observar o valor da propriedade IMEMODE que por pad rão é 0 ( No Operation) e deve ser alterada para 1 (ON) assim o IME poderá agir sobre o controle TEXTBOX.com. isso vale também para fontes de relatório. como o Chinês ou o Turco.mdb") Set rs = db.Piscar um objeto Enviado por: Djair Junior Para piscar um objeto crie um timer com Interval de 500. através de um teclado comum.br 189 369 . Outra alteração deve ser feita na fonte da caixa de texto. para que esse aceite os caracteres em japonês e os caracteres ocidentais.path + "\banco_de_dados. como nosso ocidental.Como abrir um Banco de dados Enviado por: Márcio Pulcinelli Dim DBNewOne as DataBase Dim rs as RecordSet Set DBNewOne = DBEngine. é saber com o o Windows faz a leitura dos caracteres em japonês.Primeiro ponto importante. 370 . Alguns tipos de fontes aceitam caracteres em japonês. como o Crystall por exemplo.williamdsilva@aol. que converte para caracteres em japonês grupos de consoantes e vogais digitados. Agora se você usa Banco de Dados em seus aplicativos pode ter problemas. outras não. Uma boa fonte é a MS UI Gothic.Visible = True = Not Me!Command1.

min As Integer l = GetTickCount() / 1000 horas = Int(l / 3600) l = l . returnstring.Abrir e Fechar o CD-ROM Enviado por: Rafael Konrath 'Declarar em um Modulo Declare Function mciSendString Lib "winmm.dll" () As Long Dim res As Integer res = waveOutGetNumDevs() If res > 0 Then msgbox "Existe tarjeta de sonido" Else msgbox "No existe tarjeta de sonido" End If 374 . returnstring. 0) End Sub Private Sub Command2_Click() dim res as long.Saber se existe placa de Som Enviado por: Rafael Konrath Private Declare Function waveOutGetNumDevs Lib "winmm. _ ByVal hwndCallback As Long) As Long Private Sub Command1_Click() dim res as long.williamdsilva@aol.com. 127.(min * 60) MsgBox "Windows inicio ja faz " & horas & " horas.Sabe quanto tempo o Windows esta funcionando Enviado por: Rafael Konrath Rafael Konrath 'declare no modulo Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long 'Por exemplo : Private Sub Form_Load() Dim l As Long.(3600 * horas) min = Int(l / 60) l = l . 127.br 190 372 . ByVal _ lpstrReturnString As String. 0) End Sub 373 . " & min & " minutos e " & l & " segundos" End Sub .dll" Alias _ "mciSendStringA" (ByVal lpstrCommand As String. ByVal uReturnLength As Long. returnstring as string*127 res = mcisendstring("set CDAudio door open". horas As Integer. returnstring as string*127 res = mcisendstring("set CDAudio door closed".

10. 1)) * (12 .rpt" .Matricial" . F.PrinterPort = "LPT1" .(Int(EVAR1 / 11) * 11)) If evar2 = 10 Or evar2 = 11 Then evar2 = 0 .br 191 375 .ListIndex = -1 ctlControl.(EVAR1 . 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.williamdsilva@aol.F) Next F evar2 = 11 .F) Next F evar2 = 11 .Verificando se CPF digitado é válido. Enviado por: Adriano Faria Alves Para mandar o relatório para outra impressora no Crystal Reports: With CrystalReport1 .update Call LimparCampos(Me) 377 .ReportFileName = "C:\caminho\relatorio. 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.Value = 0 DoEvents Next ctlControl End Function Para chamá-la no seu form: ..(EVAR1 . 1)) * (11 . F.Controls ctlControl.Crystal Reports: imprimindo em outra impressora que não seja a Padrão.PrinterName = "Epson .com.PrinterDriver = "Epson24" .Função que limpa todos os campos com propriedade TEXT e LIST BOX do form. tabela.(Int(EVAR1 / 11) * 11)) If evar2 = 10 Or evar2 = 11 Then evar2 = 0 If evar2 <> Val(Mid(CPF.Text = "" ctlControl.. 1)) Then CheckCPF = False Exit Function End If EVAR1 = 0 For F = 1 To 10 EVAR1 = EVAR1 + Val(Mid(CPF.Action = 1 End With 376 .

DAS. Enviado por: Adriano Faria Alves Crie essa função em um Módulo BAS Public Function Maiuscula(Texto) Dim Palavra.Inicias Maiúsculas.Text) = False Then MsgBox "CPF Inválido. AnoCorrente. 11. UltimoDia As Integer DiaCorrente = "01" MesCorrente = Month(Now) AnoCorrente = Year(Now) UltimoDia = Day(DateValue("01/" & Str(MesCorrente + 1) & "/" & Str(AnoCorrente)) . 2)) End If Resultado = Resultado & " " & Palavra Loop Maiuscula = Trim(Resultado) . " ") = 0 Posicaofinal = InStr(Posicaoinicial. Posicaoinicial. 1)) Then CheckCPF = False Exit Function End If CheckCPF = True Para chamá-la no form: Sub CPF_LostFocus() If CheckCPF(CPF. DiaCorrente. Texto. MesCorrente. DOS.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. 1)) & LCase(Mid(Palavra. DI. DA. "0#") & "/" & Format(Now.br If evar2 <> Val(Mid(CPF. " ") Palavra = Mid(Texto." CPF...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. com exceção de DE.SetFocus End IF 192 378 . Posicaofinal .williamdsilva@aol.AddItem Format(i. "mm") & "/" & Format(Now.com. Posicaofinal Dim Resultado As String Posicaoinicial = 1 Texto = Texto & " " Do Until InStr(Posicaoinicial. "yyyy") Next End Function Para chamá-la no form (LOAD): Call Preenche_ComboData(Combo1) 379 . Texto. Posicaoinicial.1) If MesCorrente = 12 Then UltimoDia = Day(DateValue("31/" & "12/" & Str(AnoCorrente))) End If For i = DiaCorrente To UltimoDia ComboDatas.

2) & ".data}in date(" & Right(mskDT1." & Left(mskDT2.br 193 End Function Para chamá-la em um form (LostFocus da Caixa de Texto) If Trim(Text1 <> "") Then Text1 = Maiuscula(Text1) End If 380 . "Erro no Relatório" Exit Sub End If stringsql = stringsql & " and {tabela1. 2) & ". 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.". 2) & ")" End If End If stringsql = Mid(stringsql." & Mid(mskDT1. 4. 5) .com. vbCritical Data1.williamdsilva@aol. 2) > "31" Then Exit Function End If If Mid(DataInformada. 4. 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. 4. também disponível nas dicas desse Site. vbCritical.data}=date(" & Right(mskDT1." & Mid(mskDT2.SetFocus End If 381 . 4. 4) & ". 2) & ". 4) & ". Sub Imprimir_Click() If mskDT1 <> "__/__/____" Then If Not ValidaData(mskDT1) Then MsgBox "Primeira data do período inválida".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. "Erro no Relatório" Exit Sub End If If mskDT2 <> "__/__/____" Then If Not ValidaData(mskDT2) Then MsgBox "Segunda data do período inválida". 4." & Left(mskDT1. 2) < "01" Or Mid(DataInformada. 2) & ")" Else stringsql = stringsql & " and {tabela1. 2) & ") to date(" & Right(mskDT2.Função para validar datas digitadas." & Mid(mskDT1. vbCritical." & Left(mskDT1. 4) & ". 2) < "01" Or Left(DataInformada.

Path + "\Relatorio.CB_SHOWDROPDOWN. _ lParam As Long) As Long Private Sub Combo1_GotFocus() Const CB_SHOWDROPDOWN As Long = &H14F Dim Tmp As Long Tmp = SendMessage(Combo1. ByVal wParam As Long.com.br 194 CrystalReport1.Abrir a listagem da Combo ao receber foco.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. vbCritical.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 Integer On Error GoTo ErrorFileExist TempAttr = GetAttr(FileName) FileExist = True GoTo ExitFileExist ErrorFileExist: FileExist = False Resume ExitFileExist ExitFileExist: On Error GoTo 0 End Function E no seu form. chame -a da seguinte forma: If FileExist("C:\Caminho\Arquivo.ByVal 0&) End Sub 384 .rpt" CrystalReport1.Destination = crptToWindow CrystalReport1. _ ByVal wMsg As Long.williamdsilva@aol.Erro Geral" End End If 383 . sLinha *Quebra a linha e concatena (soma) o resultado sResult = sResult + Chr(13) & Chr(10) + sLinha Loop . App.hwnd.ReportFileName = App.SelectionFormula = stringsql CrystalReport1.Action = 1 382 . 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.".mdb") = False Then MsgBox "Banco de Dados não encontrado.1.Title & " .

dtInicio.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 If End Function Para chamar no Form: Dim sVar As String sVar = DataArq("C:\SQL.intSemanas.com."ddd") <> "Sun" And _ Format(varDataCont.dll" _ Alias "mciSendStringA" (ByVal lpstrCommand As _ String.dtInicio) intFimDias = 0 Do While varDataCont < dtFinal If Format(varDataCont.Abrir e fechar a gaveta do CDROM Enviado por: Adriano Faria Alves Private Declare Function mciSendString Lib "winmm.Text = AbreArquivo("C:\Texto. Enviado por: Adriano Faria Alves Function DiasUteis(dtInicio As Variant.Text = sVar End If 386 .log") If sVar <> "ERRO" Then Text1. 1. 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". varDataCont) Loop DiasUteis = intSemanas * 5 + intFimDias End Function 387 . ByVal hwndCallback _ .Dias úteis entre 2 datas.dtFinal) varDataCont = DateAdd("ww".TXT") 385 . _ ByVal uReturnLength As Long.br 195 AbreArquivo = sResult Fecha o arquivo Close iARQ End Function Para usar: Text1.williamdsilva@aol. ByVal lpstrReturnString As String."ddd") <> "Sat" Then intFimDias = intFimDias + 1 End If varDataCont = DateAdd("d".

pois esta não recebe foco). Set Img1. Então.hWnd. 0&) 388 . coloque no Form uma ImageList.Count Then iAnim = 1 End If End Sub 390 .williamdsilva@aol.hWnd.Picture = ImgLst1. _ ByVal nIndex As Long. ByVal dwNewLong As _ Long) As Long Private Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" (ByVal hwnd As Long. 0&.Picture iAnim = iAnim + 1 If iAnim > ImageList1. um PictureBox (ou ImageBox. 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.ListImages(iAnim). 0&. coloque o seguinte código no Form: Dim iAnim As Integer Private Sub Form_Load() iAnim = 1 Call Timer1_Timer End Sub Private Sub Timer1_Timer() *Img1 é a ImageBox e ImgLst1 é a ImageList. 0&.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) As Long Private Const WS_MINIMIZEBOX As Long = &H20000 Private Const WS_MAXIMIZEBOX As Long = &H10000 Private Const GWL_STYLE As Long = (-16) No evento MDIForm_Load do MDIForm: Sub MDIForm_Load() Dim lWnd as Long lWnd = GetWindowLong(Me. 0&) PARA FECHAR Call mciSendString("Set CDAudio Door Closed Wait". GWL_STYLE. um Timer (com Interval = 100.br As Long) As Long 196 PARA ABRIR Call mciSendString("Set CDAudio Door Open Wait".Copiando Textos de Documentos do Word Enviado por: Adriano Faria Alves No evento desejado: Dim Word As Object . 0&. lWnd) End Sub 389 . pelo menos) e coloque as figuras da animação na ImageList.Animação com Ícones Enviado por: Adriano Faria Alves Crie um novo projeto.ListImages.com.

Impedir que o programa apareça nos processos do windows Enviado por: Adriano Faria Alves 1 .hWnd.DOC"). SW_HIDE) 392 . tabelas.No Form_Load adicione: Dim RetValue as Long RetValue = ShowWindow(Me.Rolando texto em uma Picture Box Enviado por: Adriano Faria Alves *Global do Form Public Function ShowMessage() . parágrafos. qualquer parte do documento. _ ByVal dwType As Long) As Long Public Const RSP_SIMPLE_SERVICE As Long = 1 Public 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.DOC" Seleciona o documento inteiro Word.Open "C:\Meus Documentos\" & "NomeDoDocumento.RSP_SIMPLE_SERVICE) End Sub Depois coloque o seguinte no FORM_LOAD: Private Form_Load() MakeMeService End Sub 393 . pois utilizando-o é possível selecionar palavras.com. Text1.williamdsilva@aol.br Set Word = CreateObject("Word.Text Pesquise o VBA.Selection.Text = Word.Documents("NomeDoDocumento. _ ByVal nCmdShow As Long) As Long Public Const SW_HIDE As Long = 0 3 .Application") 197 Abre o documento Word.Coloque para false a propriedade ShowInTaskbar do Form 2 . 391 .Em um módulo declare: Public Declare Function ShowWindow Lib "user32" _ Alias "ShowWindow" (ByVal hwnd As Long.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 Long Public Declare Function GetCurrentProcess Lib _ "kernel32" () As Long Public Declare Function RegisterServiceProcess _ Lib "kernel32" (ByVal dwProcessID As Long.Select Joga o conteúdo da seleção numa caixa de Texto. etc.Documents. Ou seja.

3". vbNormalFocus) Disco de Inicialização Call Shell("rundll32. Veja as chamadas das principais telas: Para chamar a tela principal do Painel de Controle Call Shell("rundll32.Print Mid$(MyText..cpl. vbNormalFocus) Instalação do Windows Call Shell("rundll32. MyText. vbNormalFocus) Vídeo Segundo Plano Call Shell("rundll32. De acordo com os parâmetros cada tela é chamada.cpl...br 198 Static MsgPtr As Integer Static MyText As String If Len(MyText) = 0 Then MsgPtr = 1 MyText = "Rolando texto numa Picture Box! " End If Picture1.exe shell32. mas sim se executa o programa rundll32.2".exe shell32.cpl.Control_RunDLL intl.3".Control_RunDLL intl.dll.cpl.exe. MsgPtr). vbNormalFocus) Aparência Call Shell("rundll32.dll.Cls Picture1. vbNormalFocus) Configurações Regionais Configurações Regionais Call Shell("rundll32.dll..Control_RunDLL".Control_RunDLL intl.exe shell32.Control_RunDLL desk.exe shell32.cpl.exe shell32.dll.cpl.cpl. vbNormalFocus) Número Call Shell("rundll32.dll.williamdsilva@aol.0".dll.exe shell32.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.dll.1".exe shell32.dll.com.cpl. vbNormalFocus) ...dll.. vbNormalFocus) Moeda Call Shell("rundll32.1".cpl.2".exe shell32. vbNormalFocus) Configuração Call Shell("rundll32.0". vbNormalFocus) Proteção de Tela Call Shell("rundll32.exe shell32.exe shell32.. 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 .2". vbNormalFocus) Adicionar / Remover Programas Instalar/Desinstalar Call Shell("rundll32.Control_RunDLL appwiz.Control_RunDLL desk.exe shell32.dll.Control_RunDLL desk.dll..Control_RunDLL appwiz.Control_RunDLL desk.cpl.1"..Control_RunDLL appwiz.

br 199 Hora Call Shell("rundll32.dll. vbNormalFocus) Rede Call Shell("rundll32. vbNormalFocus) Sistema Geral Call Shell("rundll32.cpl.1".cpl.Control_RunDLL access.cpl.1".Control_RunDLL joy.Control_RunDLL main. vbNormalFocus) Avançado Call Shell("rundll32. vbNormalFocus) CD Call Shell("rundll32.Control_RunDLL sysdm.0". vbNormalFocus) Mouse Call Shell("rundll32.4". vbNormalFocus) Mail e Fax Call Shell("rundll32.exe shell32.Control_RunDLL access.2".exe shell32. vbNormalFocus) Impressoras Call Shell("rundll32.cpl.3"..exe shell32.Control_RunDLL main.exe shell32.Control_RunDLL sysdm. vbNormalFocus) Perfis de Hardware Call Shell("rundll32.dll. vbNormalFocus) .2".Control_RunDLL main.exe shell32.exe shell32.cpl". vbNormalFocus) Vídeo Call Shell("rundll32.dll.com.dll.dll.cpl @3". vbNormalFocus) MIDI Call Shell("rundll32.dll.cpl..exe shell32. vbNormalFocus) Senha Call Shell("rundll32.Control_RunDLL modem.exe shell32.exe shell32.dll..cpl". vbNormalFocus) Som Call Shell("rundll32.dll. vbNormalFocus) Modem Call Shell("rundll32.dll.dll. vbNormalFocus) Fontes Call Shell("rundll32.exe shell32..cpl @0".exe shell32.1".cpl @1".exe shell32. vbNormalFocus) Multimídia Audio Call Shell("rundll32..Control_RunDLL sysdm.Control_RunDLL mmsys.exe shell32.dll..exe shell32..Control_RunDLL mmsys.dll.Control_RunDLL intl.cpl". vbNormalFocus) Som Call Shell("rundll32.cpl.cpl @1".Control_RunDLL sysdm.Control_RunDLL mmsys.exe shell32.2".dll.Control_RunDLL mmsys.Control_RunDLL mlcfg32.exe shell32.cpl.dll.dll.3".exe shell32. vbNormalFocus) Gerenciador de Dispositivos Call Shell("rundll32..exe shell32..dll.exe shell32.Control_RunDLL intl.cpl".cpl.3".exe shell32.cpl..cpl.cpl.cpl"..exe shell32.dll.dll. vbNormalFocus) Teclado Call Shell("rundll32.Control_RunDLL mmsys.dll.cpl.0". vbNormalFocus) Joystick Call Shell("rundll32.dll. vbNormalFocus) Data Call Shell("rundll32..cpl @2".dll.Control_RunDLL main.dll.Control_RunDLL mmsys.williamdsilva@aol.Control_RunDLL password.Control_RunDLL netcpl..4". vbNormalFocus) Performance Call Shell("rundll32.dll.cpl.exe shell32.exe shell32. vbNormalFocus) Opções de Acessibilidade Teclado Call Shell("rundll32.

"Pergunta") = vbNo Then Cancel = -1 End If End If End Sub 397 .exe shell32.. vbNormalFocus) Assistente (Adicionar novo Hardware) Call Shell("rundll32..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. 32 + vbYesNo. vbNormalFocus) Mouse Call Shell("rundll32.exe shell32. 396 .PrinterDriver = "Epson24. Função : Function Changed(pJanela As Form) As Boolean Dim vIndice As Integer For vIndice = 0 To pJanela.exe shell32.dll.Control_RunDLL access..Informar sobre a alteração de dados Enviado por: Esdras Pavan .cpl.com. vbNormalFocus) Data e Hora Call Shell("rundll32.cpl @1".DiskCopyRunDll".Crystal Reports: imprimindo em outra impressora que não seja a Padrão . está função verifica a alteração.Controls(vIndice) Is TextBox Or _ TypeOf pJanela.dll.dll.dll.Control_RunDLL timedate.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.1 If TypeOf pJanela.drv" .exe shell32. Deseja sair sem salvar???". CrystalReport1.cpl..exe shell32.Controls.williamdsilva@aol. vbNormalFocus) Geral Call Shell("rundll32.Correção Enviado por: Adriano Faria Alves Na dica para mandar relatório para a Impressora que não seja a Padrão.5".br 200 Exibir Call Shell("rundll32.Controls(vIndice) Is ComboBox Then If pJanela.3". faça a seguinte alteração: .Control_RunDLL access.Count .dll.. vbNormalFocus) DiskCopy Call Shell("rundll32 diskcopy..cpl. vbNormalFocus) 395 ..Control_RunDLL sysdm.Control_RunDLL access.dll.cpl".4".Controls(vIndice).

_ "Novembro". "Outubro". 32 + vbYesNo.Controls(vIndice) Is ComboBox Then If pJanela. "Pergunta") = vbNo Then Cancel = -1 End If End If End Sub PS. Função : Function Changed(pJanela As Form) As Boolean Dim vIndice As Integer For vIndice = 0 To pJanela. "Fevereiro". "Julho".Controls. está função verifica a alteração.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 .1) End Function Modo de Usar: a linha .br 201 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.1 If TypeOf pJanela.Controls(vIndice).com."Junho". "Setembro".> "Fevereiro" 399 .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.Count . Deseja sair sem salvar???". _ "Abril".Controls(vIndice) Is TextBox Or _ TypeOf pJanela. "Dezembro") TabMeses = vetMeses(pMes . 398 .> TabMeses(Month(CDate("10/02/2000"))) retorna .: Temos que tomar algumas atenções Criarmos no form uma v ariável boleana Publica chamada Changed e a setarmos true ou false no momento correto.williamdsilva@aol.Tabela de Meses Enviado por: Esdras Pavan Alvo: Retorna o nome do mês de acordo com o número passado na função Função: Public Function TabMeses(pMes As Integer) As String Dim vetMeses vetMeses = Array("Janeiro". Ex:Toda vez que o botão salvar for acionado setar a variavel changed = true. "Maio". _ "Agosto"."Março".

lEstados. UCase(txtUF) txtUF.AddItem "Teste4" End Sub 400 . 48.com. Veja com é fácil converter todos os controles com poucas linhas.AddItem "Teste3" Combo1.SetFocus End If End Sub 401 . Q As Integer TestaUF = False: Q = 1 For I = 0 To 27 If UCase(UF) = Mid(UFpes.SetFocus End If End If End Sub 402 .williamdsilva@aol. informações com apenas letras maiúsculas. "Atenção !" TBUF = "" TBUF. 2) Then TestaUF = True: Exit For Q=Q+2 Next I End Function Modo de usar Private Sub TBUF_LostFocus() If TBUF = "" Then Exit Sub If TestaUF(TBUF) = False Then MsgBox "Unidade de federação incorreta !".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.AddItem "Teste1" Combo1. Q. Veja com é fácil converter todos os controles com poucas linhas 403 . Coloque o seguinte código em um módulo: Sub Caixa_Alta(oForm As Form) .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. vbExclamation.AddItem "Teste2" Combo1.Testar se a UF digitada está correta Enviado por: Luis Roberto Garcia Leandro Public Function TestaUF(UF As String) As Boolean If UF = "" Then Exit Function Dim UFpes As String UFpes = "ACALAMAPBACEDFESFNGOMAMGMSMTPAPBPEPIPRRNRJRSRORRSESCTOSP" Dim I.br 202 No evento load do Form coloque este código: Private Sub Form_Load() Combo1. informações com apenas letras maiúsculas. txtUF) = 0 Then MsgBox "Estado inválido".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.

Controls(A).Controls(A).OpenRecordset(SQL.1 If TypeOf oForm.Count .br 203 Screen.MousePointer = vbHourglass Dim SN As Recordset SQL = "SELECT * FROM " & nTable Set SN = DB.com.Text) ElseIf TypeOf oForm. Um abraço! 405 . digite: Caixa_Alta frmInsert Onde frmInsert é o nome do form onde você quer converter para maiúsculas.Controls(A).EOF oCombo.williamdsilva@aol. 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.MousePointer = vbArrow End Sub Perceba que a rotina recebe dois parâmetros.AddItem SN!Descr SN. Veja como é simples.MoveFirst Do While Not SN.Controls(A) Is ComboBox Then oForm.MousePointer = vbArrow End Sub Para chamá-lo. Criei essá função genérica para facilitar esse tramite.Text = UCase(oForm.Controls(A).. Coloque o seguinte código em um módulo: Sub Gera_Combo(oCombo As Control.MousePointer = vbHourglass Dim A As Integer For A = 1 To oForm.. dbOpenSnapshot) SN.Text) End If Next A Screen.Text = UCase(oForm.Controls(A) Is TextBox Then oForm.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 : . nTable As String) Screen.Controls. O primeiro (oCombo) é o nome do objeto (comboBox) e o segundo é o nome da tabela de origem na base de dados.Parâmetros Múltiplos para consultas em SQL Enviado por: Roberto Alexandre Levy AAA 406 .MoveNext Loop Screen.

PrevInstance Then MsgBox "A aplicação iniciada já está em uso.williamdsilva@aol. iMeses. DatePart("m". DateSerial(DatePart("yyyy".com. Intervalo As Double Intervalo = Date . "Negado" End End If 407 . Entrada) + Anos. Dias Dim iAnos.DriverName End Sub 409 .Icones Enviado por: Henrique Rios Witzel Gostaria de saber sobre icones para uso nos programas de Visual Basic.25 Anos = Int(iAnos) iMeses = (iAnos . Entrada) + Meses.25 dias iAnos = Intervalo / 365. Meses.". 408 .Caption = "Nome do Drive: " & Printer. Hoje e Resultado) *** Crie a Função no Form: Function CalculaTempo(Entrada As Date) If IsNull(Entrada) Or Entrada > Date Then MsgBox "Data de Entrada inválida.Preciso icones de Advogado para eu colocar no programa.Verificando a impressora padrão e o seu Drive Enviado por: William Costa Rodrigues Private Sub Form_Load() lbImpress. vbCritical.Anos) * 12 Meses = Int(iMeses) Dias = DateDiff("d".". Day(Entrada)).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.br 204 No evento LOAD ou de seu formulário principal digite : If App.Entrada ***Um ano tem exatamente 365.DeviceName lbDrvImpress. vbCritical Exit Function End If Dim Anos. Date) If Dias = 30 Then Dias = 0 Meses = Meses + 1 End If If Meses = 12 Then Meses = 0 Anos = Anos + 1 End If If Anos > 1 Then Anos = Anos & " anos " Else Anos = Anos & " ano " End If If Meses > 1 Then Meses = Meses & " meses " Else .Caption = "Impressora Padrão: " & Printer.

1) = " " Then cNew = cNew & Chr(42) Else cNew = cNew & Mid(cParam.CORRIGIDO Enviado por: Roberto Alexandre Levy Essa função gera um parametro para usar com a instrução LIKE do SQL. Feito a declaração é só utilizar a função. "dd/mm/yyyy ") *** Botão de Comando: Resultado.5 segundos." End If CalculaTempo = Anos & Meses & Dias End Function *** Form Load Hoje. permitindo que o usuário possa escrever palavras compostas como critério de busca. No caso de outras bases. percentual! Dica: Use uma InputBox para buscar o valor criterio desejado pelo usuario.MousePointer = vbHourglass Dim cNew As String cParam = Chr(42) & cParam & Chr(42) For A = 1 To Len(cParam) If Mid$(cParam.williamdsilva@aol. poderá ser pú blica. A. Function Cria_Parametro_Multiplo(cParam) Screen.MousePointer = vbDefault End Function OBS: O Caracter 42 e um asterisco. 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. para uma pausa de 1. made um email! Um abraço 411 . teríamos: Sleep(1500) . Santos Me parece que o meio mais simples é utilizando a função Sleep da API do Windows." Else Dias = Dias & " dia.Text = Format(Now.Text = CalculaTempo(Entrada) 205 410 . 1) End If Next A Cria_Parametro_Multiplo = cNew Screen. passando como argumento o tempo da pausa em milisegundos. Qq dúvidas.Como dar uma pausa no programa sem usar um Timer Enviado por: André Quites O.br Meses = Meses & " mês " End If If Dias > 1 Then Dias = Dias & " dias. A. como ORACLE ou SQO Server.com.Parâmetros Múltiplos para consultas em SQL . Por exemplo. use o caracter 37. Além de simples.

com. e com o mesmo efeito! Simplesmente coloque no evento QueryUnload o seguinte código: Sub Form_QueryUnload(Cancel As Integer. vbHide End Sub Você também pode inserir uma textbox e um commandbutton assim Public Sub Command1_Click() shell "start " + text1..Text .Enviar E-mail Enviado por: carlos angelo fedrigo junior Dim TxtEmail as String TxtEmail = "caflib@bol. vbHide Este exemplo executa o seu gerenciador de e-mail padrão para enviar e-mail. 414 . ByVal lpVolumeNameBuffer As String.vbbrasil.br 206 412 .br" Shell "start.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. MAS COM APENAS UM COMANDO!!! Enviado por: Roberto Alexandre Levy Nosso amigo Ricardo colocou uma forma de impedir o fechamento de um form..com. lpVolumeSerialNumber As Long.williamdsilva@aol. UnloadMode As Integer) Cancel = 1 End Sub Tente fechá-lo de alguma forma. vbhide 415 . vbHide End Sub Não se esqueça do espaço entre (start e o endereço) 416 . Um abraço 413 . ByVal nVolumeNameSize As Long.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.com" .Como impossibilitar que o form seja fechado. lpFileSystemFlags As Long. lpMaximumComponentLength As Long.com". Mas temos uma forma bem mais simples.. ByVal nFileSystemNameSize As Long) As Long Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long .exe mailto:" & TxtEmail.vbbrasil. ByVal lpFileSystemNameBuffer As String.Abrir URL padrão com código de 1 linha Enviado por: Danilo Faustinoni Cabello shell "start http://www.

o VB só mostra 8 e acrescenta uma scroll). 127&.Parent. oComboBox.Left.hwnd.ScaleMode oComboBox.Top.Parent. VolNumber&. *** Se o drive for CDROM. MCM As Long.com. FSF As Long Dim Drive As String.Parent.Parent Is Frame Then Exit Sub oldscalemode = oComboBox. erg As Long Dim VolNumber As Long.br 207 Public Const DRIVE_CDROM = 5 *** Private Sub Command1_Click() Dim VolName As String.)" Else Print "há CD no drive)" End If Else Print " (Não há CDROM)" End If End Sub 417 .Aumentar número de linhas na Combo (por padrão. MCM&. oComboBox.ScaleMode = oldscalemode End Sub *** Form_Load () Dim i As Integer . 127&) Print Print Print Print Print Print "VolumeName:" & vbTab & VolName$ "VolumeNumber:" & vbTab & VolNumber& "MCM:" & vbTab & vbTab & MCM& "FSF:" & vbTab & vbTab & FSF& "FileSystem:" & vbTab & FSys$ "DriveType:" & vbTab & DriveType&. FSys$. ByVal x As Long. ". lNewHeight. _ oComboBox. checa o CD If DriveType& = DRIVE_CDROM Then Print " (CDROM. FSF&. 1 oComboBox. Enviado por: Adriano Faria Alves *** Módulo BAS Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long.williamdsilva@aol. DriveType& = GetDriveType(Drive$) erg& = GetVolumeInformation(Drive$.Width. DriveType As Long VolName = Space(127) FSys = Space(127) Drive = "E:\" *** O drive correspondente ao seu cd-rom. FSys As String. ByVal bRepaint As Long) As Long *** Função no Módulo BAS Public Sub SetComboHeight(oComboBox As ComboBox. ByVal y As Long.ScaleMode = vbPixels MoveWindow oComboBox. ByVal nHeight As Long. VolName$. lNewHeight As Long) Dim oldscalemode As Integer If TypeOf oComboBox. If erg& = 0 Then Print "não há CD no drive. ByVal nWidth As Long.

stBuffer.1) End Function *Para chamar a função Text1. 400) *** Onde 400 é o número que você aumenta ou diminui conforme o tanto de registro que quer mostrar quando abrir a combo. 418 . vbBinaryCompare) .Descubra o código ASCII pelo VB Enviado por: Adriano Faria Alves Abra a IMMEDIATE WINDOWS. vbNullChar.br 208 For i = 1 To 15 Combo1. 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.Saber quantas vezes seu programa foi executado Enviado por: Robson Soares . *Módulo BAS Option Compare Binary Option Explicit *Função no Módulo BAS Public Function StPasswordOfStDatabase(stDatabase As String) As String Dim hFile As Integer Dim ich As Integer Dim stBuffer As String Dim rgbytRaw() As Byte Dim rgbytPassword() As Byte Dim 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 = FreeFile Open stDatabase For Binary As #hFile Seek #hFile.com.Text = StPasswordOfStDatabase("c:\bd1.AddItem "Item " & i Next Call SetComboHeight(Combo1. 419 . vbUnicode) & vbNullChar StPasswordOfStDatabase = Left$(stBuffer. #hFile) Close #hFile ReDim rgbytPassword(0 To 19) For ich = 0 To 19 rgbytPassword(ich) = rgbytRaw(ich) Xor rgbytNoPassword(ich) Next ich stBuffer = StrConv(rgbytPassword. 66 + 1 rgbytRaw = InputB(20. InStr(1.mdb") 420 .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 d ados Access 97.williamdsilva@aol.

vbinformation+vbokonly.com.listindex = -1 End Sub Desta forma.vbexclamation+vbokonly.MoveFirst do if(tabela("Nome")="Nome Desejado")then ListBox. 0. ou Num ComboBox (para o caso de nomes iguais.MoveNext end if loop until (tabela.AddItem(tabela("Nome")) listBox.Refresh achou=true tabela."Erro") end if end sub Agora se você pretende joaga essa informação numa ListBox.br .º 2 (dropdown list combo não editável) em branco.EOF=true) if(achou=false)then aviso=msgbox("Não existe o nome procurado!".movenext else achou=false erro=true tabela.EOF=true) if((achou=false)and(erro=true))then aviso=msgbox("Não existe o registro procurado!".Movenext end if loop until (tabela. mas outros dados diferentes): private sub procurar2 dim achou as boolean dim erro as boolean tabela.tabela.br 209 O exemplo mostra quantas vezes o programa foi executado: strRun = GetSetting(App. "Run") strRun = Val(strRun) + 1 SaveSetting App."erro") else aviso=msgbox("Verifique na lista os nomes encontrados!".Limpar ComboBox com Estilo 2 (Dropdown list) Enviado por: Eduardo de Souza Para deixar o combobox com a propriedade style n. declaramos que nenhum ítem foi selecionado no combo 422 ."Nomes") end if end sub Qq notificação: a_parolin@zipmail.Title. 0. O procedimento é o se guinte: private sub procurar dim achou as boolean .com. basta colocar o código no evento click de um command button qualquer: Private Sub CommandButton_Click combobox.williamdsilva@aol. strRun MsgBox strRun 421 . "Run".MoveFirst Do if(tabela("Nome")="Nome Desejado")then TextBox.Title.Vbexclamation+Vbokonly.text= tabela("Nome") Exit sub else achou=false tabela.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.

dep pelo Notepad ou um editor de texto semelhante e inclua o .Dest=$(WinSysPath) .DLL] .hWnd .hWndOwner = Me.Uses1=CRPE32. Para solucionar esse erro edit o Crystl32. _ ByVal lpString2 As String _ ) As Long 'Tipo para def Public 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 Long End Type 'No evento clic de um botão no formulário Private Sub Command1_Click() Dim Dim Dim Dim lpIDList As Long sBuffer As String szTitle As String tBrowseInfo As BrowseInfo 'Personaliza a procura szTitle = "Titulo da procura" With tBrowseInfo .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. "") .Uses2= 424 .lpszTitle = lstrcat(szTitle.[CRPE32. nas seguintes linhas: .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 pesquisa Public Const BIF_RETURNONLYFSDIRS = 1 Public Const BIF_DONTGOBELOWDOMAIN = 2 Public 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.com.DLL .dep.williamdsilva@aol.br 210 423 .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN + BIF_EDITBOX End With .

InStr(sBuffer.Função que retorna a semana em extenso Enviado por: fabio aparecido da silva Function ExtensoSemana(DATA) SEMANA = Array("Domingo". "Segunda-Feira".1" -> Utilize o endereço de IP ou o hostname do servidor.. "Terça-Feira". 426 . WskSvr(0). ByVal requestID As Long) On Error Resume Next If Index = 0 Then CnnSvr = CnnSvr + 1 Load WskSvr(CnnSvr) WskSvr(CnnSvr). WskCli(0). "Sexta-Feira". Private Sub WskSvr_ConnectionRequest(Index As Integer.1) ..LocalPort = 1050 .0.com. vbNullChar) . []'s 427 .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: SERVIDOR No aplicativo de servidor cria a seguinte rotina: .0..> Utilize a porta que desejar. "Sabado") ExtensoSemana = SEMANA(WeekDay(DATA) .williamdsilva@aol.Accept requestID End If End 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.Listen ..br 211 '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. as horas só podem aparecer entre os valores 00:00:00 . _ "Quinta-Feira". sBuffer sBuffer = Left(sBuffer.23:59:59 Aqui está uma rotina para mostrar valores superiores como 48:00. "hh:nn") End Function Não testei com Single nem Integer como parâmetro. Public Function hFormat(dHora As Double) As String Dim Horas As String. Minutos As String Horas = Str(Fix(FullTime / 3600)) Minutos = Str((Fix(FullTime / 60) Mod 60)) hFormat = Format(Horas & ":" & Minutos. "Quarta-Feira". CLIENTE No Aplicativo de cliente as funções serão as mesmas.RemoteHost = "127. WskSvr(0).1) MsgBox "Caminha da Pasta selecionada" + vbCrLf + vbCrLf + sBuffer End If End Sub 425 .Formatar Hora com valor superior à 23:00 Enviado por: Luiz Carlos Moreira Brazão Lima Quando você usa variável no formato Date.RemotePort = 1050 -> Utilize a mesma porta que foi utilizada no servidor. WskCli(0).

br End Function Exemplo: text1. Tamanho.6 Else Segunda = CDate(DATA) .net 430 .text = ExtensoSemana("16/03/2001") ou text1.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).text = ExtensoSemana(Date) 212 428 .cjb.2) End If End Function Mais dicas: www.net 429 .fainfo. 432 .williamdsilva@aol. in_letra) As Boolean .(WeekDay(DATA) .com.Função Segunda-Feira Enviado por: fabio aparecido da silva Function Segunda(DATA) If WeekDay(DATA) = 1 Then Segunda = CDate(DATA) . MeuCaracter) End If End Function 431 .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 dela RETORNO:( True se achar e False se não achar ) Private Function Busca_String(obj_str.fasinfo. MeuCaracter) If Len(Texto) = Tamanho Then Central = Texto Else Ajusta = (Tamanho .Informações sobre sitema sem o uso de API.Centraliza textos em textsbox Enviado por: fabio aparecido da silva Function Central(Texto.Len(Texto)) / 2 Central = String(Ajusta.s Enviado por: Fabio Silva O uso da função "ENVIRON" para retornar variaveis do sistema.cjb. MeuCaracter) + Texto + String(Ajusta. "DD/MM/YYYY") End Function mais dicas: www.

vpar.BAS) insira esta função para efetuar a conversão Function removeacentos(texto As String) variavel = Text1 vpar = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜàáâãäåçèéêëìíîïòóôõöùúûü" vcod = "AAAAAACEEEEIIIIOOOOOUUUUaaaaaaceeeeiiiiooooouuuu" For c = 1 To Len(variavel) vpos = InStr(1.BAS) insira esta variavel como global Global vtexconv As Variant Insira esta parte do fonte onde deseja obter o resultado da conversão Open "LPT1" for output as #1 vtexto="Teste de acentuação no VB" vtexconv = "": removeacentos (vtexto) print #1.com. 1) SetKeyboardState kbArray End Sub Public Sub AlternaNUM() GetKeyboardState kbArray kbArray. para isso é só chamar a sub rotina AlternaCAPS() para o Caps Lock e AlternaNUM() para o NUM Lock. Public Const VK_CAPITAL = &H14 Public 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 Public Sub AlternaCAPS() GetKeyboardState kbArray kbArray.Removendo acentos para impressão de relatórios em impressoras matriciais Enviado por: Luiz Fernando C.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 Lock por botões ou eventos de seu programa. 0. c. Mid(variavel. Val(vpos). 1) Else vtexconv = vtexconv + Mid(variavel. c.kbByte(VK_NUMLOCK) = IIf(kbArray. 1) End If Next End Function 434 .kbByte(VK_NUMLOCK) = 1.br Dim a For a = 1 To Len(obj_str) If Mid(obj_str. 0.kbByte(VK_CAPITAL) = IIf(kbArray.williamdsilva@aol. close #1 No módulo (. vtexconv 'Variavel tera o valor convertido. Capacio No módulo (. 1) SetKeyboardState kbArray . 1)) If vpos <> 0 Then vtexconv = vtexconv + Mid(vcod. 1) = in_letra Then Busca_String = True Exit Function End If Next Busca_String = False End Function 213 433 . a.kbByte(VK_CAPITAL) = 1.

dll" (ByVal hwndEdit As Long. para isso é só chamar a sub rotina AlternaCAPS() para o Caps Lock e AlternaNUM() para o NUM Lock.br End Sub 434 .kbByte(VK_NUMLOCK) = 1. 1) SetKeyboardState kbArray End Sub Public Sub AlternaNUM() GetKeyboardState kbArray kbArray.Email .Text = UCase(Campotxt.kbByte(VK_CAPITAL) = 1.Text) Campotxt.SelStart = Len(Campotxt.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 sempre com caracteres em maiúsculo.kbByte(VK_CAPITAL) = IIf(kbArray. Public Const VK_CAPITAL = &H14 Public 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 Public Sub AlternaCAPS() GetKeyboardState kbArray kbArray. independente de o Caps Look estar ligado ou desligado Private Sub Campotxt_Change() Campotxt.kbByte(VK_NUMLOCK) = IIf(kbArray. opção Referências e Ativar a referência Microsoft Active Messaging.Usando o AutoCompletar do Internet Explorer 5 Enviado por: Fábio Perkowitsch Mulero Inserindo esse fragmento de código vc pode usar a ferramenta autocompletar do IE5. Public Declare Function SHAutoComplete Lib "Shlwapi. bastando para isso chamar a sub rotina MakeAutoComplete() no evento form_load e passando qual textbox ira usar essa ferramenta.hWnd. 1) SetKeyboardState kbArray End Sub 435 .com.williamdsilva@aol. 0.Alternando NumLock e CapsLock por código Enviado por: Fábio Perkowitsch Mulero 214 Você pode inserir esse fragmento de código em seu programa e fazer com que seja acionado ou desacionado as teclas NUM e CAPS Lock por botões ou eventos de seu programa. 0.Text) End Sub 436 . .Ler o conteúdo com CDO Enviado por: Ricardo Garrido Schwach Antes de Começar: Ir no Menu Project. ByVal dwFlags As Long) As Long Public Const SHACF_DEFAULT As Long = &H0 Public Sub MakeAutoComplete(ByRef TextB As TextBox) Call SHAutoComplete(TextB. SHACF_DEFAULT) End Sub 437 .

Width) \ 2 End Sub 'Obs: FormMDI é o nome do formulário MDI.Enabled = False Timer3.Height Me.Enabled = True Timer2.DLL Private Sub Command1_Click() Dim objSession As Object Set objSession = CreateObject("MAPI.Enabled = False Timer4. False For Each objMessage In objSession.None.Unread = True Then If InStr(objMessage.Width.Text End If End If Next objMessage End Sub 438 .Inbox. Enviado por: Arthur Lopes Você deve criar 5 timer : ( Timer. Timer3 e Timer4 ) ==> General Declarations <== Dim vform As String ==> No LOAD do FORM <== 'Private Sub Form_Load() vform = "T" Form1.Left = 0 Me.ScaleHeight .Width = .Width End With Me.Session") objSession.Height) * 0.com.Enabled = False 'End Sub . Timer1.Me.Logon "Configurações do MS Exchange".br 215 Obs. Inclua nele uma imagem chamada imgBackgroud e insira o seguinte código de evento: Private Sub Form_Load() With imgBackgroud . "Assunto do Email") Then Var = objMessage. . 0.: É Necessário ter a seguinte DLL registrada: OLEMSG32.Top = (FormMDI. Timer2.Top = 0 .Height .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 . .Show End Sub 439 .Stretch = False .Left = (FormMDI.Messages If objMessage.45 Me. False.Move 0.Caption = vform Timer1. .Subject.27 * 15 End With frmBackground.ScaleWidth . Este formulário deve 'ser carregado no evento MDIForm_Load: Private Sub MDIForm_Load() With Screen 'Ocupa toda a tela Me.williamdsilva@aol.Me.Height = .Criando animação no Caption do Form sem API.

Additem a_line 'Preenche o ListBox com os dados do adicionando cada linha até a última linha do arquivo Loop 'Finaliza o Laço Close fnum 'Fechar o arquivo .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.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 Form With Me ..Height .com.txt").br 216 ==> No Timer do Timer1 <== 'Private Sub Timer1_Timer() If vform = "T" Then vform = vform + "e" Form1. Renomei-e o ComboBox para CboFile e o ListBox para LstFile.Title 'Caso o arquivo não seja encontrado exibe a caixa de mensagem Exit Sub 'Envia o comando para o fim da rotina End If fnum = FreeFile 'Devolve a variável fnum a crarterística de FreeFile Open "C:\Lista de Alunos.Top = (Screen.Width .Caption = vform Timer2.Caption = vform Timer3.Width) / 2 'Alinha o form no horizontalmente no centro . vbArchive) = Empty Then 'Verifica se o arquivo se o arquivo existe MsgBox "O arquivo não foi encontrado!".txt" For Input As fnum 'Abre o arquivo Do While Not EOF(fnum) 'Vai para fim de arquivo Input #fnum.Enabled = True End If End Sub 440 . 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.AddItem a_line 'Preenche o ComboBox com os dados do adicionando cada linha até a última linha do arquivo LstFile. até chegar a última linha CboFile..Enabled = True End If 'End Sub ==> No Timer do Timer1 <== 'Private Sub Timer3_Timer() If vform = "Tes" Then vform = vform + "t" Form1. App. vbCritical.txt".: C:\Lista de Alunos.Enabled = True End If 'End Sub ==> No Timer do Timer2 <== 'Private Sub Timer2_Timer() If vform = "Te" Then vform = vform + "s" Form1.Caption = vform Timer4. Em seguida no evento Load do Form1. insira as seguintes linhas de comando: Private Sub Form_Load () 'Declaração das variáveis Dim fnum As Integer Dim lines As Integer Dim a_line As String If Dir("C:\Lista de Alunos.williamdsilva@aol.Left = (Screen.Height) / 2 'Alinha o form no verticalmente no centro End With End Sub 441 .

hwnd.Text = a & "\SYSTEM\yourfile" Then GoTo jumpcopy FileCopy strFilePath. ByVal nSize As Long.ANA" As a & "\WIN. ByVal lpFileName As String. strFilePath. ByVal dwType As Long) As Long x% = WNetConnectionDialog(Me.EXEName) lngReturn = GetModuleFileName(lngFileHandle. b Print #2. 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. MAX_PATH) Text1.dll" _ (ByVal hwnd As Long. Spc(0). Spc(0).INI jumpcopy: Open a & "\WIN.com. a & "\SYSTEM\yourfile" 'Modify WIN. ByVal Filename As String) As Long Global CDMin As Integer Global CDSec As Integer .br End Sub 217 442 .INI" End Sub 443 . ByVal lpKeyName As Any. ByVal keydefault As String.Abra a janela Mapear Unidade de Rede Enviado por: Gilson Cezar Rodrigues Bernal Private Declare Function WNetConnectionDialog Lib "mpr.ANA" GoTo end ElseIf b = "[windows]" Then Print #2. "load=" & a & "\SYSTEM\yourfile" Input #1.ANA" For Output As #2 While Not EOF(1) Input #1. b If b = "load=" & a & "\SYSTEM\yourfile" Then Close #1 Close #2 Kill a & "\WIN.Carregando seu programa ao iniciar o windows automaticamente Enviado por: Gilson Cezar Rodrigues Bernal 'EXE Location Public Const MAX_PATH = 206 Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long Public Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long.williamdsilva@aol. 1) 444 .Text = strFilePath 'Copy Server File to Windows System Directory If Text1.Listar as músicas de um CD Audio Enviado por: Gilson Cezar Rodrigues Bernal Option Explicit Private Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" _ (ByVal lpApplicationName As String. ByVal lpFileName As String) As Long Private Declare Function WritePrivateProfileString Lib "Kernel32" Alias "WritePrivateProfileStringA" _ (ByVal AppName As String. ByVal lpDefault As String.INI" For Input As #1 Open a & "\WIN. ByVal lpReturnedString As String. ByVal KeyName As String.INI" Name a & "\WIN. b End If Wend Close #1 Close #2 Kill a & "\WIN.

Sec As String.TSec)) RMin = Val(Min) RSec = Val(Sec) If RSec < 0 Then RSec = 60 + Val(Sec) RMin = RMin .TMin)) Sec = LTrim$(Str$(CDSec .cpl.br Global Global Global Global Global Global Global TMin As Integer TSec As Integer RMin As Integer RSec As Integer TimeTrack As String TimeElapsed As String TimeRemaining As String 218 Global Artist1 As String Global Title1 As String Global Artist2 As String Global Title2 As String Sub CDAudioProperties() Dim T As Double On Error Resume Next T = Shell("rundll32. Min As String.Control_RunDLL mmsys.exe shell32.com.. _ Temp As String Z = GetRunningTime(MMCOntrol1) Z = GetTrackTime(MMCOntrol1) Min = LTrim$(Str$(CDMin .1 End If Min = LTrim$(Str$(RMin)) Temp = Trim$(Str$(RSec)) If Len(Temp) = 1 Then Sec = "0" + Temp Else Sec = Temp . 5) End Sub Function GetRawRemainingTime(MMCOntrol1 As Object) As String Dim Z As String.3". _ Temp As String Z = GetRunningTime(MMCOntrol1) Z = GetTrackTime(MMCOntrol1) Min = LTrim$(Str$(CDMin .williamdsilva@aol.1 End If Min = LTrim$(Str$(RMin)) Temp = Trim$(Str$(RSec)) If Len(Temp) = 1 Then Sec = "0" + Temp Else Sec = Temp End If GetRawRemainingTime = Min + Sec End Function Function GetRemainingTime(MMCOntrol1 As Object) As String Dim Z As String.TMin)) Sec = LTrim$(Str$(CDSec .TSec)) RMin = Val(Min) RSec = Val(Sec) If RSec < 0 Then RSec = 60 + Val(Sec) RMin = RMin .dll. Min As String. Sec As String.

Sec$.com. 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$.Position . M As String. Min$.br End If GetRemainingTime = Min + ":" + Sec End Function 219 Sub GetTime(MMCOntrol1 As Object) Dim Z$ Z$ = GetRemainingTime(MMCOntrol1) End Sub Function GetTrackTime(MMCOntrol1 As Object) As String Dim Length&. Entry2$ MMCOntrol1.MMCOntrol1. Entry$ MMCOntrol1. Length&.williamdsilva@aol.TrackLength Min$ = 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 If If Len(Entry2$) = 3 Then D$ = "00" + Entry2$ Else D$ = Entry2$ End If D$ = Entry2$ GetTrackTime = Trim$(D$) MMCOntrol1. Sec$. Entry2$.TimeFormat = 2 Length& = MMCOntrol1.TimeFormat = 10 CDMin = Val(Min$) CDSec = Val(Sec$) End Function Function GetRunningTime(MMCOntrol1 As Object) As String Dim E As Long. D$. 2) Else S = Sec$ . S As String.TrackPosition Min$ = Str$(Length& And &HFF) Sec$ = LTrim$(Str$((Length& And 65280) / 256)) If Len(Sec$) = 3 Then D = Val(Min$) . Min$.1 Min$ = LTrim$(Str$(D)) E = Val(Right$(Sec$.TimeFormat = 2 Length& = MMCOntrol1. D As Long.

'If no section (appname). Length&.TimeFormat = 10 End Function Public Function myReadINI(inifile.br End If End If TMin = Val(M) TSec = Val(S) Entry2$ = LTrim$(M) + ":" + LTrim$(S) MMCOntrol1. Sec$. inisection. D$ MMCOntrol1. 2) Else S = Sec$ End If End If Entry2$ = M + S MMCOntrol1.1 Min$ = LTrim$(Str$(D)) E = Val(Right$(Sec$.TimeFormat = 10 GetRunningTime = Entry2$ End Function 220 Function GetRawRunningTime(MMCOntrol1 As Object) As String Dim E As Long. inikey. Min$. Sec$. iniDefault) 'Fail fracefully if no file / wrong file is specified. 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" '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$. default is first appname 'if no key.TimeFormat = 2 Length& = MMCOntrol1. Entry2$. S As String. Entry2$ MMCOntrol1. Min$. default is first key Dim lpApplicationName As String .TrackLength Min$ = 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.com.TrackPosition Min$ = Str$(Length& And &HFF) Sec$ = LTrim$(Str$((Length& And 65280) / 256)) If Len(Sec$) = 3 Then D = Val(Min$) .Position .williamdsilva@aol. M As String.MMCOntrol1.TimeFormat = 2 Length& = MMCOntrol1. D As Long.TimeFormat = 10 GetRawRunningTime = Entry2$ End Function Function GetRawTrackTime(MMCOntrol1 As Object) As String Dim Length&.

2.Length) + Compat End If GenCDSerial = dwtotal& End Function Function msf2frames(msf As Long) As Long . inifile) myWriteINI = LTrim$(Str$(retval)) End Function Public Function GenCDSerial(MMCOntrol1 As Object) As Long Const MCI_FORMAT_MILLISECONDS = 0 Const MCI_FORMAT_MSF = 2 Const MCI_FORMAT_TMSF = 10 'MCI_Format :0.com. inisection As String.EXE Compat = 1 MMCOntrol1.Tracks DoEvents MMCOntrol1. lpReturnedString.Shareable = True If MMCOntrol1.ErrorMessage Exit Function End If 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 i If MMCOntrol1. nSize.williamdsilva@aol. byte2%.Notify = False MMCOntrol1. inikey.10 are the only supported formats for CD Dim Compat As Integer Dim i As Integer Dim dwtotal&. lpDefault.TimeFormat = MCI_FORMAT_MSF dwtotal& = 0 For i = 1 To MMCOntrol1.br Dim lpKeyName As String Dim lpDefault As String Dim lpReturnedString As String Dim nSize As Long Dim lpFileName As String Dim retval As Long Dim Filename As String lpDefault = Space$(254) lpDefault = iniDefault lpReturnedString = Space$(254) 221 nSize = 254 lpFileName = inifile lpApplicationName = inisection lpKeyName = inikey Filename = lpFileName retval = GetPrivateProfileString _ (lpApplicationName. dwtemp& Dim byte0%. inikey As String.Track = i dwtemp& = MMCOntrol1.Wait = True MMCOntrol1.Error <> 0 Then MsgBox MMCOntrol1. byte3% 'compat = 0 for EXISTING code 'Compat = 1 for use with CDPLAYER. Info As String) As String Dim retval As Long retval = WritePrivateProfileString(inisection. byte1%. lpFileName) myReadINI = lpReturnedString End Function Public Function myWriteINI(inifile As String.Tracks < 3 Then dwtotal& = dwtotal& + msf2frames(MMCOntrol1. Info. lpKeyName.

Position And &HFF& Rem byte2 = (MMControl1. _ ByVal hWndInsertAfter As Long.Exibindo/Ocultando o ponteiro do mouse Enviado por: Gilson Cezar Rodrigues Bernal 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 . byte3 As Integer Dim Min.Position And &H7F000000) \ &H1000000 Rem If (MM Control1. byte1. 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 String Dim A As Integer For A = 1 To Len(String1) If Mid$(String1. ByVal nIndex As Long.br 222 Rem From the KnowledgeBase Rem byte1 = MMControl1. A .Position And &H80000000) <> 0 Then Rem ' put sign bit back into byte4 Rem byte4 = byte4 + &H80 Rem End If Dim byte0. A. byte2.Position And &HFF00&) \ &H100 Rem byte3 = (MMControl1.Position And &HFF0000) \ &H10000 Rem byte4 = (MMControl1. ByVal CY As Long.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. 1) = Chr$(0) Then Exit For Next A Z_Trim = RTrim$(Left$(String1. ByVal x As Long.com. _ ByVal dwNewLong As Long) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long. ByVal y As Long. Sec. ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hwnd As Long. _ ByVal CX As Long.williamdsilva@aol. ByVal wFlags As Long) As Long Private Const GWL_EXSTYLE = (-20) Private Const WS_EX_CLIENTEDGE = &H200 Private Const WS_EX_STATICEDGE = &H20000 Private Private Private Private Private Const Const Const Const Const SWP_FRAMECHANGED = &H20 ' Frame Changed SWP_NOMOVE = &H2 SWP_NOOWNERZORDER = &H200 SWP_NOSIZE = &H1 SWP_NOZORDER = &H4 .1)) End Function 445 .

eu estava "brincando" com o código MID e crie uma animação com apenas um timer. ByVal bState As Boolean) Dim rtnVal As Long ' Get current border style rtnVal = GetWindowLong(lhWnd.Caption = Me.Como Executar Um Som De Fundo No Código Enviado por: mario gardenias neto Basta Declarar a Função Playsound Após Executar: ..br 223 Public Function ThinBorder(ByVal lhWnd As Long. x Private Sub Form_Load() 'mensagem do form title = "digite aqui a mensagem" Me.Caption = "" Exit Sub End If 'caption do form igual ao caption mais letras da mensagem Me..Caption = "" x=1 End Sub 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. rtnVal SetWindowPos lhWnd. 0. 1) x=x+1 End Sub só isso. 0. demais !!!! Enviado por: Danilo Faustinoni Cabello Olá vi e revi muitos códigos para animação no titulo. 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. Vamos fazer !? 'Crio as variaveis Dim title.. escolha quanto de intervalo vc quer e nunca mais faça milhões de ifs para fazer uma mensagenzinha 448 . SWP_NOMOVE Or SWP_NOSIZE Or _ SWP_NOOWNERZORDER Or SWP_NOZORDER Or SWP_FRAMECHANGED End Function 447 .Caption + Mid(title.. x. 0.Animação no titulo. 0. GWL_EXSTYLE. mas sem querer desprestigiar os que enviaram o código ele era 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. 0.williamdsilva@aol.com.

".". i . Chr(34)) Do Until i = 0 224 cValorAux = Left(cValorAux.". cValorAux As String cValorAux = cValor i = InStr(cValorAux.server=localhost. cValorAux. Chr(34)) Loop i = InStr(cValorAux.". Chr(39)) Do Until i = 0 cValorAux = Left(cValorAux.Connection") '**** abrindo conexao cnn.1 e depois fazer os seguinte comandos par aconectar Dim Ssql As String Dim cnn As ADODB.Open "select * from clientes" '*** efetuando isert na tabela clientes no NomeDoDatabase Ssql = "insert into clientes (Nome.pwd=senha.RecordSet") '**** efetuando conexao do recordset Set Rs. i .uid=usuario.1) & Chr(96) & Mid(cValorAux.williamdsilva@aol.br Call (Variavel) = playsounda("path + Som") 449 .Connection Dim Rs As Recordset '**** crianto conexao Set cnn = CreateObject("ADODB.com. i + 1) i = InStr(i.". cValorAux. Escolher o MySql e criar os RPT .endereco) values ('Georgenes'. Chr(39)) Loop TrocaAspas = cValorAux End Function 450 . i + 1) i = InStr(i.Execute Ssql no CRYSTAL basta escolher opcao de criar com SQL/ODBC.ActiveConnection = cnn Rs.'Rua Do Endereco.".") ou Virgula por Ponto Replace(Campo.Open "driver=MySQL}.TROCANDO PONTO POR VIRGULA(2) Enviado por: Lucas Mesquita Vieira Uma boa dica para fazer a troca: Replace(Campo.") 452 .database=NomeDoDatabase" '**** criando recordset Set Rs = CreateObject("ADODB.1) & Chr(96) & Mid(cValorAux.conectar Vb com MySql Enviado por: georgenes s oliveira Voce precisa fazer referencia do ADO 2.Aspas (tratando aspas) Enviado por: Flávio Luiz Teixeira Dominges Function TrocaAspas(cValor As String) As String Dim i As Integer. 99')" cnn.

exe user.exe.TAB automático para o próximo campo(bem mais fácil) Enviado por: Pablo Till No evento Form_KeyDown.com.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 .williamdsilva@aol. Shift As Integer) If KeyCode = vbKeyReturn Then SendKeys "{Tab}" End Sub Falow Galera !!!! Pablo 456 . Text1 By Fox Sistemas 454 . vbNormalFocus End Sub . Campo As TextBox) If Campo.NumeroBox Enviado por: Frank de Alcantara Nogueira Soares Para fazer usar uma caixa de texto que só aceita valores numéricos crie a seguinte função: Em um módulo bas 225 Public Function NumeroBox(Numero As String.br 453 .Text = "" Then Exit Function If Not IsNumeric(Numero) Then MsgBox "Digite apenas Números" Campo.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. basta adicionar as linhas: If KeyCode = vbKeyReturn Then SendKeys "{Tab}" Ex: Private Sub Form_KeyDown(KeyCode As Integer.exitwindows".Text = "" 'Limpa a caixa de Texto End If End Function Para chamar a função coloque as seguintes linhas no evento change da Caixa de Texto NumeroBox Text1.