Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Personalizando o Formulário 1ª, 2ª, 3ª e 4ª partes

Dicas dos mais variados tipos, necessidades, angústias, enfim
Avatar do usuário
Alex Sandro
Colaborador
Colaborador
Mensagens: 88
Registrado em: Qua Jan 06, 2010 9:39 am
Localização: Inhumas-GO
Contato:

Personalizando o Formulário 1ª, 2ª, 3ª e 4ª partes

Mensagem por Alex Sandro »

Olá pessoal,

Aprendi algumas personalizações de formulário(UserForm) e estarei postando aqui alguns exemplos para enriquecer o conteúdo do fórum.
Neste modelo iremos exibir um formulário sem legenda(Caption) e também movê-lo com o mouse e fechar o mesmo com o botão direito do mouse.

Entendendo o código:


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare FunctionGetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare FunctionCreateRectRgn 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

FindWindow = Utilizando a função FindWindow poderemos remover o botão fechar da janela do Form. Isto mostra como podemos ter um controle sobre a aparência de outras janelas mesmo que estas janelas sejam de outros aplicativos. A função FindWindow() da API do Windows é muito útil quando precisamos obter o handle de uma determinada janela de alto-nível (esta função não nos permite localizar janelas-filhas).

Esta função possui dois parâmetros:

lpClassName - É um ponteiro para uma string terminada em null que especifica o nome de classe ou um átomo de classe criado por uma chamada anterior à função RegisterClass() ou RegisterClassEx(). O átomo deve estar no valor de baixa-ordem (low-order) de lpClassName e o valor de alta-ordem (high-order) deve ser zero.

Se lpClassName apontar para uma string, ele especifica o nome de classe da janela. O nome de classe pode ser qualquer nome registrado anteriormente com uma chamada à RegisterClass() ou RegisterClassEx(), ou qualquer nome de classe dos controles pré-definidos.

Se lpClassName for null, a funções encontrará todas as janelas cujos títulos sejam iguais ao parâmetro lpWindowName.

lpWindowName - É um ponteiro para uma string terminada em null que especifica o nome da janela, ou melhor, o título da janela. Se este parâmetro for null, todas as janelas serão consideradas e a função FindWindow() retornará a primeira janela da lista.

Para não ficar muito extenso só será destacada a FindWindow, que é o princípio da customização, as demais funções poderá ser consultada neste link: http://msdn.microsoft.com/en-us/library/ms632587 (Em Inglês).


Call SemLEgenda = será escrita a ligação, a posição e o método que o Form irá inicializar, através dó código descrito abaixo:

Sub SemLEgenda()
Dim Abmessung As RECT
Dim Abmessung1 As RECT
Dim Pos1x&, Pos1y&, Pos2x&, Pos2y&
If FensterRegion <> 0 Then Exit Sub
UserForm1.BorderStyle = fmBorderStyleSingle
Call Fensternummer(UserForm1, Abmessung, Abmessung1)
Pos1x = 0
Pos1y = (Abmessung1.Top - Abmessung.Top)
Pos2x = Abmessung.Right - Abmessung.Left
Pos2y = Abmessung.Bottom - Abmessung.Top
Region = CreateRectRgn(Pos1x, Pos1y, Pos2x, Pos2y)
FensterRegion = SetWindowRgn(Hauptfensternummer, Region, True)
End Sub


Por último o seguinte código nos permite mover e fechar o form com o botão direito do mouse:

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 Then
If Hauptfensternummer <> 0 Then
dummy = ReleaseCapture()
dummy = SendMessage(Hauptfensternummer, WM_NCLBUTTONDOWN, HTCAPTION, 0)
End If
Else
Unload frmCadastro
End If
End Sub


Por hora é só e me desculpem a pouca esplanação. Mas qualquer dúvida questione para aprendermos mais.

Obrigado.
Anexos
ModeloCadastro_v3.rar
(57.16 KiB) Baixado 1179 vezes
Editado pela última vez por Alex Sandro em Sex Out 15, 2010 11:14 pm, em um total de 3 vezes.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Personalizando o Formulário 1ª parte

Mensagem por Mauro Coutinho »

Alex, muito boa essa personalização, agora vamos aguardar as proximas.

abraços


Avatar do usuário
Alex Sandro
Colaborador
Colaborador
Mensagens: 88
Registrado em: Qua Jan 06, 2010 9:39 am
Localização: Inhumas-GO
Contato:

Personalizando o Formulário 2ª Parte

Mensagem por Alex Sandro »

Olá pessoal,

Estou acrescentando aqui a 2ª parte da personalização de formulários.

Neste modelo é apresentado ao Form a opção de Maximizá-los,
Minimizá-lo, inserir ícones no caption do Form e ativar a janela
do excel quando o Form estiver em uso.
Muitas coisas que achamos ser impossíveis estão em uso neste
modelo adaptado ao código do Tomás.

*Obs: Foi inserido um módulo de classe ao projeto com os códigos
escritos para que a possiblidade aconteça e para inserir o ícone ao
seu projeto procure no Módulo de classe o caminho referente ao
ícone que será inserido ao seu projeto e substitua pelo caminho
que o ícone estará disposto em seu computador.
Ex: msIconPath = "C:\Meus Documentos\Pasta\Alex.ico" 'Coloque aquí o seu ícone


