Skip to content

Criação de uma Classe em VBA, que utiliza as API´s dos Windows em múltipla Arquitetura (32 bits e 64 bits).

Notifications You must be signed in to change notification settings

MikelSFraga/ApiFunction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ApiFunction Class V1.0.1

Alguns usuários detectaram problemas relacionados ao processo de importação da Classe, para suas máquinas. Através de algumas esquisas realizadas, foi detectado um erro de configuração do Git, onde o arquivo Cls (que assumem uma estrutura de arquivo texto), estava sendo gravado com caracteres bases do Sistema Operacional Linux, que é padrão no Git.

Com a descoberta da origem do problema, foi possível realizar uma tratativa nos arquivos, através da alteração desse padrão do Linux, para o mesmo padrão utilizado pelo Windows.


ApiFunction Class V1.0.0

Com o intuito de facilitar o desenvolvimento de ferramentas, utilizando o processo de programação em VBA do pacote Microsoft Office, iniciou-se o desenvolvimeno desta Classe.

Seu objetivo é a unificação de várias rotinas que utilizam as Funções dos Windows (API´s), através das quais é possível realizar alterações na estrutura dos Formulários (Userform´s) que utilizamos na estrutura do Visual Basic for Application (VBA).

Esta Classe atenderá as diferentes Arquiteturas do Sistema Operacional Windows (32 bits e 64 bits), como também as Arquiteturas do Pacote Microsoft Office (VBA6 e VBA7).

Funções Windows (API´s)

Nesta versão atual do ApiFunction (v1.0.0), são utilizadas as seguintes Funções/Api´s do Windows:

  • FindWindow (user32.dll): A função FindWindow recupera o identificador da janela que possui o nome da classe e da janela combinando com textos específicos. Esta função não pesquisa janelas dependentes.

  • GetWindowLong (user32.dll): A função GetWindowLong recupara informação sobre a janela especificada. A função também recupera valores 32-bit (long) específico de uma janela extra da memória de uma janela.

  • SetWindowLong (user32.dll): A função SetWindowLong modifica um atribudo da janela específica. A função também define valores 32-bit (long) específico de uma janela extra da memória de uma janela.

  • ShowWindow (user32.dll): A função ShowWindow define o status específico de exibição da janela.

  • SetFocus (user32.dll): A função SetFocus define o foco do cursor para a janela especificada. A janela deveria estar associada com a fila de mensagens do threads de chamadas.

  • DrawMenuBar (user32.dll): A função DrawMenuBar redesenha a barra de menu da janela especificada. Se a barra de menu for alterada apos o Windows ter creado a janela, esta função deveria ser chamado para desenhar as modificações do menu bar

  • ExtractIcon (shell32.dll): A função ExtractIcon recupera o identificador de um ícone exetutado de um arquivo específicado,de uma biblioteca (DLL) ou de uma imagem do tipo ico.

  • SendMessage (user32.dll): A função SendMessage envia a mensagem especificada para uma janela(s). A função chama o procedimento da janela para a janela especificada e não retorna até que o procedimento da janela tenha processado a mensagem. A função PostMessage, em contrapartida, posta uma mensagem para uma lista de mensagem em thread e retorna imediatamente.

  • SetLayeredWindowAttributes (user32.dll): A função SetLayeredWindowAttributes define a opacidade e cor chave de transparência de uma camada da janela.

  • SetParent (user32.dll): A função SetParent altera a janela pai de uma janela filha especificada.

Caso tenham interesse em conhecer mais sobre as API´s do Windows, podem acessar o site AllAPI.net e acessar a Lista de Api´s.

Métodos e Propriedades Classe

Com base nas Funções acima, foram criados Propriedades e Métodos para esta Classe, que irá funcionar como um Framework de Projetos VBA, para realizar alterações na estrutura física do Formulário (Userform). Seguem relação e descrição, de todos os recursos que a Classe oferece. Ressaltando que os nomes das Propriedades e Métodos são em Inglês, para seguir o padrão da língua estrangeira, utilizada como base para a Programação VBA.

Propriedades

FormStart

Essa propriedade nos permite instanciar o Objeto da Classe, definindo o Formulário (Userform) que será manipulado/personalizado. Definindo essa propriedade, todas as demais já estarão direcionando seus resultados para o Formulário (Userform) definido.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
End Sub
ActivateButtons

