SOBRE O AUTOR

NAVEGAÇÃO

FINANÇAS

SETOR ELÉTRICO

INFORMÁTICA

MISCELÂNEA

Clique aqui para ver meus bookmarks
 
INFORMÁTICA
Visual Basic
Introdução
Iniciando
Controles
Menus
Arquivos
Programação
Gráficos
Erros
Bancos de Dados
Dicas & Truques
Funções, Comandos
Eventos do VB
Downloads
InfoLinks
Delphi
 
SOBRE O AUTOR
Curriculum Vitae
Estante de Livros
Publicações
Painel ICQ
 
NAVEGAÇÃO
Página Inicial
Mapa do Site
Novidades
Busca no Site
Comentários
Livro de Visitas
 
FINANÇAS
As 500 mais - BR
Análise de Projetos
Contabilidade
Cotações Brasil
Cotações EUA
Estratégia
Gráficos Online
Glossário Financeiro
StockLinks
 
SETOR ELÉTRICO
EletroLinks
Papers
Privatização
 
MISCELÂNEA
Cinema
Curitiba
Humor
Links Amigos
Star Trek
 

Enviar e-mail Alvaro


WallStreet Dividend Award




©1998/1999
Alvaro A. de Almeida


  CAPÍTULO 9
DICAS & TRUQUES


Capítulo 8 1 2 3 4 5 6 7 8 9 10 11 12 Capítulo 10

Otimização

  1. Use das cláusulas "With .. End" sempre que se referir a mais de uma propriedade ou método de objetos;
  2. Desligue todos os controles OCX que o projeto não venha a utilizar através do menu Tools|Custom Controls;
  3. Evite uso do tipo de dados Variant. Utilize a seguinte ordem de preferência: Integer, Long, Single, Double, Currency e Variant;
  4. Use tipos de objetos específicos ao invés de genéricos. Exemplo: use TextBox e não Control, use frmMain e não Form, etc.;
  5. Use constantes sempre que possível;
  6. Prefira Image Control ao invés de Picture Box, a menos que haja necessidade de características especiais que o último provê. O uso do primeiro aumenta a velocidade e diminui o tamanho do código;
  7. Use o AutoRedraw apropriadamente;
  8. Use Show prematuro (já na primeira linha) no evento Load de um formulário. O VB 4 não mostra o formulário até que todo o código do evento Load tenha sido executado. Fazendo assim, você estará fornecendo alguma coisa para ser visto enquanto outras operações ainda estão em andamento;
  9. Sempre que possível, prefira o emprego de arrays de controle carregados em tempo de execução ao invés de controles individuais colocados em tempo de desenvolvimento;
  10. Quando não for necessário que o usuário edite o texto, use Labels ao invés de TextBox;
  11. Agrupe os procedimentos que tenham relacionamento entre si em módulos separados;
  12. Procure usar arryas dinâmicos do que fixos. Quando não mais necessário um dado array, use ERASE ou ReDim Preserve para descartar dados não necessários;
  13. Elimine Debug.Print .... Apesar de ignorados em tempo de execução, eles estarão presentes no arquivo .EXE, aumentando o tamanho deste;
  14. Prefira carregar imagens em tempo de execução a partir de um arquivo usando a função LoadResPicture. Imagens carregadas em tempo de desenvolvimento adicionam a imagem ao formulário e aumentam o consumo de recursos do formulário em questão;
  15. Quando não estiver mais usando uma imagem em controles do tipo Form, Picture box ou Image, defina a propriedade Picture para Nothing. Exemplo: Set Picture1.Picture = Nothing ;
  16. Se você usa a propriedade Image de uma Picture Box ou de um formulário, o VB cria um bitmap AutoRedraw (mesmo que a propriedade esteja False). Quando você não mais precisar desta imagem, ganhe memória usando o método Cls antes de fazer o AutoRedraw = false. Exemplo:

picMyPic.AutoRedraw = True
picMyPic.Cls
picMyPic.AutoRedraw = False

 

Como remover um formulário Completamente da Memória

No Visual Basic um formulário não pode ser completamente removido da memória através do conhecido comando Unload. Para removê-lo, você deve incializar o Form para Nothing (Set Form1= Nothing).

Como Disparar um ShutDown a partir de uma Aplicação VB

Um shutdown do microcomputador pode ser dado através de uma função do API. Inicialmente, Escreva o seguinte trecho de código em um módulo do VB:

Declare Function ExitWindows Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, _ ByVal dwReserved As Long) As Long
Public Const EWX_LOGOFF = 0
Public Const EWX_REBOOT = 2
Public Const EWX_SHUTDOWN = 1

Em seguida, você pode colocar o seguinte código em um controle do VB (e.g., um botão de comando):

Dim RetVal as Long
RetVal = ExitWindows(0, 0)

Como Obter o Nome do Computador onde a Aplicação VB está Rodando

Às vezes necessitamos conhecer qual o nome da máquina local onde nossa aplicação está rodando. Podemos pensar em dar uma espiada no registro local do Windows95. Esta seria uma solução possível (abordada em outra dica mais adiante). Outra solução envolve uma simples chamada a uma função do API do WIndows95, ou seja:

Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" _
             (ByVal lpBuffer As String, nSize As Long) As Long
