VB6 + WINDOWS 10 ? BACKCOLOR TITLE BAR FORM

RICARDOWEB084 05/03/2024 12:34:43
#503166
Alterado em 06/03/2024 14:43:39 Windows 10, vb6

Achei em algum lugar uma forma de altertar a cor da barra de título dos forms, no entanto, o borderstyle dele precisa ser 0 (none) para funcionar, aí o botão de fechar do form não funciona.

Alguém sabe alguma forma de alterar a cor da barra de títulos de um form no Windows 10 ?

código que uso

   mSYS_cf = SetSysColors(1, COLOR_CAPTIONTEXT, vbWhite) 

     Declare Function SetSysColors Lib "user32" _
(ByVal nChanges As Long, lpSysColor As _
Long, lpColorValues As Long) As Long

Public Const COLOR_CAPTIONTEXT = 9
DJROBERTOSC 06/03/2024 16:01:48
#503168
Alterado em 07/03/2024 14:28:15
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Private Const GWL_STYLE = -16
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_COLORKEY = &H1

Private Sub Form_Load()
' Altera a cor da barra de título para vermelho
SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Or WS_CAPTION Or WS_SYSMENU
SetLayeredWindowAttributes Me.hwnd, RGB(255, 0, 0), 0, LWA_COLORKEY
End Sub
JOSE 06/03/2024 16:35:04
#503169
Oi, veja se atende, bem mais complexo:

https://leandroascierto.com/blog/barra-de-titulo-personalizada/

Testei o exemplo com Windows 11, 64 bits, tudo ok!

Aproveitando: o site tem muita informação e muita informação interessante
vale a pena dar uma olhada.
EPISCOPAL 06/03/2024 21:31:39
#503170
Resposta escolhida
Ainda não tem solução disso ..... inclusive ventilei este assunto no vbforums.com e a solução de Jose foi dada por la.

https://www.vbforums.com/showthread.php?888052-The-titlebar-with-different-colors
RICARDOWEB084 06/03/2024 22:28:53
#503171
Alterado em 06/03/2024 23:00:44
Citação:

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Const GWL_STYLE = -16Private Const WS_CAPTION = &HC00000Private Const WS_SYSMENU = &H80000Private Const WS_EX_LAYERED = &H80000Private Const LWA_COLORKEY = &H1Private Sub Form_Load() ' Altera a cor da barra de título para vermelho SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Or WS_CAPTION Or WS_SYSMENU SetLayeredWindowAttributes Me.hwnd, RGB(255, 0, 0), 0, LWA_COLORKEYEnd Sub



Funcionou parcialmente, somente a cor branca.

Muito obrigado.


Citação:

Oi, veja se atende, bem mais complexo:https://leandroascierto.com/blog/barra-de-titulo-personalizada/Testei o exemplo com Windows 11, 64 bits, tudo ok!Aproveitando: o site tem muita informação e muita informação interessantevale a pena dar uma olhada.


Esse site é sensacional, não o conhecia. Obrigado pela recomendação.

A classe que o camarada desse site colocou funciona bem.
EPISCOPAL 07/03/2024 18:11:52
#503172
Alterado em 07/03/2024 18:12:25
Citação:

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Const GWL_STYLE = -16Private Const WS_CAPTION = &HC00000Private Const WS_SYSMENU = &H80000Private Const WS_EX_LAYERED = &H80000Private Const LWA_COLORKEY = &H1Private Sub Form_Load() ' Altera a cor da barra de título para vermelho SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Or WS_CAPTION Or WS_SYSMENU SetLayeredWindowAttributes Me.hwnd, RGB(255, 0, 0), 0, LWA_COLORKEYEnd Sub




No, win11 não funciona ....
RICARDOWEB084 08/03/2024 09:01:46
#503175
Após testar a classe sugerida https://leandroascierto.com/blog/barra-de-titulo-personalizada, que é muito elegante, detectei muitos inconvenientes.
O sistema ficou "pesado", lento. O show modal 1 não funciona. Após muitos testes, abandonei a ideia.

Seguindo a sugestão de um usuário de outro fórum, eu mesmo fiz a barra de título do jeito que eu queria, contornei alguns inconvenientes como o form.move, e ficou muito elegante.
Gostei do resultado.

Grato pela contribuição de todos

FUTURA 08/03/2024 09:29:46
#503176
Ficou bacana, como vc fez ?, passa o link desse fórum q vc usou. Nos meus forms, eu deixo sem bordar e coloco uma imagem imitando a borda superior, mas perco a função de minimizar e fechar
RICARDOWEB084 08/03/2024 12:20:51
#503177

Citação:

Ficou bacana, como vc fez ?, passa o link desse fórum q vc usou. Nos meus forms, eu deixo sem bordar e coloco uma imagem imitando a borda superior, mas perco a função de minimizar e fechar


Não sei se posso divulgar outros fóruns aqui, mas foi lá no scriptbrasil (se puder, eu compartilho o link aqui)

Fiz na unha igual você rs Usei labels, frames e chamaleonButton para os botões de fechar e minimizar.
Ajustei o form_move em um módulo e só copio a barra para os demais forms, prático.

Mas a dor de cabeça continua. Se usar o form.borderstyle = 0 e o Menupopup, dá ruim, a Titlebar aparece inevitavelmente.
Estou tentando achar outra solução para o menu right click agora, não tem como usá-lo.
É o preço que se paga por não ter atualizado a linguagem né
RICARDOWEB084 08/03/2024 14:50:58
#503179
Infelizmente desisti da ideia, vou ter que trabalhar com os forms do vb mesmo.

Não consegui posicionar o objeto que substituiria o menupopup de acordo com a posição do mouse.

Vida que segue...
EPISCOPAL 08/03/2024 16:51:41
#503180
Calma ...... vamos por etapa .... o que deu errado?
Página 1 de 4 [32 registro(s)]
Tópico encerrado , respostas não são mais permitidas