Até o próximo e obrigado.
Anexos
ModeloCadastro_v3.rar
(72.02 KiB) Baixado 946 vezes


Avatar do usuário
Alex Sandro
Colaborador
Colaborador
Mensagens: 88
Registrado em: Qua Jan 06, 2010 9:39 am
Localização: Inhumas-GO
Contato:

Personalizando o Formulário 3ª parte - Form Redondo

Mensagem por Alex Sandro »

Olá a todos,

Em continuação ao meu estudo, quero demonstrar um exemplo de que é possível construir Form's em formatos arredondados, ovais e elípticos. Eu pessoalmente não sinto a necessidade, mas em aprendizados é muito essencial. O VBA é o caminho para um uso incomum, VB ou C + + em linguagem de programação, etc, são comparativamente técnicas bem conhecidas.
Para um UserForm oval eu usei API's e SetWindowRgn e CreateEllipticRgn. Além do SetWindowRgn devemos especificar o identificador de janela do formulário para uma elipse, o FindWindowA que foi usado também.
Note todo o código inserido no modelo e tire suas conclusões de que usar API's às vezes pode ser um pouco atraentes aos nossos projetos.

Agradecimetos a OficiceTanaka

Obrigado a até a próxima.
Anexos
Form_Redondo.rar
(17.22 KiB) Baixado 982 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Personalizando o Formulário 1ª, 2ª e 3ª partes

Mensagem por webmaster »

Alex,

De fato. Em aplicações comerciais, isso é um pouco raro. É mais para necessidades específicas, mas nunca se sabe quando elas vão aparecer, não? ;)

Abraços


Avatar do usuário
Alex Sandro
Colaborador
Colaborador
Mensagens: 88
Registrado em: Qua Jan 06, 2010 9:39 am
Localização: Inhumas-GO
Contato:

Personalizando o Formulário 4ª parte

Mensagem por Alex Sandro »

Olá a todos,

Nesta 4ª parte de customização de formulários veremos um exemplo muito show de um Form com efeito LightBox, como aquele mesmo usado na Web para demonstrar fotos de uma galeria.
Peguei uma adaptação aqui do fórum feita pelo Mauro Coutinho sobre a planilha de cadastro do Tomás, onde ele demonstrava a visualização de gráficos no formulário de inserção de registros(cadastro).
O que fiz foi retirar a visualização dos gráficos do form de cadastro e passá-lo somente para um form independente, sem alterar a codificação pára a visualização da mesma e acrescentei o código demonstrado aqui neste mesmo tópico sobre a retirada do Caption do form e depois coloquei a cor preta no BackGround do form e acrescentei o mesmo objeto de imagem que o Mauro colocou em seu modelo, mantendo assim o código do gráfico e através de códigos VBA sobre a API, foi inserido no form para dar a transparência no mesmo, com alguns controles como a barra de rolagem e um Label, no que me dá a possibilidade de alterar a transparência, mas que na visualização esses objetos estão ocultos. É possível também alterar a transparência diretamente no código:

Private Sub UserForm_Activate()
Me.ScrollBar1.Value = 70 ==> 'Aqui é determinada a transparência que o Form irá se apresentar
End Sub


Private Sub Semitransparent(ByVal intLevel As Integer)
Dim lngWinIdx As Long
hwnd = GetActiveWindow
lngWinIdx = GetWindowLong(hwnd, GWL_EXSTYLE)
SetWindowLong hwnd, GWL_EXSTYLE, lngWinIdx Or WS_EX_LAYERED
SetLayeredWindowAttributes hwnd, 0, (255 * intLevel) / 100, LWA_ALPHA
Label1.Caption = "Semitransparent level is ..." & (100 - intLevel) & "%"
End Sub


Existe outras formas de deixar o Form transparente sem o uso de controles, mas eu achei que assim ficaria fácil para mim.

Obrigado e até a próxima.
Anexos
FrontEnd_MaisGrafico_EmEfeito_LightBox.rar
(85.15 KiB) Baixado 1007 vezes


Guima
Consultor
Consultor
Mensagens: 242
Registrado em: Sex Out 30, 2009 6:10 am

Re: Personalizando o Formulário 1ª, 2ª, 3ª e 4ª partes

Mensagem por Guima »

Parabéns Alex Sandro. Excelentes exemplos, e como disse o Tomás, nunca sabemos quando iremos precisar. Vale a pena guardar o exemplo no acervo.

Abraços


Maykon Soares
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Ter Set 13, 2016 11:06 am

Re: Personalizando o Formulário 1ª, 2ª, 3ª e 4ª partes

Mensagem por Maykon Soares »

Pessoal, fiz o dowload dos arquivos e coincidentemente estavam todos corrompidos, alguém teve a mesma experiência? Não faço a minima idéia sobre o que poderia ser, alguém poderia me ajudar?.


esxquilo
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Dom Jul 09, 2017 3:14 am

Re: Personalizando o Formulário 1ª, 2ª, 3ª e 4ª partes

Mensagem por esxquilo »

Eu tambem baixei e deu corrompido.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder