456dicas VB

download 456dicas VB

If you can't read please download the document

Transcript of 456dicas VB

[email protected]

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

[email protected]

2

Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de Dicas de

Dicas de Dicas de Dicas de Dicas de Dicas de

Dicas de Dicas de Dicas de Dicas de Dicas de

Dicas de Dicas de Dicas de Dicas de Dicas de

Dicas de Dicas de Dicas de Dicas de Dicas de

1 - Reconhecendo o pressionamento de teclas Enviado por: Visual Basic Brasil Declare as constantes que voc desejar utilizar em um mdulo. Exemplo: Global Const KEY_F1 = &H70 Global Const KEY_F2 = &H71 Global Const KEY_F3 = &H72 Global Const KEY_F4 = &H73 Global Const KEY_F5 = &H74 Global Const KEY_F6 = &H75 Global Const KEY_F7 = &H76 Global Const KEY_F8 = &H77 Global Const KEY_F9 = &H78 Global Const KEY_F10 = &H79 Global Const KEY_F11 = &H7A Global Const KEY_F12 = &H7B Global Const KEY_F13 = &H7C Global Const KEY_F14 = &H7D Global Const KEY_F15 = &H7E Global Const KEY_F16 = &H7F A listagem de todas as constantes esto no arquivo constant.txt (Uma cpia desse arquivo, que acompanha o VB, est na pgina de arquivos do VBB). Em seguida digite o cdigo 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 formulrio Enviado por: Visual Basic BrasilPara alinhar controles no formulrio, basta incluir o seguinte cdigo 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)

[email protected]

3

controle o nome do controle que voc deseja alinhar, e form o nome do formulrio onde est o controle. Se o formulrio que contm o controle, for redimensionvel, ento bom que voc coloque o cdigo no procedimento Form_Resize. Assim, sempre que voc modificar o tamanho do formulrio, o controle ser automaticamente centralizado.

3 - Carregando o projeto que voc quiser Enviado por: Visual Basic Brasil O Visual Basic sempre carrega os mesmos arquivos e custom controls automaticamente quando voc inicia um novo projeto. Na verdade, ele carrega um projeto j existente no seu diretrio. 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 esto no diretrio principal (raiz) do VB. sempre bom que voc faa uma cpia de segurana desses arquivos antes, para qualquer eventualidade... 4 - Formulrio MDI Child Enviado por: Andr Lus Milar de Medeiros Para centralizar um formulrio 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 Maisculo/Minsculo Enviado por: Lionardo Fonseca Paiva A vai uma funo bastante til... Public Function MMCase(Texto As String) As String 'Esta funo converte o texto para Maiusculo/Minusculo, deixando as 'primeiras letras das palavras em maiusculo. 'respeitando as excees da lingua portuguesa como: de, da, do, das, dos, a, e '***** Autor: Lionardo Fonseca Paiva '***** [email protected] Dim Palavra, PosioInicial, PosioFinal Dim resultado As String PosioInicial = 1 Texto = LCase(Texto) & " " Do Until InStr(PosioInicial, Texto, " ") = 0 PosioFinal = InStr(PosioInicial, Texto, " ") Palavra = Mid(Texto, PosioInicial, PosioFinal - PosioInicial) PosioInicial = PosioFinal + 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

[email protected]

4

resultado = resultado & " " & Palavra Loop MMCase = Trim(resultado) End Function

6 - Ocultar/mostrar barra de tarefas Enviado por: Visual Basic Brasil Coloque na seo de Declaraes do formulrio: 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 padro Enviado por: Visual Basic Brasil Para abrir um link atravs do VB, no navegador padro, coloque o seguinte cdigo na seao de declaraes: #If Win32 Then Private Declare Function ShellExecute Lib _ "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long #Else Private Declare Function ShellExecute Lib _ "shell.dll" _ (ByVal hwnd As Integer, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Integer) As Integer #End If

[email protected]

5

Private Const SW_SHOWNORMAL = 1