Essa propriedade permite que o desenvolvedor insira os botões de Maximizar e Minimizar, sejam individualmente ou ambos. Para isso, é necessário a selação de uma das seguintes opções:

  • WS_FULLSIZING: ativa, de uma só vez, os dois botões (Maximizar e Minimizar);
  • WS_MAXIMIZE: ativa somente o botão de Maximizar. O botão de Minimizar fica visível, mas desabilitado para uso;
  • WS_MINIMIZE: ativa somente o botão de Minimizar. O botão de Maximizar fica visível, mas desabilitado para uso.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Chama a propriedade que irá ativar os botões Minimizar 
  ' e Maximizar os botões na estrutura do Userform.
  objApi.ActivateButtons = WS_FULLSIZING
End Sub
IconTitleBarForm

Através desta propriedade, é possível inserir um Ícone na Barra de Título do Userform. É preciso apenas informar o caminho onde o arquivo se encontra, para que possa ser passado para as rotinas da propriedade realizarem a transação da imagem para o userform.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Passa para a propriedade a localização da imagem
  ' que será inserida na Barra de título do Userform.
  objApi.IconTitleBarForm = ThisWorkbook.Path & "\xyz.ico"
End Sub
OpacityPercent

Essa propriedade define o Percentual de Opacidade, ou seja, a Transparência que um Userform pode possuir. Geralmente esse é iniciado com 100%, mas o desenvolvedor pode quere desenvolver um formulário com apenas 60% de Opacidade. Basta apenas passar o valor da porcentagem desejada.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Define o percentual de opacidade para Userform.
  objApi.OpacityPercent = 60
End Sub

Métodos

RemoveTitleBar

Esse método, quando chamado, remove a Barra de Título do Userform definido, quando o Objeto da Classe foi iniciado.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Remove a Barra de Título do Userform.
  objApi.RemoveTitleBar
End Sub
HideCloseButton

Esse método, quando chamado, oculta o Botão Fechar da Barra de Título do Userform definido, quando o Objeto da Classe foi iniciado.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Esconde o botão Fechar (X) do Userform.
  objApi.HideCloseButton
End Sub
ActivateDualButtons

Esse método, quando chamado, ativa os botões de Maximizar e Minimizar na Barra de Título do Userform definido. Executa a mesma função que a Propriedade ActiveButtons, mas não é preciso passar parâmetro para a execução.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Ativa os botões de Minimizar e Maximizar do
  ' Userform, como na Propriedade ActivateButtons.
  objApi.ActivateDualButtons
End Sub
ActivateMaximizeOnly

Esse método, quando chamado, ativa somente o botão de Maximizar na Barra de Título do Userform definido. Executa a mesma função que a Propriedade ActiveButtons, mas não é preciso passar parâmetro para a execução.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Ativa somente o botão de Maximizar do
  ' Userform, como na Propriedade ActivateButtons.
  objApi.ActivateMaximizeOnly
End Sub
ActivateMinimizeOnly

Esse método, quando chamado, ativa somente o botão de Minimizar na Barra de Título do Userform definido. Executa a mesma função que a Propriedade ActiveButtons, mas não é preciso passar parâmetro para a execução.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Ativa somente o botão de Minimizar do
  ' Userform, como na Propriedade ActivateButtons.
  objApi.ActivateMinimizeOnly
End Sub
ShowFormTaskBar *

Esse método, quando chamado, extende o acesso ao Userform para a Barra de Tarefas do Windows. Desta forma, não se torna obrigatório o acesso a esse userform, unica e exclusivamente pelo Applicativo Office.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Define o Userform para sub-objeto da classe.
  Set objApi.FormStart = UserForm1
  ' Ativa o Userform na Barra de Tarefas do Window.
  objApi.ShowFormTaskBar
End Sub
ParentForms *

Esse método, quando chamado, define um segundo userform como um Userform Pai do userform atual. Isso significa que o Userform Filho fica limitado a área do Userform Pai.

Exemplo:

Option Explicit

Private Sub UserForm_Initialize()
  ' Declaração do objeto da classe.
  Dim objApi As New ApiFunction
  ' Instancia o novo objeto, a partir da classe.
  Set objApi = New ApiFunction
  ' Define relação enre dos Userforms.
  objApi.ParentForms UserForm2.Caption, UserForm1.Caption
End Sub
  • Existem alguns Métodos e Propriedades que irão gerar erros, se o valor da propriedade ShowModal de um Useform, não for alterado para False. Uma forma de se fazer isso via código, é passar o parâmetro vbModeless, no método Show, utilizado para a abertura de um Userform.

About

Criação de uma Classe em VBA, que utiliza as API´s dos Windows em múltipla Arquitetura (32 bits e 64 bits).

Resources

Stars

Watchers

Forks

Packages

No packages published