Function sGetComputerName() As String
Dim sBuffer As String
Dim lBufSize As Long
Dim lStatus As Long
lBufSize = 255
sBuffer = String$(lBufSize, " ")
lStatus = GetComputerName(sBuffer, lBufSize)
sGetComputerName = ""
If lStatus <> 0 Then
  sGetComputerName = left(sBuffer, lBufSize)
End If
End Function

Aqui segue outra maneira, através de uma class que defina uma WINAPI
do advapi32:

Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
(ByVal hkey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, _
lpData As Any, _
lpcbData As Long) As Long
Public Function GetLocalComputerName()
Dim RegistryAgent As New clsRegistryAgentRegistryAgent.RegistryKey = "\System\CurrentControlSet\Control\ComputerName\
ComputerName"
RegistryAgent.SubKey = "ComputerName"
RegistryAgent.GetValue
GetLocalComputerName = RegistryAgent.KeyValue
End Function

Como enviar um e-mail através de uma Aplicação VB

Uma das possibilidades de mandarmos um e-mail através do Visual Basic pode ser conferida pela seguinte dica:

Option Explicit
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
Private Sub Command1_Click()
Dim ret&
ret = ShellExecute(Me.hwnd, "Open", "mailto:aluiziog@mail.copel.br?SUBJECT=Teste de e-mail via VB com ShellExecute", _
"", App.Path, 1)
End Sub

Como Alterar Datas de Arquivos via VB (p.ex. para Refletir a Versão Corrente de um AplicatiVO)

A seguinte dica cria a possibilidade, através do Visual Basic, de alterarmos datas de arquivos para que refletitam uma certa versão que estamos distribuindo:

Private Type SYSTEMTIME
  wYear As Integer
  wMonth As Integer
  wDayOfWeek As Integer
  wDay As Integer
  wHour As Integer
  wMinute As Integer
  wSecond As Integer
  wMilliseconds As Integer
End Type
Private Type FILETIME
  dwLowDateTime As Long
  dwHighDateTime As Long
End Type
Private Type OFSTRUCT
  cBytes As Integer
  fFixedDisk As Integer
  nErrCode As Long
  Reserved1 As Long
  Reserved2 As Long
  szPathName As String * 128
End Type
Const OF_READ = &H0
Const OF_READWRITE = &H2
Private Declare Function OpenFile Lib "kernel32" _
(ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As
Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Private Declare Function SetFileTime Lib "kernel32" _
(ByVal hFile As Long, lpCreationTime As FILETIME, _
lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Private Declare Function GetFileTime Lib "kernel32" _
(ByVal hFile As Long, lpCreationTime As FILETIME, _
lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Private Declare Function SystemTimeToFileTime Lib "kernel32" _
(lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" _
(lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long
Function ahtSetFileDateTime(strFileName As String, dtmDate As Date) As Boolean
Dim hFile As Long
Dim of As OFSTRUCT
Dim st As SYSTEMTIME
Dim ftCreation As FILETIME
Dim ftLastAccess As FILETIME
Dim ftLastWrite As FILETIME
Dim ftLocal As FILETIME
Dim fOK As Boolean
st.wYear = Year(dtmDate)
st.wMonth = Month(dtmDate)
st.wDay = Day(dtmDate)
st.wHour = Hour(dtmDate)
st.wMinute = Minute(dtmDate)
st.wSecond = Second(dtmDate)
hFile = OpenFile(strFileName, of, OF_READWRITE)
If hFile > 0 Then
  fOK = GetFileTime(hFile, ftCreation, ftLastAccess, ftLastWrite)
  If fOK Then fOK = SystemTimeToFileTime(st, ftLastWrite)
  If fOK Then fOK = LocalFileTimeToFileTime(ftLastWrite, ftLocal)
  If fOK Then fOK = SetFileTime(hFile, ftCreation, ftLocal, ftLocal)
  CloseHandle hFile
End If

ahtSetFileDateTime = fOK

End Function

Determinando se a Aplicação VB está Rodando no Ambiente de Desenvolvimento (IDE)

Às vezes necessitamos dar um tratamento diferenciado ao comportamento do nosso código, dependendo se ele está sendo executado no ambiente de desenvolvimento (IDE) ou via "executável". Um modo de tratar isto poderia ser:

Function InEditEnvironment() as boolean
' Isto aqui funciona com o VB5 - pequenas alterações deverão ser feitas para os outros VB's
Dim Mdl$, hInst
Mdl$ = String$(128, Chr$(0))
hInst = GetWindowWord(hwnd, GWL_HINSTANCE)
ModuleName = Left$(ModuleName, GetModuleFileName(hInst, Mdl$, Len(Mdl$)))
If (Len(Mdl$)) > 0 Then
  inEditEnvironment = ( right(UCase(Mdl$), 7) = "VB5.EXE" )
End If
End Function


Copyright © 1998/1999 - Desenvolvido por Alvaro Augusto de Almeida (isso significa que você pode manter cópias para uso particular, mas não para divulgação). Dúvidas e sugestões serão bem vindas.   

     
Vai para a página inicial

Acessos desde 30.01.99: 

Enviar e-mail para Alvaro