No procedimento CLICK de algum controle, digite: Private Sub label1_Click() Dim iret As Long iret = ShellExecute(Me.hwnd, _ vbNullString, _ "http://www.vbbrasil.com", _ vbNullString, _ "c:\", _ SW_SHOWNORMAL) End Sub

8 - Confirmar trmino do programa Enviado por: Visual Basic Brasil Para perguntar ao usurio se ele realmente deseja sair do programa: Private Sub Form_Unload(Cancel As Integer) sair = MsgBox("Tem certeza que deseja sair do programa?", _ vbYesNo + vbExclamation, "Ateno") If sair = vbYes Then End Else Cancel = True End If End Sub

9 - Usando a tecla Enter no lugar da tecla Tab Enviado por: Almando Menezes Guimares Esta Dica para quem quer que a tecla enter funcione como um tab para mudar de campo. 1 - Mude a propriedade KeyPreview do formulrio para true. 2 - Coloque o seguinte cdigo no evento KeyDown do formulrio. If KeyCode = vbKeyReturn then Sendkeys "{Tab}" Pronto, agora sempre que for pressionado um enter no formulrio sera disparado um tab. 10 - Letras Maisculas e Minsculas Enviado por: Andr Lus Milar de Medeiros No Evento Keypress utilize, Para Maisculas: KeyAscII= Asc(Ucase(Chr(KeyAscII)))

Para Minsculas: KeyAscII= Asc(Lcase(Chr(KeyAscII)))

Pronto! No necessrio a utilizao de API's

11 - Busca de Strings em um TextBox Enviado por: Fausto Fiorese No General do Form:

[email protected]

6

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, 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, Titulo, 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. 'Existindo a string, entao verificado se a busca ser feita ' "para baixo" (F3) ou "para cima" (Shift+F3) If KeyCode = 114 Then If InStr(Text1.Text, Find_String) = 0 Then MsgBox "Texto no encontrado!", vbInformation Exit Sub End If If Shift = 1 Then If First_Pos = 0 Or InStr(Mid(Text1.Text, 1, First_Pos), Find_String) = 0 Then First_Pos = Len(Text1.Text) End If For i% = (First_Pos - 1) To 1 Step -1 If Mid(Text1.Text, i%, Len(Find_String)) = Find_String Then Pos% = i% Exit For End If DoEvents Next For i% = (First_Pos - 1) To 1 Step -1 If Mid(Text1.Text, i%, 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.SelStart = Pos% - 1 Text1.SelLength = Pos_Fim% - Pos% Else Pos% = InStr(Last_Pos, Text1.Text, Find_String) First_Pos = Pos% If Pos% = 0 Then Last_Pos = 1 Pos% = InStr(Last_Pos, Text1.Text, Find_String) End If Pos_Fim% = Len(Find_String) + Pos% Last_Pos = Pos_Fim% Text1.SelStart = Pos% - 1 Text1.SelLength = Pos_Fim% - Pos% End If End If End Sub

12 - DoEvents Enviado por: Fabio Quando for trabalhar com processamentos longos, procure sempre utilizar uma ProgressBar ou coisa assim p/ interar o usurio. Voc pode tambm, quando estiver utilizando loops como Do...Loop, For...Next, criar um Boto Cancelar com a funao DoEvents, que retorna a ateno p/ o Sistema.

[email protected]

7

simples, declare en General uma varivel do tipo Booleana. Na Rotina onde ir utilizar o Loop, comece atribuindo um valor False p/ a varivel : Para = false.

Logo quando comear o Loop, faa o seguinte:Do DoEvents if Para = true then exit sub No Boto Cancelar, s atribua um valor true p/ a varivel: Para = True

muito simples, o loop sempre voltar a ateno p/ o sistema, quando o usurio clicar em cancelar ele muda o valor do Booleano. Isso muito til, e vc pode utilizar DoEvents p/ vrias outras coisas no intuito de no travar seu Micro. Copyright (c) 1996-2001 Visual Basic Brasil 13 - Deixar a Caixa de Texto (TextBox) com o texto selecionado ao entrar Enviado por: Mateus Zambonatto Pezzin Basta colocar no evento GOTFOCUS da caixa de texto, por exemplo, TEXT1, a seguinte rotina: text1.selstart = 0 text1.sellenght = len(text1.text) Simples e eficaz, funciona sempre! 14 - Ajustando os controles dentro do Formulrio Enviado por: Fabio Como j dito em uma dica enviada por no sei quem, podemos centralizar os controles no Form usando os procedimentos j citados. Voc pode tambm, fazer com que o tamanho de seus controle fique proporcional ao tamanho do Formulrio. fcil, veja o tamanho e altura(Width e Height) do Form e do controle que vai utilizar. Veja a diferena entre eles, vamos supor que seja 600. No evento Form_Resize(que ocorre qdo o tamanho da form alterado), atualize a proporo: frame1.width = form1.width - 600 frame1.height = form1.height - 600 Qdo vc maximizar a tela o controle se ajustar, e qdo alterar o tamanho tambm. Nesse evento vc tambm pode escrever os procedimentos p/ centralizar os controles como mandou um colega a, e fazer vrias outras coisas. 15 - Confirmando saida do programa II Enviado por: Rodrigo Meirelles de Mello Modificando a dica existente, assim no se precisa declarar mais uma varivel: If MsgBox("Tem certeza que deseja sair do programa?", _ vbYesNo + vbExclamation, "Ateno") = vbYes Then End Else Cancel = True End If

16 - Salvar Bmp da caixa de imagem Enviado por: Marcelo Nagy

[email protected]

8

Voc j conhece o processo de leitura de um bmp para uma caixa de imagem ? assim: Image1.picture=loadpicture("c:\Windows\carros.bmp") Mas voc tambm pode gravar uma imagem que est em uma caixa de imagem e converte-lo para bmp, gif, etc. assim SavePicture image1, "C:\windows\teste.bmp" fcil ?????!!!!!! Espero que sirva pra alguem falou galera ! 17 - Colocar sempre visivel o form como um Tollbox Enviado por: Armando Estruc Tem que fazer um mdi ou uma a tela principal que seria um mdi, e colocar um form nao child e na hora de chamar este form nao child colocar o seguinte comando Nomedoform.Show , NomedoMid

18 - Colocar Titulos do programa VB para o Crystal Enviado por: Armando Estruc Para mandar coisa do VB para o crystal tem que ir ao crystal e colocar uma formula onde deseja cria um titulo ou mandar outra coisa, na formula colocar o nome e depois a formula que seria assim: "*" Depois 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.

19 - Fechar um Formulrio Enviado por: Cleiton Oliveira da Silva Para se fechar um formulrio no basta usar o comando unload e o nome do mesmo e sim : Unload Set = Nothing Pois assim estaro sendo fechadas tambm as variveis pertencentes ao formulrio.

20 - Aplicao j iniciada Enviado por: Hantan Para voc verificar se sua aplicao j est sendo executada coloque o sequinte cdigo no inicio do form. If App.PrevInstance Then End Espero que seja til.

21 - Arrendondar casas decimais Enviado por: Hantan Para arredondar casa decimais crie a seguinte funo: Function Round(Nmr As Double, Casas As Integer) As Double Round = Int((Nmr * 10 ^ Casas) + 0.5) / 10 ^ Casas End Function

[email protected] chamar a funo utiliza-se: Dim Resultado as integer Resultado = Round([VALOR], [NUMERO DE CASAS]) Text1.Text = Resultado Espero ter ajudado.

9

22 - Formulrio OnTop Enviado por: Hantan Para manter um formulrio OnTop ou seja, sempre visvel faa o seguinte: Declare o seguinte em um mdulo .BAS: Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags_ As Long) As Long Global Const conHwndTopmost = -1 Global Const conHwndNoTopmost = -2 Public Const SWP_NOMOVE = 2 Public Const SWP_NOSIZE = 1 Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE Para colocar um Form OnTop coloque o seguinte cdigo: SetWindowPos [NOMEDOFORM].hwnd, -2, 0, 0, 0, 0, FLAGS Espero ter ajudado.

23 - Reconhecendo o pressionamento de teclas - Mais simples sem mdulo Enviado por: Tercio Filho Para reconhecer o pressionamento de teclas mais fcil coloque o seguinte cdigo no evento keyDown ou keyUp do form ou do objeto: If (KeyCode = [TECLA]) then Beep 'TECLA significa o valor para a tecla pressionada. 'Os valores esto no HELP do VB em "Keycode Constants" 'Ex.: If (KeyCode = VbKeyF2) then Beep 'Toca um Beep quando a teclar F2 for apertada. Abraos. 24 - VB que fala: Bom dia, boa tarde e boa noite nos respectivos horrios. Enviado por: Mrcio Britto Neste exemplo, eu usei imagens, mas pode se usar apenas textos... Dim Agora, BomDia, BoaTarde, BoaNoite As Variant, Nome As String Agora = Time$ BomDia = "00:00:00" BoaTarde = "12:00:00" BoaNoite = "19:00:00"

[email protected]

10

If Agora > BoaNoite Then Pic_Noite.Visible = True Pic_Tarde.Visible = False Pic_Dia.Visible = False ElseIf Agora > BoaTarde Then Pic_Noite.Visible = False Pic_Tarde.Visible = True Pic_Dia.Visible = False ElseIf Agora > BomDia Then Pic_Noite.Visible = False Pic_Tarde.Visible = False Pic_Dia.Visible = True End If

25 - Metodo de selecao de registros usando SQL Enviado por: Rodrigo Meirelles de Mello Temos como um exemplo um Banco de dados Agenda com os seguintes campos NOME, TELEFONE, ENDERECO, SEXO Nao citarei como se deve declarar variaveis visto que ja fiz isso em uma dica anterior... Tendo tudo declarado... 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 no humaita... --> Set DYNagenda = DBagenda.createdynaset ("select * from agenda where sexo = ' " & TXTprocurasexo & " ' and bairro = ' " & TXTprocuraBairro & " ' ") Explicando a sintaxe: ("select * from (1)agenda where (2)sexo = ' " & (3)TXTprocurasexo & " ' and (4)bairro = ' " & (5)TXTprocuraBairro & " ' ") (1) Tabela agenda do banco de dados agenda.mdb (2) Campo Sexo (3) TXTProcuraSexo - onde eu informo o sexo... (4) Campo bairro (5) TXTprocurabairro - onde eu informo o Humaita Espero ter ajudado, qquer duvida mail-me... 26 - Metodos de procura, Usando o Find... Enviado por: Rodrigo Meirelles de Mello - DJOP Nesta dica, informarei como se encherga o valor de um campo TXT por exemplo na sintaxe dentro do Find... Exemplo:

[email protected] em um Mdulo declara-se as variaveis... Global DBagenda as Database Global DYNagenda as Dynaset ------- No form.Load

11

Set DBagenda = OpenDatabase("c:\agenda\arquivo.mdb") ' Define o arquivo de banco de dados Set DYNagenda = DBagenda.OpenTable("agenda") ' Abri a tabela agenda do banco de dados Set DYNagenda = DBagenda.CreateDynaset("agenda") ------Para se procurar por exemplo uma pessoa que more em botafogo Posso usar a seguinte sintaxe... DYNagenda.findfirst "bairro = ' " + TXTbairro + " ' " Desta forma estou procurando no campo bairro o valor do campo TXTbairro se eu nao fizesse esta sintade ( ' " + ??? + " ' ) e coloca-se somente "bairro = TXTbairro" o programa iria procurar a frase TXTbairro. OBS.: O findFist procura o primeiro nome da lista... em seguida coloque uma rotinhazinha de verificacao... tipo: if DYNagenda.NoMatch then msgbox "Nao encontrei nenhuma pessoa que more em" & TXTbairro, , "Agenda eletrnica" Pode-se tb usar o FindFirst, FindNext, FindPrevious e FindLast ----Esta Sintaxe pode ser usada em varias outras formulas, em SQL por exemplo Onde em uma proxima dica colocarei uma sintaxe de selecao em SQL, que muito mais rapido do que o Find, Outro mtodo de pesquisa absurdamente mais rapido que o Find, o Seek mas o Find se encaixa perfeitamente para Banco de dados pequenos... Espero ter ajudado... Qualquer duvida escreva-me. 27 - VB que fala: Bom dia, boa tarde e boa noite nos respectivos horrios. 2 Enviado por: Rodrigo Meirelles de Mello - DJOP Analisando uma dica previamente mandada, percebi que as pessoas gostam de declarar variaveis sem necessidade... If time$ > "19:00:00" Then Pic_Noite.Visible = True Pic_Tarde.Visible = False Pic_Dia.Visible = False ElseIf time$ > 12:00:00 Then Pic_Noite.Visible = False Pic_Tarde.Visible = True Pic_Dia.Visible = False ElseIf time$ > 00:00:00 Then Pic_Noite.Visible = False Pic_Tarde.Visible = False Pic_Dia.Visible = True End If

[email protected]

12

Deste modo nao se declara variaveis...

28 - Colocar um "Continua..." em relatrios do Crystal Reports Enviado por: Uriel Papa Para quem deseja colocar a expresso "Continua..." no final de cada pgina do relatrio, com excesso da ltima, aqui vai a dica: Escolha um campo da linha de detalhes que nunca receba valores nulos (Campo_A). Insira a seguinte frmula no bottom da pgina: If NextIsNull({Campo_A}) then "" Else "Continua..."

[]'s, Uriel 29 - Usando o objeto printer para imprimir formulrios. Enviado por: Cecil Weiss Coloca o vb no modo de impresso de caracteres Printer.ScaleMode = 4 Printer.CurrentX = 0 'coluna Printer.CurrentY = 0 'linha Printer.Print "Nome=" Printer.CurrentX = 7 'coluna Printer.CurrentY = 0 'linha Printer.Print "Nome=" Experimente estes cdigos, usando "scalemode", voce pode imprimir usando medidas por caracteres, pixels, twips, etc... veja abaixo a tabela. vbUser = 0: Indica que uma ou mais das propriedades ScaleHeight, ScaleWidth, ScaleLeft e ScaleTop esto configuradas como valores personalizados. VbTwips = 1: VbPoints = 2: VbPixels = 3: vbCharacters = 4: VbInches = 5: VbMillimeters = VbCentimeters = '(Padro) Twip (1440 twips por polegada lgica; 567 twips por centmetro lgico). 'Ponto (72 pontos por polegada lgica). 'Pixel (menor unidade de resoluo de monitor ou impressora). 'Caractere (horizontal = 120 twips por unidade; vertical = 240 twips por unidade). 'Polegada. 6: 7: 'Milmetro. 'Centmetro.

30 - Mostrar somente seleo em um banco de dados. Enviado por: Cecil Weiss Use os seguintes comandos para selecionar uma parte de uma string, com isso voce filtra o banco de dados mostrando somente o desejado. Data1.RecordSource = "Select * from [Clientes]here [Nome] _ like '*" & Text1.Text & "*'Order by [Nome]" Data1.Refresh Use os seguintes comandos para selecionar um ms especifico em um campo data, com isso voce filtra o banco de dados mostrando somente o desejado.

[email protected]

13

Data1.RecordSource = "Select * from [Clientes] where month([Nasc]) = _ '" & Val(Text1.Text) & "'Order by [Nome]" Data1.Refresh Obs: A funo "Month" retorna um valor de 1 a 12, por isso faa com que o usurio s possa digitar na caixa texto um numero de 1 a 12.

31 - Pesquisa por nome ou sobrenome. Enviado por: Cecil Weiss Se voce quiser pesquisar por nome ou sobrenome, ou em qualquer parte da string use o seguinte comando: Data1.Recordset.FindFirst "NOME Like '*" & Text1.Text & "*'" Espero ter ajudado.

32 - Como controlar o MCIwndX e o MCC (para reproduzir arquivos multimdia) Enviado por: Leonardo Motta Voc pode controlar um objeto MCIwndX ou MCC Control (Microsoft Multimedia Control, que j vem com o VB) sem precisar tocar na lista de propriedades. Vamos chamar o objeto de mciMedia. 'Especifica as propriedades principais mciMedia.filename = mciMedia.visible = True/False mciMedia.enabled = True/False Obs.: a propriedade 'visible' refere-se somente ao controle. Animaes/filmes/etc sero exibidos normalmente se o controle estiver oculto. Os comandos dos objetos MCI: ' Abre o arquivo mciMedia.Command = "Open" ' Reproduz o arquivo mciMedia.Command = "Play" ' Pausa mciMedia.Command = "Pause" ' Para mciMedia.Command = "Stop" ' Fecha o arquivo (sempre use este comando quando for usar animaes ou filmes...) mciMedia.Command = "Close" Obs.: existem outros comandos para retornar, voltar ao comeo, ir ao final, etc. (Ex.: Prev, Back) Alguns eventos teis: Done e NotifyCode so eventos que acontecem quando o objeto termina de reproduzir o arquivo. A varivel "NotifyCode" especifica se o arquivo foi reproduzido com sucesso, se foi interrompido pelo usurio ou por algum erro do objeto. As constantes referentes ao "NotifyCode" so mciNotify(CRL+ESPACO para listar). 33 - MsgBox no modal 2 Enviado por: Hantan Para fazer a msgbox no modal com apenas o boto de OK declare o seguinte no mdulo .BAS:

[email protected]

14

Public Const MB_OK = &H0& e substitua em MB_OKCANCEL.. Qualquer coisa veja em Constants no Text API Viewer

34 - MsgBox no modal Enviado por: Hantan Para fazer um message box que no seja modal faa o seguinte: Em um mdulo .BAS coloque o seguinte: Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, _ ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long Const MB_OKCANCEL = &H1 Para chamar a funo faa: Dim ret% ret = MessageBox(0, "Sou uma MsgBox no modal.", "Modeless MessageBox ", MB_OKCANCEL) At mais.

35 - Resoluo da tela Enviado por: Hantan Este exemplo mostra como saber qual a resoluo da tela sem ter que fazer com API. Dim xTwips%, yTwips%, xPixels#, YPixels# xTwips = Screen.TwipsPerPixelX yTwips = Screen.TwipsPerPixelY YPixels = Screen.Height / yTwips xPixels = Screen.Width / xTwips Print "A Resoluo : " & Str$(xPixels) & " por " & Str$(YPixels) & " pixels" A saida vai ser alguma coisa assim: A Resoluo : 800 por 600 pixels Espero ter sido til. Algum problema com programao em VB me contacte.

36 - Transformar qualquer valor na moeda corrente Enviado por: Robson Batista Dim dado as string dado = text1.text text1.text = format(dado,"CURRENCY")

37 - Fundo degrad Enviado por: Hantan Para deixar um fundo degrade faa o seguinte: Crie o seguinte em um mdulo .BAS:

[email protected]

15

Sub Fundo(Frm As Object, Vermval&, Verdval&, Azulval&, TopToBottom As Boolean) On Error Resume Next Dim Step%, Reps%, FillTop%, FillLeft%, FillRight%, FillBottom%, HColor$ Step = (Frm.Height / 63) If TopToBottom = True Then FillTop = 0 Else FillTop = Frm.Height - Step FillLeft = 0 FillRight = Frm.Width FillBottom = FillTop + Step For Reps = 1 To 63 Frm.Line (FillLeft, FillTop)-(FillRight, FillBottom), RGB(Vermval, Verdval, Azulval), BF Vermval = Vermval - 4 Verdval = Verdval - 4 Azulval = Azulval - 4 If Vermval 999 And Nmr < 20000 Then Extenso = Mil(Nmr): Exit Function 'Verificando se centena inteira(100,200,300,etc.) For i = 1 To 9

[email protected]

21

If Nmr = i & "00" Then Extenso = Centena(i): Exit Function Next i 'Verificando se o nmero est entre 1 e 19 If Nmr > 0 And Nmr < 20 Then 'Determinando valor em extenso da funo Extenso = Unitarios(Nmr): Exit Function ElseIf Nmr > 19 And Nmr < 100 Then If Mid(Nmr, 2, 1) > 0 Then 'Determinando valor em extenso da funo Extenso = Dezenas(Mid(Nmr, 1, 1)) & " e " & Unitarios(Mid(Nmr, _ 2, 1)): Exit Function ElseIf Mid(Nmr, 2, 1) = 0 Then 'Determinando valor em extenso da funo Extenso = Dezenas(Mid(Nmr, 1, 1)): Exit Function End If End If 'Verificando se o nmero est entre 100 e 999 If Nmr > 99 And Nmr < 1000 Then If Mid(Nmr, 2, 1) = 0 Or Mid(Nmr, 2, 1) = 1 Then 'Determinando valor em extenso da funo Extenso = Centenas(Mid(Nmr, 1, 1)) & " e " & Unitarios(Mid(Nmr, _ 2, 2)): Exit Function 'Verificando se a segunda casa maior que 1, ou seja >= 2 ElseIf Mid(Nmr, 2, 1) > 1 Then 'Verificando se a terceira casa igual a 0 If Mid(Nmr, 3, 1) = 0 Then 'Determinando valor em extenso da funo Extenso = Centenas(Mid(Nmr, 1, 1)) & " e " & Dezena(Mid(Nmr, _ 2, 1)): Exit Function 'Verificando se a terceira casa maior que 0, _ 'ou seja, >= 1 ElseIf Mid(Nmr, 3, 1) > 0 Then 'Determinando valor em extenso da funo Extenso = Centenas(Mid(Nmr, 1, 1)) & " e " & Dezena(Mid(Nmr, 2, _ 1)) & " e " & Unitarios(Mid(Nmr, 3, 1)): Exit Function End If End If End If End Function =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* Public Function Mil(Nmr4 As Integer) 'Verifica se o nmero est entre 1000 e 10000 If Nmr4 > 999 And Nmr4 < 10000 Then 'Determinando os nmeros Valor(1) = Mid(Nmr4, 1, 1): Valor(2) = Mid(Nmr4, 2, 1): Valor(3) = Mid(Nmr4, _ 3, 1): Valor(4) = Mid(Nmr4, 4, 1) 'Verificando se 2 mil, 3 mil, etc. For i = 1 To 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 funo em extenso Mil = Grupos(1) & " Mil" 'Verificando se a quarta casa maior que 0, ou seja, >= 1 ElseIf Valor(4) > 0 Then 'Determinando valor da funo 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, _ 'ou seja, 20 ou 21,22,23,24... For i = 2 To 9 If Valor(3) & Valor(4) = i & 0 Then Temp = True Next i 'Verificando se a varivel de valor inteiro verdadeira If Temp Then Mil = Grupos(1) & " Mil, " & Dezenas(Valor(3)): Exit Function 'Verificando se a varivel de valor inteiro no verdadeira If Not Temp Then Mil = Grupos(1) & " Mil e " & Dezenas(Valor(3)) & " _

[email protected]

22

e " & Unidades(Valor(4)): Exit Function 'Verificando se a terceira casa 1 ElseIf Valor(3) = 1 Then 'Determinando valor da funo em extenso Mil = Grupos(1) & " Mil e " & Unidades(Valor(3) & Valor(4)): Exit Function End If 'Verificando se a segunda casa maior que 0, ou seja, >=1 ElseIf Valor(2) > 0 Then 'Verificando se a terceira casa igual a 0 If Valor(3) = 0 Then 'Verificando se a quarta casa 0 If Valor(4) = 0 Then 'Determinando valor da funo em extenso Mil = Grupos(1) & " Mil" ElseIf Valor(4) > 0 Then 'Determinando valor da funo 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, ou seja, _ '20 ou 21,22,23,24... For i = 2 To 9 If Valor(3) & Valor(4) = i & 0 Then Temp = True Next i 'Verificando se a varivel de valor inteiro verdadeira If Temp Then Mil = Grupos(1) & " Mil, " & Centenas(Valor(2)) & Dezenas(Valor(3)): _ Exit Function 'Verificando se a varivel de valor inteiro no verdadeira If Not Temp Then Mil = Grupos(1) & " Mil, " & Centenas(Valor(2)) & " e " & _ Dezenas(Valor(3)) & " e " & Unidades(Valor(4)): Exit Function ElseIf Valor(3) = 1 Then 'Determinando valor da funo em extenso Mil = Grupos(1) & " Mil, " & 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. Unidades(0) = "": Unidades(1) = "Um": Unidades(2) = "Dois": Unidades(3) = "Trs": 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 nmero . For i = 1 To 19 If Nmr1 = i Then Grupos(1) = Unidades(i) Next i 'Determinando valor em extenso da funo. Unitarios = Grupos(1) End Function Abraos, Hantan Ps. Se vc no entender esta funo, mande um e-mail. 51 - Como ligar o True DbGrid a um Array Enviado por: Fabio C. O true DbGrid um controle perfeito, as vezes achamos que outros so melhores ou mais fceis de se lidar, mas ele completo. Voc pode por exemplo, querer lig-lo a um array, onde os dados ficaro temporariamente na memria. Siga os passos: 1 - Insira um true DbGrid em seu Formulrio 2 - Altere a propriedade DataMode dele p/ 4 - Storage.

[email protected]

23

3 - Em Project - References(VB5), adicione a biblioteca "APEX xarray object", prpria dele. 4 - Na Form Load declare: Dim vetor As New XArray vetor.ReDim r1, r2, c1, c2 Set TDBGrid1.Array = vetor Onde vc cria um novo objeto XArray, depois o redimensiona considerando que r1 e r2 o nmero de linha (Rows) e c1 e c2 o nmero de colunas. Depois vc seta a propriedade Array do TrueDbGrid a este objeto. 52 - Como criar uma coluna TOTAL no TrueDbGrid Enviado por: Fabio Voc pode ter vrias colunas do TrueDbGrid ligados a um Data ou a um RDC e querer que uma delas no esteja, e receba um valor qualquer, como a soma de todas as colunas. P/ isso, a propriedade DataMode do TrueDbgrid tem que estar como 0 - Unbound. Nesta coluna do Total, vc tem que definir um caption, e deixar a propriedade DataField vazia, assim ele reconhecer esta coluna como Unbound. Ento funciona assim, os dados do Data ou do RDC so puxadas p/ cada coluna. O valor desta coluna do Total, ser definido pelo evento UnboundColumnFetch. P/ cada linha(ou registro), ele passar por este evento p/ pegar o valor desta coluna. Vc poderia: Private Sub TDBGrid1_UnboundColumnFetch(Bookmark As Variant, ByVal _ Col As Integer, Value As Variant) Value = TDBGrid1.Columns(0).CellValue(Bookmark) + _ TDBGrid1.Columns(1).CellValue(Bookmark) End Sub Onde esta propriedade CellValue(bookmark) o valor das colunas que esto no mesmo registro que esta coluna de Total, e Value o valor desta Coluna.

53 - Como definir um TrueDbGrid com 2 cores Enviado por: Fabio Defina na Form Load: TDBGrid1.EvenRowStyle.BackColor = QBColor(6) TDBGrid1.OddRowStyle.BackColor = QBColor(14) TDBGrid1.AlternatingRowStyle = True

54 - Acesso rea de Transferncia Enviado por: Fabio O Objeto Clipboard uma referncia rea de transferncia, vejam: Clipboard.gettext Retorna o contedo da rea de transferncia: Clipboard.clear Clipboard.settext "Teste"

Settext adiciona um novo texto p/ a rea de transferncia, no entanto p/ funcionar necessrio limp-la primeiro usando o clear.

55 - Parametros -> Funo Command

[email protected] por: Fabio

24

Quem quer estabelecer parametros ao programa s usar a funo Command. Por exemplo, vc poderia criar um programa chamado PRG, que qdo vc digitasse PRG executasse o programa, e PRG /? executasse a ajuda do programa. simples, vc pode criar um mdulo, e na Sub_Main deste coloque: if command$ = "/?" then frmAjuda.show elseif command$ = "" then meuprograma.show end if No se esqueam de colocar a sub main p/ ser a primeira coisa a ser executada. Menu Project - Properties. 56 - Operaes via SQL Enviado por: Guilherme Joo Frana Soares A princpio deve-se declarar a variveis de database e dynaset: Global DBanco as database Global DyRec as dynaset Abrindo o Banco de Dados: Set DBanco = Opendatabase (app.path & "\banco.mdb") 'onde banco o banco de dados Selecionando registros: Set DyRec = DBanco.Createdynaset("select * from func") 'onde func uma tabela do banco.mdb 'seleciona todos registros de func Inserindo registros: Banco.Execute "insert into func values ('Nome_func',Identidade,'Endereco') 'onde Nome_func,Identidade,Endereco so colunas do banco 'veja que Nome_func e Endereco esto entre aspas simples pois tm atributos do tipo Text 'e Identidade Number Excluindo registros: Banco.Execute "delete from func where Nome_func like 'G*') 'exclui todas as linhas onde Nome_func comea com 'G' Atualizando registros: Banco.Execute "update func set Nome_func = 'Guilherme', Endereco = 'Rua 1, Qd. 1, Casa 1' where Identidade = "0000000000"

57 - Acesso ao Oracle via Oracle Objects Enviado por: Guilherme Joo Frana Soares Declarar as variveis: Global Banco Global Secao

As Object As Object

[email protected]

25

Criar o objeto: Set Secao = CreateObject("OracleInProcServer.XOraSession")

Abrir o Banco de Dados: Set Banco = Secao.OpenDatabase(Servidor, Usuario/Senha, 0&) necessrio ter na mquina os arquivos do Oracle Obejects: -Oraclb45.dll -Oraclb4d.dll -Oraclbj.dll -Oraclbjd.dll -Oraclm.dll -Oraclmd.dll -Oraipsrv.reg (rodar o reg) Que se encontram nos discos de instalao do Oracle Objects. 58 - Usando a api GetUserName Enviado por: Guilherme Joo Frana Soares Declare Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String, nSize As Long) As Long m$ = Space$(255) i% = GetUserNameA(m$, Len(m$)) TxtLogin = Left(m$, InStr(m$, Chr(0)) - 1)

59 - Animaes Enviado por: Henrique Angelo Crie um novo projeto, coloque no Form uma ImageList, coloque as figuras da animao nesta mesma Imagelist. Coloque uma PictureBox e um Timer. Na Propriedade Form_Load() coloque: Set Picture1.Picture = ImageList1.ListImages(1).Picture Na propriedade Timer1_Timer() coloque: If Picture1.Picture = ImageList1.ListImages(1).Picture Then Set Picture1.Picture = ImageList1.ListImages(2).Picture Exit Sub End If If Picture1.Picture = ImageList1.ListImages(2).Picture Then Set Picture1.Picture = ImageList1.ListImages(1).Picture Exit Sub End If No Timer1, coloque um intervalo de 100.

[email protected] - Cursores Animados em VB Enviado por: Henrique Angelo

26

Crie um novo projeto, coloque no Form uma ImageList, coloque os cones e/ou cursores que faro parte da animao nesta mesma Imagelist. Coloque tambm um Timer. Coloque na propriedade do Form: MousePointer = 99 - Custom

Na Propriedade Form_Load() coloque: Set Form1.MouseIcon = ImageList1.ListImages(1).Picture

Na propriedade Timer1_Timer() coloque: If Form1.MouseIcon = ImageList1.ListImages(1).Picture Then Set Form1.MouseIcon = ImageList1.ListImages(2).Picture Exit Sub End If If Form1.MouseIcon = ImageList1.ListImages(2).Picture Then Set Form1.MouseIcon = ImageList1.ListImages(1).Picture Exit Sub End If

No Timer1, coloque um intervalo de 100. 61 - Descobrir Path do Aplicativo Enviado por: Mauro Sakamoto Para descobrir o Path do aplicativo utilize a funo App.Path Ex: Dim MeuDiretorio IF Len(App.Path)>3 THEN MeuDiretorio=App.Path & "\" ELSE MeuDiretorio=App.Path 'Se estiver na raiz END IF

62 - Condies (IIF) em consultas Enviado por: Mauro Sakamoto Para testar o contedo de um campo e retornar valores diferentes conforme o contedo do campo, pode-se utilizar o comando IIF(condio,se valor1 se verdade ,valor2 se falso ). Ex: Se a mdia do aluno for maior ou igual a 5, escrever aprovado, seno reprovado. SELECT Nome, Mdia, IIF(Mdia>=5,"Aprovado","Reprovado") AS Status FROM Alunos

[email protected]

27

63 - Adicionar contedo de uma ou mais tabelas em outra Enviado por: Mauro Sakamoto Se voc tem duas ou mais tabelas com alguns campos em comum e deseja v-los em uma nica tabela, utilize essa consulta. Insert into tabela3(campo1, campo2, campo3) _ select campo1, campo2, campo3 _ from tabela1 _ where campo1>valor1 _ union _ select campo1, campo2, campo3 _ from tabela2 _ where campoS1>valor2

E assim sucessivamente. Caso voc no queira armazenar o valor comece no primeiro SELECT (descartando o INSERT) 64 - Como usar BeginTrans, CommitTrans e Rollback Enviado por: Mauro Sakamoto Um problema bastante comum o micro ser desligado acidentalmente ou a energia acabar, no momento de uma operao com o Banco de Dados (Insero, Atualizao ou Excluso). Para evitar isso voc pode utilizar os Mtodos BeginTrans (inicia a transao) CommitTrans (Confirma a insero) e Rollback (volta ao estado inicial). Ex: Sub CmdInserir_Click() On error goto Err_CmdInserir_Click WorkSpaces(0).BeginTrans ' executa comandos de (insero,excluso ou atualizao) WorkSpaces(0).CommitTrans Exit_CmdInserir_Click: Exit Sub Err_CmdInserir_Click: MsgBox Error% WorkSpaces(0).Rollback Resume Exit_CmdInserir_Click End Sub

65 - Atualizar contedo de ComboBox conforme string digitada Enviado por: Mauro Sakamoto Caso voc tenha um ComboBox que liste o contedo de um campo da tabela e deseja que ao digitar a letra "a" o combo mostre todos os nomes iniciados por "a" escreva o cdigo no evento DropDown. Sub CmbNome_DropDown() Dim MyDB As Database Dim MyNome As SnapShot

[email protected]

28

MySQL$ = "Select Nome from Clientes Where Nome like " Chr(39) & CmbNome.Text & Chr(42) & Chr(39) 'seleciona os nomes Set MyDB=OpenDataBase("Table.mdb") 'Abre o BD Set MyNome=MyDB.CreateSnapShot(MySQL$) 'Cria um snapshot CmbNome.Text = "" 'limpa o texto no combo CmbNome.Clear 'limpa o contedo do combo If Not MyNome.NoMatch And MyNome.RecordCount>0 then 'verifica se existe nomes MyNome.MoveLast Total&=MyNome.RecordCount 'pega o total de nomes MyNome.First For i&=1 to Total 'atualiza o combo If Not Isnull(MyNome("Nome")) then CmbNome.AddItem(MyNome("Nome")) CmbNome.MoveNext End If Next i& End if End sub

66 - Como chamar um arquivo de HELP para sua aplicao Enviado por: Mauro Sakamoto Supondo que voc j tenha um arquivo de help para sua aplicao, voc pode cham-lo utilizando a funo API WinHelp. Para isso v crie um modulo (.bas) e declare as seguintes constantes e funes: Const Help_File = "File.hlp" Const Help_Index = &H3 Const Help_Context = &H1

Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As Long Em seguida v at o controle em que voc deseja chamar o help e digite: WinHelp hwnd, Help_File, Help_Context, 20

O Primeiro valor hwnd , se refere ao Handle da Janela e deve ser passado como hwnd mesmo. O segundo o nome de seu arquivo hlp. O terceiro parmetro pode ser utilizado ou para abrir o Help_Index (help padro do windows, independente do valor em Help_File) ou Help_Context (que abrir o arquivo especificado em Help_File). J o quarto parmetro s ter efeito quando o terceiro parmetro for Help_Context. Esse parmetro se refere ao valor do tpico definido em seu arquivo de help (funciona como se fosse um link - abre o aquivo no tpico escolhido). Alm do Help_Context e Help_Index existem outros parmetros que podem ser passados. Porm os mais comuns so esses dois. 67 - Fazer de forma simples um boto do tipo do VB5 Enviado por: Mauro Sakamoto

[email protected]

29

Para fazer isso voc deve inserir um SSPanel (que vem com o Sheridan 3D). Em seguida defina a propriedade BevelWidth=0 e retire o caption. Insira uma picture em cima do seu SSPanel mudando a propriedade apparence para 0-flat e BorderStyle para 0-None. No evento MouseMove do seu SSPanel e de seu Picture faa: Sub Picture_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) SSPanel.BevelWidth=1 End Sub Sub SSPanel_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) SSPanel.BevelWidth=1 End Sub

Agora no evento MouseMove do Formulrio faa o inverso Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) SSPanel.BevelWidth=0 End Sub Dessa forma quando o mouse for posicionado em cima do "boto", este automaticamente ficar em 3D e quando for movido para fora, ficar chapado. possvel tambm trocar a picture, dando um efeito tipo Internet Explorer 4.

68 - Reproduzir um vdeo com MMControl Enviado por: Mauro Sakamoto Para reproduzir um vdeo em um formulrio, conveniente antes de mais nada declarar um picture box onde ele ser executado. Em seguida insira um MMControl. Para reproduzir o avi faa: MMControl1.Command = "close" MMControl1.DeviceType = "avivideo" MMControl1.hWndDisplay = Picture1.hWnd MMControl1.filename = "File.avi" MMControl1.Command = "open" MMControl1.Command = "prev" MMControl1.Command = "play"

69 - Reproduzir um arquivo wav ou mid Enviado por: Mauro Sakamoto Para reporduzir um arquivo de som com do tipo wa ou mid, voc precisa utilizar o MMControl. Ex: MMControl1.Command = "close" MMControl1.DeviceType = "WaveAudio" MMControl1.filename = "File.wav" MMControl1.Command = "open"

[email protected]

30

MMControl1.Command = "prev" MMControl1.Command = "play"

Se for um arquivo do tipo mid mude a propriedade DeviceType para "sequencer" Ex: MMControl1.Command = "close" MMControl1.DeviceType = "Sequencer" MMControl1.filename = "File.wav" MMControl1.Command = "open" MMControl1.Command = "prev" MMControl1.Command = "play

70 - Trocar vrgula por ponto em um valor digitado Enviado por: Mauro Sakamoto Function trocavrgulaporponto(NmeroTexto) Dim Posio, Tamanho Dim MidWord, Msg, TstStr, SpcPos1, SpcPos2 ' Declarao de variveis Tamanho = Len(Trim(NmeroTexto)) Posio1 = InStr(1, NmeroTexto, ",") 'Acha a vrgula If Posio1 0 Then Posio1 = Posio1 - 1 posio2 = Posio1 + 2 ' Encontra prximo espao. trocavrgulaporponto = Mid(NmeroTexto, 1, Posio1) + "." + Mid(NmeroTexto, posio2) Else trocavrgulaporponto = NmeroTexto End If End Function

71 - Como evitar entrar duas vezes Enviado por: Felipe Maion Garcia J estou no ar? Algumas aplicaes para Windows podem ter vrias instncias, ou seja, podem ser executadas repetidas vezes ao mesmo tempo no mesmo computador. o caso do Bloco de Notas, do Paint, da Calculadora e de outros. Existem programas cuja mltipla execuo no interessante, por questes de produtividade ao usurio (como o Word, o File Manager e o Excel) ou segurana (como aplicaes que usam banco de dados). Os sistemas comerciais (de banco de dados), em geral, s podem ser executados em uma sesso ao mesmo tempo. O controle disto no VB feito atravs do objeto App. Dim SaveTitle as string If App.PrevInstance Then

[email protected]

31

SaveTitle = App.Title App.Title = "... segunda chamada ao mesmo programa." Me.Caption = "... segunda chamada ao mesmo programa, serei fechado" 'se for a Sub Main, a linha acima, obviamente, no existe 'as linhas abaixo fecham a segunda chamada e alternam para 'a primeira AppActivate SaveTitle SendKeys "% R", True End End If O cdigo acima deve ser a primeira coisa a ser executada na sua aplicao. Assim, ao invs de abrir uma segunda sesso do programa, o Windows ir alternar para a sesso j aberta. Isto tambm pode ser feito por APIs (FindWindow, ShowWindow e SetFocus, da bilblioteca User), mas, tem o mesmo efeito e mais trabalhoso.

