Disponibilizar diversas funcionalidades que propiciem interferência nos formulários que criamos no MS Excel através de chamadas as suas APIs é muito prático ,rápido e funcional.
Bem, como sempre, estou usando um exemplo simples como o de fazer um botão aparecer e sumir num formulário criado por nós mesmos no MS Excel. Mas veja esta como uma oportunidade para aprender a utilizar códigos de terceiros dentro das suas aplicações VBA.
O que é uma API?
API, é o acrônimo, sim, mais prá nossa coleção, de Application Programming Interface (ou Interface de Programação de Aplicativos) é um conjunto de rotinas e padrões estabelecidos por um software para a utilização das suas funcionalidades através de aplicativos que não pretendem envolver-se em detalhes da implementação do software, mas apenas usar seus serviços.De modo geral, a API é composta por uma série de funções acessíveis somente por programação, as quais nos permitem utilizarmos características de software menos evidentes aos programadores mais tradicionais.Por exemplo, um sistema operacional possui uma grande quantidade de funções na API, que permitem ao programador criar janelas, acessar arquivos, criptografar dados etc. Mas as APIs dos sistemas operacionais costumam ser dissociadas de tarefas mais essenciais, como a manipulação de blocos de memória e acesso a dispositivos. Essas tarefas são atributos do núcleo (kernel) de sistema e raramente são programáveis. Outro exemplo são os programas de desenho geométrico que possuem uma API específica para criar automaticamente entidades de acordo com padrões definidos pelo utilizador.
Mais recentemente, o uso de API tem se generalizado nos plugins (acessórios que complementam a funcionalidade de um programa). Os autores do programa principal fornecem uma API específica para que outros autores criem plugins, estendendo as funcionalidades do programa.
Agora que já ampliamos um pouco mais a nossa compreensão do que são as APIs, façamos melhor, vamos utilizar algumas chamadas às suas funcionalidades.
Ativar no formulário o botão Maximize
Mostra ou torna invisível o botão de Maximizar e o de Minimizar no formulário ativo. Os botões ficarão visíveis, mas somente terão funcionalidades de acordo com a respectiva chamada da sua função. ShowMinimizeButton ou ShowMaximizeButton.
Function ShowMaximizeButton (UF As MSForms.UserForm, HideButton As Boolean) As Boolean
Function ShowMinimizeButton (UF As MSForms.UserForm, HideButton As Boolean) As Boolean
Bem, antes de efetuar chamadas as funções acima, precisa criar um módulo no qual colocará os códigos abaixo, pois estes são quem efetuarão as chamadas as APIs do Windows.
Existem inúmeras funções com chamadas intrínsecas, e será muito produtivo que tire tempo para estudar cada uma destas, a fim de ampliar a sua compreensão de como efetuar tais chamadas.
Este post é apenas uma pincelada na utilização desta técnica, que poderá ser ampliada até mesmo ao uso das APIs do Google, GoogleMaps, GMail, Skype, etc...
As funções que não encontrar constantes abaixo, podem ser facilmente encontradas com o Google na Internet. E isso foi proposital, para que pesquise outras idéias em outros Blogs e fóruns.
Function ShowMaximizeButton (UF As MSForms.UserForm, _
HideButton As Boolean) As Boolean
'' ShowMaximizeButton' Mostra (Se HideButton estiver como False) ou esconde (Se HideButton estiver como True)' O botão de maximizar da janela.'
Dim UFHWnd As Long
Dim WinInfo As Long
Dim R As Long
Let UFHWnd = HWndOfUserForm (UF)
If UFHWnd = 0 Then
Let ShowMaximizeButton = False
Exit Function
End If
Let WinInfo = GetWindowLong (UFHWnd, GWL_STYLE)
If HideButton = False Then
Let WinInfo = WinInfo Or WS_MAXIMIZEBOX
Else
Let WinInfo = WinInfo And (Not WS_MAXIMIZEBOX)
End If
Let R = SetWindowLong (UFHWnd, GWL_STYLE, WinInfo)
Let ShowMaximizeButton = (R <> 0)
End Function
Function ShowMinimizeButton (UF As MSForms.UserForm, _
HideButton As Boolean) As BooleanDim UFHWnd As Long
Dim WinInfo As Long
Dim R As Long
Let UFHWnd = HWndOfUserForm (UF)
If UFHWnd = 0 Then
Let ShowMinimizeButton = False
Exit Function
End If
Let WinInfo = GetWindowLong (UFHWnd, GWL_STYLE)
If HideButton = False Then
Let WinInfo = WinInfo Or WS_MINIMIZEBOX
Else
Let WinInfo = WinInfo And (Not WS_MINIMIZEBOX)
End If
Let R = SetWindowLong (UFHWnd, GWL_STYLE, WinInfo)
Let ShowMinimizeButton = (R <> 0)
End Function
Function HWndOfUserForm (UF As MSForms.UserForm) As Long
' HWndOfUserForm' This returns the window handle (HWnd) of the userform referenced' by UF. It first looks for a top-level window, then a child
' of the Application window, then a child of the ActiveWindow.
Dim AppHWnd As Long
Dim DeskHWnd As Long
Dim WinHWnd As Long
Dim UFHWnd As Long
Dim Cap As String
Dim WindowCap As String
Let Cap = UF.Caption
' First, look in top level windows
Let UFHWnd = FindWindow (C_USERFORM_CLASSNAME, Cap)
If UFHWnd <> 0 Then
Let HWndOfUserForm = UFHWnd
Exit Function
End If
' Not a top level window. Search for child of application.
Let AppHWnd = Application.hwnd
Let UFHWnd = FindWindowEx (AppHWnd, 0&,C_USERFORM_CLASSNAME, Cap)
If UFHWnd <> 0 Then
Let HWndOfUserForm = UFHWnd
Exit Function
End If
' Not a child of the application.
' Search for child of ActiveWindow (Excel's ActiveWindow, not
' Window's ActiveWindow).
If Application.ActiveWindow Is Nothing Then
Let HWndOfUserForm = 0
Exit Function
End If
Let WinHWnd = WindowHWnd (Application.ActiveWindow)
Let UFHWnd = FindWindowEx (WinHWnd, 0&, C_USERFORM_CLASSNAME, Cap)
Let HWndOfUserForm = UFHWnd
End Function
Tags: Bernardes, MS, Microsoft, Office, Excel, VBA, FORM, userform, API, functions, Chip Pearson, ShowMaximizeButton, HWndOfUserForm, GetWindowLong, SetWindowLong, FindWindow, FindWindowEx, WindowHWnd
André Luiz Bernardes
A&A® - Work smart, not hard.
Nenhum comentário:
Postar um comentário