72 - Como evitar o bug do ano 2000 Enviado por: Felipe Maion Garcia Dim Pdata As Date Dim Intervalo As String Dim Qdias As Integer Intervalo = "d" ' "d" Especifica o dia Pdata = turini 'data de entrega Qdias = (Val(TextCarga / 4)) ' - 1 'Quantidade de dias para a soma) turini.Tag = Format(turini, "w") ' verifica o dia da semana do incio do curso If Val(turini.Tag) = 5 And Qdias > 9 Then Qdias = Qdias + 2 If Val(turini.Tag) = 5 And Qdias = 4 Or Qdias = 5 Then Qdias = Qdias + 1 If Val(turini.Tag) = 4 And Qdias > 9 Then Qdias = Qdias + 3 If Val(turini.Tag) = 4 And Qdias = 4 Or Qdias = 5 Then Qdias = Qdias + 1 If Val(turini.Tag) = 3 And Qdias > 5 Then Qdias = Qdias + 3 If Val(turini.Tag) = 3 And Qdias < 5 Then Qdias = Qdias - 1 If Val(turini.Tag) = 2 And Qdias > 9 Then Qdias = Qdias + 1 turter = DateAdd(Intervalo, Qdias, Pdata)

[email protected]

32

73 - Menu PopUp Enviado por: Felipe Maion Garcia Crie um menu normal com o caption de "Popup Menu" e o name "mnufile", desmarque a opo "Visible", agora crie dois submenus do "Popup Menu" o primeiro com o caption que vc quiser e o name "mnusub1" e o segundo tambm com o caption que vc quiser e com o name "mnusub2",ATENO: os dois submenus so visible true. agora crie o cdigo para que quando o usuario clicar no formulario aparecer o popup: Private Sub Form_MouseDown(Button As Integer, Shift As _ Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu mnufile 'Mostra o menu popup _ 'se o boto direito for clicado End Sub

74 - Conexo Dial-Up Enviado por: Felipe Maion Garcia Private Sub AbrirDialUp(Conexo as String) Dim X X = Shell("C:\Windows\rundll32.exe rnaui.dll,RnaDial " & Conexo, 1) AppActivate X SendKeys "{enter}" DoEvents End Sub Ex.: call AbrirDialUp ("Infolink") 'onde no lugar de Infolink _ 'voc vai utilizar o nome de sua conexo

75 - Como pegar o nome do computador Enviado por: Felipe Maion Garcia No mdulo voc coloca: Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal sBuffer As String, lSize As Long) As Long A funo GetComputerName requer dois argumentos. O primeiro argumento, sBuffer, o buffer que ir armazenar o nome do computador depois que a funo 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 funo GetComputerName, a varivel lSize conter o nmero de caracteres (contador) armazenados na string sBuffer. Este valor de contagem no inclui o caractere terminador NULL. Ainda no mdulo voc coloca: Public Function NameOfPC(MachineName As String) As Long Dim NameSize As Long Dim X As Long MachineName = Space$(16) NameSize = Len(MachineName)

[email protected]

33

X = GetComputerName(MachineName, NameSize) End Function

Exemplo de um procedimento: Private Sub Command1_Click() Dim PCName As String Dim P As Long P = NameOfPC(PCName) text1.Text = PCName End Sub 76 - Placa de som? Enviado por: Felipe Maion Garcia Como detectar se um computador tem uma placa de som ? Para realizar tal tarefa, voc dever utilizar a funo API waveOutGetNumDevs(). Esta funo retorna o nmero de devices capazes de tocar sons. Porm, antes de us-la, declare-a em um mdulo de cdigo. Ai vai a declarao : Declare Function waveOutGetNumDevs lib "MMSYSTEM" () as integer

Ento, crie a funo Ver_audio(), escrevendo o seguinte cdigo : 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 Cdigo - Funes para escrever e ler em arquivos .INI pessoais. Estas funes (Get_ini e Write_ini) devem ser colocadas em um mdulo (.BAS). Troque nome_do_arquivo.ini pelo nome do seu arquivo .INI pessoal. no esquea de incluir o caminho completo! A funo get_ini serve para ler em arquivos .INI. Porm, para utiliza-la, necessrio declarar a funo GetPrivateProfileString, na seo de declaraes (declarations) de seu mdulo. A declarao 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 cdigo da funo get_ini : Function get_ini (seo$, chave$) As String arquiv$ = nome_do_arquivo.ini

[email protected]

34

Returns$ = Space$(128) x% = GetPrivateProfileString(ByVal seo$, ByVal chave$, "Nenhum valor lido", Returns$, Len(Returns$), ByVal arquiv$) get_ini = Left$(Returns$, x%) End Function A funo write_ini serve para escrever informaes em um arquivo .INI. Antes de us-la. declare a funo WritePrivateProfileString na seo "Declarations" de seu mdulo. Declare Function WritePrivateProfileString Lib "Kernel" (ByVal lpApplicationName As String, lpKeyName As Any, lpString As Any, ByVal lplFileName As String) As Integer Feito isso, escreva : Function write_ini (ByVal section$, ByVal chv$, ByVal variavel$) As String arquiv$ = nome_de_arquivo.ini iRet = WritePrivateProfileString(ByVal section$, ByVal chv$, ByVal variavel$, ByVal arquiv$) End Function

78 - Tecla tab como enter Enviado por: Felipe Maion Garcia Como capturar a tecla TAB nos eventos KeyDown e KeyPress? Os eventos KeyDown ou KeyPress no esto 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, possvel capturar a tecla TAB no evento KeyPress do formulrio, SOMENTE quando no existem controles, OU quando um nico controle recebe o focu no formulrio OU, quando a propriedade TabStop colocada para False para todos os controles no formulrio. Quando existir mais de um controle no formulrio, o VB ir capturar a mensagem e mover o focu para o prximo controle de acordo com a propriedade TabOrder, e o evento KeyPress no 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 no, usando uma API do Windows. Use a funo API GetAsyncKeyState em um controle Timer. Apesar de voc conseguir saber quando a tecla TAB foi pressionada, voc no conseguir evitar que o comportamento padro ocorra (mover para o prximo controle). Veja o cdigo abaixo: ' Em um arquivo .BAS Declare Function GetAsyncKeyState% Lib "User" (ByVal vKey%) Global Const KEY_TAB = &H9 ' Adicione este cdigo 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 substituio como o Clipper ? Macro substituio um operador, como o operador "&" do Clipper. Em Clipper voc pode fazer o seguinte: Test := "good morning" ? "Hello, &Test" O resultado do print ser "Hello, good morning". Isto pode ser feito no Visual Basic?

[email protected]

35

Infelizmente, este recurso no est disponvel em VB. O melhor que pode ser feito neste caso, escrever uma funo que receba alguns nomes de variveis e devolva o valor associado destas variveis. Esta funo ter um Select Case com o nome da varivel passado por parametro e em cada caso (Case) uma apropriada varivel acessada. Veja o cdigo abaixo: 'Na seo 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 variveis Case Else ' Precisa conter alguma outra coisa. MyMacroOperator = 0 ' valor invlido End Select End Function Sub Form_Click () ' Para testar a funo 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 no seja modal ? A funo MsgBox do Visual Basic no contempla esta opo. Porm, possvel fazer usando a funo API MessageBox. Declare e chame a API como segue (cdigo 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.: possvel tambm criar um formulrio com as mesmas caractersticas de um MessageBox e exib-lo de forma no modal. 81 - FRX Enviado por: Felipe Maion Garcia O Visual Basic grava os forms nos formatos: Binrio (padro) or ASCII. Quando o desenvolvedor escolhe o formato ASCII (Marcando a opo "Save as Text" na janela "Save File As"; ou no menu "Options", "Environment", marque "Default Save As Format = Text"), o VB ento grava os arquivos no formato ASCII. No entanto, alguns controles tem propriedades cuja informao binria (Por exemplo: propriedade Picture de um PictureBox). O VB grava todas estas informaes binrias do

[email protected]

36

formulrio, em um arquivo binrio, separado do arquivo ASCII. Estes arquivos so armazenados no mesmo diretrio que os arquivos .FRM, e com o mesmo nome, mas com a extenso FRX. O VB l estes arquivos enquanto os arquivos no formato ASCII so carregados. Se um projeto gravado no formato ASCII; logo todo o formulrio que tiver informaes binrias, dever ser acompanhado de um arquivo FRX correspondente 82 - Resoluo Enviado por: Felipe Maion Garcia Eu preciso obter a resoluo da tela, onde a minha aplicao est rodando por vrias razes, por exemplo ajustar o tamanho de alguns controles em run-time. Voc pode utilizar algumas propriedades do objeto Screen para calcular a resoluo da tela. Veja o seguinte cdigo (VB 3.0): Dim xTwips%, yTwips%, xPixels#, YPixels# xTwips = Screen.TwipsPerPixelX yTwips = Screen.TwipsPerPixelY YPixels = Screen.Height / yTwips xPixels = Screen.Width / xTwips Print "A Resoluo : " & Str$(xPixels) + " por " + Str$(YPixels)

83 - SQL Enviado por: Felipe Maion Garcia A linguagem SQL(Structured Query Language) uma linguagem de alto nvel para manipulao de dados dentro do modelo relacional. Seu objetivo fornecer uma interface de alto nvel ao usurio. uma linguagem no procedural, e, no cabe ao usurio definir como o gerenciador de banco de dados executar uma tarefa, mas somente o ele que deve fazer. Uma instruo SQL consiste em trs partes: As declaraes de parmetros A instruo manipulativa As declaraes de opes Para termos uma idia do seu poder, imagine que temos que atualizar o campo valor em 10% de uma tabela com diversos registros. Na abordagem procedural teriamos os seguintes passoa a seguir: 1. Abrir a tabela 2. Posicionar o ponteiro no incio da tabela 3. Atualizar o campo valor em 10% 4. Atualizar tabela 5. Movermos o ponteiro para o prximo registro 6. Continuar a atualizao do campo valor at o final da tabela O cdigo poderia Ter o seguinte aspecto: Dim db as database Dim tabela as recordset set db=workspaces(0).Opendatabase("c:\base.mdb") set tabela=db.Openrecordset("tabela") While not tabela.eof Tabela.edit Tabela.valor=tabela.valor*1.10 Tabela.update

[email protected]

37

Tabela.movenext Wend Tabela.close

Agora utilizando uma instruo SQL teriamos o seguinte cdigo: Dim db as Database Set db=Workspaces(0).Opendatabase("c:\base.mdb") Db.execute "UPDATE tabela SET valor=valor*1.10" Db.close

Observe a utilizao da instruo UPDATE, bem mais simples, no ? Vejamos abaixo as clusulas manipulativas e suas finalidades: Instruo SELECT - Obtm um grupo de registros e insere os registros em um dynaset ou em uma tabela UPDATE - Define os valores dos campos de uma tabela em uma atualizao TRANSFORM - Cria uma tabela de resumo, utilizando o contedo de um campo como cabealho de cada coluna DELETE FROM - Remove registros de uma tabela INSERT INTO - Acrescenta um grupo de registros a uma tabela. Vejamos alguns exemplos da instruo SELECT: 1. Seleciona os campos "Primeiro nome" e "Sobrenome" de todos os registros da tabela Empregados. SELECT [Primeiro nome],[Sobrenome] FROM Empregados 2. Seleciona todos os campos da tabela Empregados. Note o uso do parmetro (*) indicando todos os campos da tabela indicada. SELECT Empregados.* FROM Empregados 3. Conta o nmero de registros que tm uma entrada no campo "Cdigo postal" e coloca o ttulo contagem no topo da coluna. SELECT Count([Cdigo postal]) AS Contagem FROM Clientes 4. Seleciona os campos "Primeiro nome" e "Sobrenome" de cada registro cujo sobrenome seja Pereira. SELECT [Primeiro nome],[Sobrenome] FROM Empregados WHERE [Sobrenome]='Pereira' 5. Seleciona os campos "Primeiro nome" e "Sobrenome" para Empregados cujos sobrenomes comeam pela letra S. SELECT [Primeiro nome],[Sobrenome] FROM Empregados WHERE [Sobrenome] Like 'S*' FROM - Indica as tabelas utilizadas como fonte de dados WHERE - Especifica as condies que os registros devem satisfazer para compor o subconjunto de dados.

84 - Copia o arquivo especificado Enviado por: Felipe Maion Garcia Copia o arquivo especificado. Sintaxe: FileCopy Exemplo: Public Function MoveArquivo(Origem As String, Destino As String) As Boolean On Error GoTo ErroMovendoArquivo FileCopy Origem, Destino Kill Origem

[email protected]

38

MoveArquivo = True Exit Function ErroMovendoArquivo: MoveArquivo = False Exit Function End Funciotn

85 - Form circular Enviado por: Felipe Maion Garcia Adicione nas declaraes da form: Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As _ Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd _ As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Agora no form load: Dim hr&, dl& Dim usew&, useh& usew& = me.Width / Screen.TwipsPerPixelX useh& = me.Height / Screen.TwipsPerPixelY x=0 hr& = CreateEllipticRgn(0, 0, usew, useh) 'Faz a _ 'forma da janela numa forma de um crculo descrito por x1,y1,x2,y2 dl& = SetWindowRgn(me.hWnd, hr, True) Obs.: mude o nome "Screen" para o nome do seu formulrio

86 - Centralizando forms Enviado por: Felipe Maion Garcia Centralizar forms muito til, alm de ser muito fcil e com pouca codificao. Coloque o seguinte cdigo no evento Form_Load () do form que voc quiser centralizar: Left = (Screen.Width - Width) \ 2 Top = (Screen.Height - Height) \ 2

87 - Bitmap Enviado por: Felipe Maion Garcia Voc pode utilizar o controle PictureBox com a propriedade AutoSize=True. Carregue o bitmap no PictureBox, usando a funo LoadPicture. O controle ir ajustar o seu tamanho automaticamente, para que o bitmap caiba nele. As propriedades Height e Width deste controle contm as dimenses do bitmap. Note que os valores destas propriedades esto em Twips.

[email protected]

39

Uma outra forma, utilizar a API GetObject. Esta funo retorna a estrutura do Bitmap em dois membros, bmWidth e bmHeight representando as dimenses do bitmap em pixels. Veja o exemplo abaixo: Coloque o seguinte cdigo em um arquivo .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%, ByVal nCount% , lpObject As Any) Coloque o seguinte cdigo aonde voc quer obter as dimenses do bitmap. (O Bitmap deve ser carregado em um PictureBox chamado Picture1): Dim bmp As BITMAP, ret% ret = GetObjectAPI(picture1.Picture, Len(bmp), bmp) Print "width = " + Str$(bmp.bmwidth) + ", height = " + Str$(bmp.bmheight)

88 - Como criar um banco de dados Access, contendo tabelas e ndices (index) Enviado por: Felipe Maion Garcia 1. Criando o banco de dados A criao de um banco de dados relativamente simples : CHDRIVE App.Path CHDIR App.Path dim db as database CONST DB_LANG_GENERAL = ";LANGID=0x0809;CP=1252;COUNTRY=0" SET db = CREATEDATABASE("banco.mdb", DB_LANG_GENERAL) 2. Criando uma tabela Uma tabela contm vrios campos, com vrias propriedades. Ento, para cada campo, deve-se atribuir valores a estas propriedades, assim como se voc fosse criar um campo em uma tabela usando o Data Manager, que vem com o VB: Neste exemplo, a tabela conter dois campos : NOME e IDADE. Veja o cdigo 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.mdb") tb.name = "Tabela" campo1.Name = "NOME"

[email protected]

40

campo1.Type = DB_TEXT campo1.Size = 60 campo2.Name = "IDADE" campo2.Type = DB_INTEGER tb.Fields.Append campo1 tb.Fields.Append campo2 db.TableDefs.Append tb tb.close set tb = nothing db.close set db = nothing 3 - Criando ndices ndices so muito teis em rotinas de procura de dados em tabelas. Alm de serem mais rpidos, eles requerem menos cdigo para realizar estas buscas. Veja como criar um ndice de um campo em uma tabela j existente: Dim index1 as New Index Dim index2 as New Index Dim db as database Dim tb as table set db = OpenDatabase("banco.mdb") set tb = db.OpenTable("tabela") index1.name = "nome" index1.fields = "NOME" index1.unique = true index1.primary = true index1.name = "idade" index2.fields = "IDADE" index2.unique = false index2.primary = false tb.Indexes.Append index1 tb.Indexes.Append index2 tb.close set tb = nothing db.close set db = nothing

[email protected]

41

89 - BeginTrans e CommitTrans Enviado por: Felipe Maion Garcia Use os comandos BeginTrans e CommitTrans para aumentar a velocidade de operaes com banco de dados. O comeo de uma transao (operao de atualizao de banco de dados) deve ser marcado com o comando BeginTrans e o fim de uma transao, com CommitTrans. A aumento de velocidade se d porque estas transaes se do sem acesso ao disco toda vez que h um comando para atualizar o banco de dados (o mtodo update). Ao invs disso, as mudanas so armazenadas na memria, at que h o comando CommitTrans, que quando ocorre a gravao dos dados no disco. Assim, s h acesso ao disco uma vez. Observe o exemplo de como se usa estes comandos. Dim db as database dim tb as table set db = OpenDatabase("data_base.mdb") set tb = db.OpenTable("table") BeginTrans for a = 1 to 10 tb.addnew tb!numero = "nmero" & a tb.update next a CommitTrans 'as informaes sero atualizadas aqui! tb.close set tb = nothing 'libera a memria alocada pela tabela db.close set db = nothing 'libera a memria alocada pelo banco de dados

90 - Porque o Visual Basic no faz contas corretas com ponto fluante? Enviado por: Felipe Maion Garcia Algum j notou que o Visual Basic no muito bom em matemtica? Tente fazer 18.51 + (-17.59) e voc ir receber .9200000000000002. Isso ocorre, porque no Visual Basic, os valores com ponto flutuante so armazenados no formato padro IEEE. A representao da mquina sobre valores numricos em binrio. Qualquer valor inteiro pode ser representado "EXATAMENTE" na forma binria. Mas nos casos de valores com ponto flutuante, isso no verdade. Por exemplo, o decimal 0.0001 no pode ser representado exatamente em binrio (0.0001 uma frao repetitiva com um perodo de 104 bits!). Ento, os valores com ponto flutuante so aproximados para o prximo valor que pode ser representado em binrio. Logo, eles tendem a causar algum erro nos calculos quando so utilizados. No nosso exemplo, ambos 18.51 e 17.59 no podem ser representados exatamente pelo padro de ponto flutuante. A soma deles incluir um pequeno erro. Observe que o erro bastante pequeno e essencialmente a soma (quando vista em uma preciso de 14/15 pontos decimais usando a funo Format$) correta. Para exibir o resultado exato para o usurio, faa o seguinte: Format$(18.51 + (-17.59), "###.#####")

[email protected]

42

91 - Banco de dados Enviado por: Felipe Maion Garcia Podemos entender por banco de dados qualquer sistema que rena e mantenha organizada uma srie de informaes relacionadas a um determinado assunto em uma determinada ordem. A lista telefnica um exemplo, nela percebemos que todos os dados referentes a uma pessoa esto na mesma linha, a isso chamamos registros. O tipo ou categoria da informao (nome,telefone,etc.) sobre uma pessoa est separada em colunas, as quais chamamos campos. Um Sistema Gerenciador de banco de dados relacionais(SGBDR) usado para armazenar as informaes de uma forma que permita s pessoas examin-las de diversas maneiras. O Gerenciador relacional de banco de dados do Visual Basic e do Access o Microsoft Jet, ele pertence a uma categoria diferente dos Gerenciadores tradicionais, como o Dbase e o Paradox, pois possuem caractersticas em comum com os banco de dados cliente-servidor. Tais caractersticas comuns so: Todas as tabelas, indces, consultas, relatrios e cdigo so armazenados num nico arquivo .MDB Os campos de data suportam informao de hora. Admite o armazenamento permanente de comandos SQL. possvel forar a integridade referencial entre as tabelas. Os campos suportam valores nulos (Null). No Dbase/Clipper banco de dados significa um arquivo que contm a estrutura de dados(campos) e os dados (Arquivo padro DBF). Para o padro MDB este conjunto de dados e sua estrutura denomina-se Tabela. Portanto aquilo que o Dbase/Clipper considera um banco de dados o Access e o Visual Basic considera como uma Tabela. Para o Access e o Visual Basic todos os componentes do sistema esto em um nico arquivo com extenso MDB, a este "pacote" consideramos o banco de dados. Logo quando abrimos um arquivo MDB temos acesso a todos os componentes do sistema: tabelas, consultas, macros, relatrios, etc. A esses componentes chamamos objetos do sistema.

92 - Mudar cor do texto conforme resultado Enviado por: Mauro Sakamoto Supondo que voc esteja tirando uma listagem de alunos. Se a mdia for menor que 5 imprima em vermelho reprovado, seno imprima em preto aprovado. Para fazer isso utilize dois campos frmula sobrepostos. No primeiro d o nome de aprovado e insira o seguinte cdigo: IF({Tabela.Mdia}>=5) THEN "Aprovado"

No segundo faa: IF({Tabela.Mdia} 0 Then VA_Cmd = VA_Cmd + " Where CIDADE.Nome >= '" & (TB_Cidade.Text) & "' " VA_Cmd = VA_Cmd + "And CIDADE.Nome 25 and Category = "M1") or (age > 35 and Category = "C1")_ or (Age > 45 and Category = "P1") If condicao Then ExecuteDemissao

164 - Simplificando a condio 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, ValidValues, Category)) > 0 then ProcesseEmpregado End If Isto torna o cdigo mais rpido e mais fcil de ser entendido. Note que separei os valores com " " para no aparecerem strings como "CMM2P1ZZ"; voc poder utilizar espaos ou outros separadores como vrgulas, ponto-e-vrgulas etc. Por Jaspreet Singh* Notas de Redao (Charles A. Mller): 1) Este teste ainda aceitar "C", " P", "2 P" e outras expresses invlidas, por conterem o separador ou terem tamanho invlido. Para corrigir esta falha, basta usar espao (apenas) como separador e testar o tamanho da categoria. Category = trim(Category) If (InStr(1, ValidValues, Category)) > 0 and Len(Category) = 2 Then '... 2) Este truque pode ser usado para vrias validaes, como ValidValues = "abcdefghijlmnopqrstuvxz". 3) Outra forma, ainda mais fcil, criar um pequeno Select Case, separando os valores vlidos por vrgulas: Select Case Category Case "CM", "M2", "P1", "ZZ" ProcesseEmpregado End Select

165 - TAB automtico para o prximo campo Enviado por: Henrique Angelo Esta dica til para desenvolvimento de aplicaes VB com a forma de edio de terminais 3270 (IBM Mainframe). Quando o usurio termina de preencher um campo em um terminal 3270, o foco imediatamente transmitido para o prximo campo. Sub Text1.KeyUp (keycode as integer, shift as integer) If keycode > 47 and keycode < 123 then If Len(Me.ActiveControl.Text) = (Me.ActiveControl.MaxLenght) then Sendkeys "{TAB}" End If

[email protected]

77

End If End Sub

166 - Onde est o Beep? Enviado por: Henrique Angelo Este cdigo elimina o beep quando se tecla ENTER ou TAB em uma text box que atingiu seu nmero mximo de caracteres. Sub Form_KeyPress (keyascii as integer) If KeyAscii = 13 or KeyAscii = 9 Then KeyAscii = 0 End If End Sub

167 - Use o Code Profiler para depurao (debug) Enviado por: Henrique Angelo Algumas vezes, um erro de execuo se manifesta apenas aps a criao de um EXE e no em tempo de debug. O add-in Code Profiler poder ajud-lo. 1) Faa uma cpia do seu fonte. 2) Selecione o add-in Code Profiler. 3) Selecione o(s) arquivo(s) de cdigo a serem analisados. 4) Selecione a opo Line Hit Count. 5) Selecione o boto Add Profiler Code. 6) Compile (make EXE) o programa (MYAPP.EXE). 7) Execute o seu cdigo com erro. 8) Volte ao Code Profiler e selecione View Results no menu File. Veja a ltima linha que foi executada ao ocorrer o erro. Voc ter que executar seu cdigo em modo debug enquanto olha os resultados do Code Profiler. 168 - Otimizando consultas no Jet 3 Enviado por: Henrique Angelo Se voc precisa analisar a performance de uma query (consulta) no Jet Engine 3.0 (banco .MDB), atravs de um plano de execuo de consultas, voc deve adicionar esta chave de Registry e execut-la no RegEdit. \\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.0\Engines\Debug Para a nova chave Debug, adicione o nome JETSHOWPLAN (tudo maisculo) e valor ON. O Jet ir gerar um arquivo chamado SHOWPLAN.OUT, que ir mostrar planos de execuo de queries associados com sua aplicao. Como estes arquivos podem se tornar muito grandes rapidamente, no se esquea de alterar o valor para OFF ao terminar. Queries e bases de dados bem definidas iro gerar planos que, indicaro o uso de ndices e/ou a tecnologia Rushmore. Bases e consultas mal definidas exibem apenas uma leitura de tabela.

169 - Identificando um controle genrico Enviado por: Henrique Angelo Quando uma rotina pode trabalhar com muitos tipos de controles diferentes, a funo TypeOF pode detectar o tipo de controle em tempo de execuo: Function MyFunc (ctl as Control)

[email protected]

78

If TypeOf ctl Is TextBox Then '... ElseIf TypeOf ctl Is CommandButton Then '... '... End If End Function Este cdigo funciona em VB3 e VB4. A diferena que no VB4, alm de controles e forms, qualquer objeto vlido pode ser identificado. O VB4 adiciona ainda, a funo TypeName que indica (numa string) o nome da classe do objeto: Function MyFunc (ctl as Control) Dim sClassType As String 'typeName novidade do VB4 sClassType = TypeName(ctl) Select Case sClassType Case "TextBox" '... Case "CommandButton" '... 'case ... End Select End Function Os nomes das classes de controle, no ambiente do VB, aparecem na Properties Window (janela de propriedades, ao lado do nome do controle). 170 - Determinando a classe de qualquer objeto Enviado por: Henrique Angelo No VB4, o comando TypeOf trabalha com qualquer objeto vlido. Exemplo: 'Esta rotina imprime informaes especficas de objetos Public Sub PrintObjectInfo (YourObject As Object) If TypeOf YourObject Is CDesk then Print "Object Type: Mesa" Print "Nmero de pernas: " & YourObject.NumberOfLegs ElseIf TypeOf YourObject Is CHouse Then Print "Object Type: Casa" Print "Nmero de portas: " & YourObject.NumberOfDoors End If 'impresso das propriedades de mesmo nome Print "Data de Venda: " & YourObject.Date Print "Preo de Venda: " & YourObject.Price '... End Sub

[email protected] - Converso de Nulos Enviado por: Henrique Angelo

79

Em consultas a bancos de dados, o retorno de uma varivel, quando nula, poder no ser 0 (numrico) ou "" (string). Geralmente se resolve assim: If Not IsNull(myrecordset.myfield) Then myvar = myrecordset.myfield Else myvar = "" 'myvar = 0, no caso de numricos End If Uma forma mais simples myvar = "" & myrecordset.myfield Ou myvar = val(0 & myrecordset.myfield) ' para numricos 172 - Uma histria de trs beeps Enviado por: Henrique Angelo Seus programas no esto executando instrues em VB4 como executavam em VB3? Tente isto , em Qbasic, VB3 e VB4. BEEP: BEEP: BEEP Ao depurar com passo (F8), este mui complexo cdigo, voc ir ouvir trs Beeps, exceto no VB4. No VB4, palavras reservadas seguidas de dois pontos (:) so consideradas labels (rtulos de desvio). Assim funciona: Beep Beep Beep E voc ouvir os to esperados trs beeps. 173 - Lembra-se do SWAP? Enviado por: Henrique Angelo Fiquei surpreso quando notei que no Visual Basic, o comando SWAP do Qbasic no havia sido implementado. Na rotina abaixo, que usei para ordenar um arquivo, o SWAP simulado com strings, mas funciona com outros tipos de dado. Private Sub Form_Load( ) Dim a,b As String * 4 Dim c As String * 4 ' varivel para alternao (Swap) a = "Joo" b = "Francisco" Debug.Print "Antes do swap: " & a & " " & b c=a a=b b=c Debug.Print "Aps o swap: " & a & " " & b End Sub

[email protected] - Posicionando uma Common Dialog Enviado por: Henrique Angelo

80

Ficou triste ao ler a documentao do VB, que dizia "Note: you cannot specify where a common dialog is displayed" (voc no poder especificar onde mostrada uma common dialog)? Ento tente isto: Inicie um novo form (que ser usado apenas para isto) em vez de chamar a abertura do dilogo diretamente do form principal. (FrmDummy_OpenSaveAs.Hide) Defina as propriedades Left e Top conforme desejar e inicie a common dialog deste form. No Windows 95 (VB 4-32 bits) , a common dialog ir aparecer na posio do form que a chamou. Como o form hide (oculto), isto imperceptvel para o usurio. 176 - Criando senhas para banco de dados Enviado por: Henrique Angelo O Jet Engine 3 (exclusivo32 bits) inclui um novo sistema de segurana baseado em senhas de BD mais complexas e mais seguras que o antigo modelo de grupos. Este sistema disponibiliza uma senha para abertura da base de dados . Este sistema mais simples de ser utilizado mas facilmente comprometido, pois, todos os usurios possuem a mesma senha. Entretanto, voc poder usar tanto o recurso de DB Password (senha de BD) como o de workgroup (grupos), ao mesmo tempo (isto , que dar mais segurana). Manipule uma DB Password no VB, usando o novo mtodo NewPassword (database object), com cdigos como este: Dim wrk As Workspace Dim db As Database Set wrk = DBEngine. Workspace(0) Set db = wrk.OpenDatabase("MYDB.MDB",true) 'note que a base deve ser aberta como exclusiva 'alterando a senha atual (em branco) para "NewPass" db.NewPassword "","NewPass

177 - Simplificando chamadas API atravs de funes prprias Enviado por: Henrique Angelo Algumas chamadas funo API (DLL) so bastante complexas. Uma dica criar uma funo de cdigo VB que chama a API. Assim, a complexidade da API s ir aparecer uma vez. Por exemplo, a funo GetPrivateProfileString que, captura uma configurao de arquivo INI. Declare Function GetPrivateProfileString Lib "Kernel" (ByVal _ lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault _ As String, ByVal lpReturnedString As String, ByVal nSize As Integer, _ ByVal lpFileName As String) As Integer A chamada da funo ficaria assim: Global Const Ini_File = App.path & "\Myapp.INI) '... Dim VA_LastUser 'chamada a API para capturar o contedo de "lastuser" na seo "options" On Error GoTo Erro_INI Dim VL_Sec As String, VL_Key As String, VL_Size As Integer Dim VL_Return As String, VL_FileName As String

[email protected]

81

Dim VL_SizeHandle As Integer, VL_Valid As Integer Dim Va_Msg As String Const CL_Default = "" 'retorno no caso de no encontrar VL_Sec = "options" VL_Key = "lastuser" VL_Size = 30 VL_Return = Space$(VL_Size) 'string a retornar VL_SizeHandle = Len(VL_Return) 'tamanho da string de retorno VL_FileName = Ini_File 'arquivo no formato INI VL_Valid = GetPrivateProfileString(VL_Sec, VL_Key, CL_Default, _ VL_Return, VL_SizeHandle, VL_FileName) VA_LastUser = Left$(VL_Return, VL_Valid) Exit Function 'ou Exit Sub Erro_LeMeuINI: VA_LastUser = CL_Default Nota-se uma complexa e grande quantidade de cdigo. A API no retorna a string procurada e sim um buffer. O contedo retornado por um argumento (!) e precisa ser formatado com o tamanho do buffer (funo left). Para eliminar todo este cdigo a cada necessidade (cada campo INI) foi implementada uma chamada assim: Global Const Ini_File = App.path & "\Myapp.INI) '... Dim VA_LastUser 'chamada a API para capturar o contedo de "lastuser" na seo "options" Global Const Ini_File = "MYAPP.INI" ... VA_LastUser = FU_Le_MeuINI ("options", "lastuser", 30) Abaixo, um exemplo de funo "tradutora" de API: Function FU_Le_MeuIni (VL_Sec As String, VL_Key As String, VL_Size As Integer) As String 'recebe nome da seo e do pargrafo e tamanho da string de retorno 'retorna valor encontrado (string) ou "" 'usa a constante Ini_File e 'a API (Windows 3.1 Kernel) GetPrivateProfileString On Error GoTo Erro_LeMeuINI Dim VL_Return As String, VL_FileName As String Dim VL_SizeHandle As Integer, VL_Valid As Integer Dim Va_Msg As String Const CL_Default = "" 'retorno no caso de no 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

[email protected]

82

VL_Valid = GetPrivateProfileString(VL_Sec, VL_Key, CL_Default, _ VL_Return , VL_SizeHandle, VL_FileName) FU_Le_MeuIni = Left$(VL_Return, VL_Valid) Exit Function Erro_LeMeuINI: FU_Le_MeuIni = CL_Default Resume Next End Function A funo usada como exemplo do VB3, podendo ser usada em VB4 se sua aplicao for em 16 bits. Mas, o conceito de criar funes "traduzidas" ou "facilitadas" de API aplicvel a qualquer verso do Visual Basic. 178 - Melhorando as declaraes API (II - a volta do SendMessage) Enviado por: Henrique Angelo Quando falava de SendMessage (veja dica anterior), lembrei de um outro truque que pode ser interessante para ser includo em seus hbitos de programao. Quando uso algumas mensagens em particular, o argumento lParam , na verdade, considerado uma combinao de dois valores (words) . A mensagem EM_LINESCROLL pode rolar uma text box multilinha; a primeira word (low word) contm o nmero de linhas para rolar verticalmente e a segunda (hight word), contm o nmero de linhas para rolar horizontalmente. 'rola uma caixa de texto em "HO" linhas 'horizontalmente e "VE" linhas verticalmente 'obs.: isto no funciona corretamente longValue& = HO * 65536 + VE ... SUB_SendMessage Text1.hWnd, EM_LINESCROLL, 0, longValue O cdigo acima no trabalha corretamente se HO for positivo e VE for negativo. A soluo dividir o nmero long de lParam em dois, na declarao Declare Sub SUB_SendMessage2 Lib "User" Alias "SendMessage" (byVal hWnd as _ Integer , byVal msg as Integer, byVal wParam as Any, byVal lParam1%,_ lParam2) A chamada passa a ser: SUB_SendMessage2 Text1.hWnd, EM_LINESCROLL, 0, HO, VE Este truque funciona, pois um valor long integer na "pilha" corresponde a combinao de dois valores word combinados. 179 - Mova e redimensione controles com preciso Enviado por: Henrique Angelo Ao desenhar um form, voc pode utilizar mouse e teclado para obter melhor preciso. Esta dica serve tambm para Access 2 e 7 (95). A - Quando voc desejar alterar o tamanho de um controle: 1. Selecione-o 2. Pressione SHIFT e use as teclas de navegao para alterar o tamanho. B - Quando voc desejar mover um controle: 1. Selecione-o 2. Pressione CTRL e use as teclas de navegao para alterar a posio. Por Chris Kunicki, repassada por John Chmela (VB Developer's Network)* Nota da Redao: Os autores informam que a dica (A e B) se aplica ao VB3, mas, no funciona. Acrescentamos, ainda, alguns dados abaixo. C - Evitando acidentes 1. O VB4 possui o recurso de trava (lock) de tamanho e posio em tempo de desenho. Selecione o(s)

[email protected]

83

controle(s) e clique no boto "cadeado", na barra de ferramentas. 2. O VB3 no possui o recurso de "cadeado", mas, possvel mover ou selecionar os controles com maior cuidado (para alterar vrias propriedades ao mesmo tempo, por exemplo). Basta selecionar, passando o mouse no form, uma rea em volta dos controles. Isto no se aplica a controles contidos em outros objetos (como painis, frames e picture boxes). D - Maior preciso Use os valores numricos de tamanho e posio: left, top, height e width - correspondentes a x, y' (eixo y do topo para baixo) , h (altura) e b (base), respectivamente - na Janela de Propriedades ou Janela de Cdigo. Esta tarefa um pouco rdua, ento, desenhe o controle com medidas aproximadas para depois, ajustar, via digitao de valores. 180 - Alteraes com Mid Enviado por: Henrique Angelo Voc provavelmente j conhece a funo e o comando Mid, que retorna uma substring com um nmero especfico de caracteres, ou seja, uma parte da string usada como parmetro. Mas, voc sabe como usar o Mid para substituir caracteres no meio de uma string? O Mid uma pequena excentricidade do VB, pois, altera um de seus prprios argumentos. Mas, isto economiza uma srie de instrues de concatenao, observe: Dim mystring as String mystring = "SOME STRING" If Mid(mystring, 2, 1) = "O" Then Mid(mystring, 2, 1) = "A" ' substituindo caracter End If

181 - Destacando uma linha em um DBGrid Enviado por: Henrique Angelo Para destacar uma linha no controle DBGrid, adicione o registro corrente SellBookmarks Collection: Private Sub DBGrid_RowColChange _ (LatRow As Variant, ByVal LasRow As Integer) If Data1.RecordSet.RecordCount Then DBGrid.SelBookmarks.Add _ Data1.RecordSet.Bookmark End If End Sub

182 - Mostra o nome que foi usado pelo usurio para se logar no Win95/NT Enviado por: Henrique Angelo Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ (ByVal lpBuffer As String, nSize As Long) As Long gsUserId = ClipNull(GetUser()) Function GetUser() As String Dim lpUserID As String Dim nBuffer As Long Dim Ret As Long lpUserID = String(25, 0)

[email protected]

84

nBuffer = 25 Ret = GetUserName(lpUserID, nBuffer) If Ret Then GetUser$ = lpUserID$ End If End Function Function ClipNull(InString As String) As String Dim intpos As Integer If Len(InString) Then intpos = InStr(InString, vbNullChar) If intpos > 0 Then ClipNull = Left(InString, intpos - 1) Else ClipNull = InString End If End If End Function

183 - Movimentando um label pela tela Enviado por: Henrique Angelo Inicie um novo projeto, coloque um label(name=Label1) e um timer(name=Timer1). Nas prorpiedades do timer coloque: Interval = 1 Enabled = False No Form_Load() timer1.enabled = true No Timer1_Timer() While Label1.left 1 i = Forms.Count - 1 If Forms(i).MDIChild Then Unload Forms(i) Wend End Sub

186 - Abrindo o Bloco de Notas a partir de um programa Enviado por: Henrique Angelo 1-Coloque um Command Button em um form 2-Coloque o seguinte nas declaraes do form: Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Const SYNCHRONIZE = 1048576 Const NORMAL_PRIORITY_CLASS = &H20& Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type Private Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String

[email protected]

86

lpTitle As String dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type

3-Agora coloque no Command1_Click: Dim pInfo As PROCESS_INFORMATION Dim sInfo As STARTUPINFO Dim sNull As String sInfo.cb = Len(sInfo) success& = CreateProcess(sNull, "notepad.exe e:\anexis\vbpage\vbisland.html", ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo) MsgBox "Notepad has been started. Click OK to end it." ret& = TerminateProcess(pInfo.hProcess, 0&) ret& = CloseHandle(pInfo.hThread) ret& = CloseHandle(pInfo.hProcess) MsgBox "Notepad has been shut down."

187 - Usando UNLOAD e HIDE Enviado por: Gerson Keiti Motoyama Use o Hide para apenas esconder o formulrio, sendo que a propriedade Visible do formulrio recebe o valor False. Mas se no quiser mais utilizar os dados alterados no formulrio pelo usurio, ento use o Unload, que estar realmente descarregando, e voltando aos valores padres definido no cdigo. 188 - Utilize o Registro do Windows Enviado por: Gerson Keiti Motoyama Armazene qualquer informao no registro do Windows, e depois retorne para ser utilizado no programa. Por exemplo, para salvar o nome e n. de telefone do proprietrio do programa, faa assim: SaveSetting "MyApp","User", "Name", "Gerson"

[email protected]

87

SaveSetting "MyApp","User", "Tel", "12345678" E para retornar este valor ao programa: Nome = GetSetting("MyApp","User", "Name") Telefone = GetSetting("MyApp","User", "Tel") Se quiser excluir: DeleteSetting "MyApp", "User"

189 - Deixe seu programa menor Enviado por: Gerson Keiti Motoyama Algumas dicas para diminuir o tamanho do seu arquivo compilado: - Evite deixar espaos (caracteres) no cdigo. - Utilize o 'With Statement' para no ter que repetir nomes de objetos no cdigo. - Os comentrios, embora sejam teis, so uns ocupadores de espao. Portanto, se tiver muito deles, quando for compilar, retire todos os comentrios e salve ento em um *.exe. Mas no salve no projeto. - Se seu cdigo possuir estruturas de controle multiniveladas, retire-o ao compilar. Afinal, para o programa, no tem diferena nenhuma. Mas no salve no projeto. 190 - Como detectar erros inexplicveis? Enviado por: Gerson Keiti Motoyama comum as pessoas, para quem vc destrubuiu um programa, receber mensagens de erros do tipo: Runtime error, e em seguida ser finalizado sem saber a origem em que causou o erro. Para isso faa o programa detectar o erro (embora no aponte especficamente) dessa forma: Insira o seguinte cdigo no INCIO da procedure em que quiser detectar: On Error GoTo Erro: Em seguida no final da procedure, coloque: MsgBox "O (Nome do programa) causou um erro desconhecido. Informe as _ seguintes 'instrues de erro' ao desenvolvedor :" & Chr(10) & _ Err.Number & Chr(10) & Err.Description & Chr(10) & Err.Source & _ Chr(10) & App.Revision, 16, "Erro Desconhecido"

191 - Como saber se o programa est rodando no Windows95 (ou em suas futuras verses)? Enviado por: Gerson Keiti Motoyama Insira no mdulo .BAS, o seguinte: Declare Function GetWinPlatform Lib "VB5STKIT.DLL" () As Long Agora chame a funo assim: Function IsWindows95() As Boolean Const dwMask95 = &H2& If GetWinPlatform() And dwMask95 Then IsWindows95 = True Else IsWindows95 = False End If End Function

[email protected] - Usando o CHR() para ocultar "mensagens" Enviado por: Gerson Keiti Motoyama

88

Para quem no sabe, infelizmente, possvel "espiar", ou at mesmo "alterar" o cdigo de um executvel (somente as "mensagens"), seja ele compilado pelo VB, ou em qualquer outra linguagem, por um usurio de nvel intermedirio. Para que isso no ocorra, ou pelo menos para dificultar alguma alterao, quando quiser escrever uma mensagem, por exemplo do tipo: msgbox "Ol, blz?" Utilizando o sintaxe: Chr(charcode), faa o seguinte: msgbox chr(79) & chr(108) & chr(225) & chr(44) & chr(160) & chr(98) & chr(108) & chr(122) & chr(63) Obs: Consulte os valores para o charcode no Help do VB: Character Set (0-127)/(128-255) 193 - Criar Atalhos no Menu Iniciar usando DDE Enviado por: Antonio f. Marques Junior Uma maneira fcil de criar atalhos no menu iniciar usando os comandos DDE usados anteriormente no Windows 3.1, que tambm vale para Win95. Os comandos so: AddItem, CreateGroup, DeleteGroup, DeleteItem, ShowGroup, ReplaceItem, Reload. Por exemplo, para se criar uma pasta no menu iniciar, e um at