|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
marcieldeg Colaborador
Registrado: Terça-Feira, 5 de Abril de 2011 Mensagens: 1054 Localização: Vitória - ES
|
Enviada: Sex Mar 18, 2022 2:03 pm Assunto: Alterar trayicon conforme tema do Windows |
|
|
Boa tarde,
Estou criando trayicons personalizados monocromáticos para seguir o padrão do Windows 10.
Como alterar o ícone de acordo com o tema do Windows? Ou seja, se a barra for clara, exibir o ícone escuro, e vice versa, conforme o Windows faz com seus ícones internos de bateria, wi-fi etc? _________________ "Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!" |
|
Voltar ao Topo |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Sex Mar 18, 2022 11:27 pm Assunto: Re: Alterar trayicon conforme tema do Windows |
|
|
marcieldeg escreveu: | Boa tarde,
Estou criando trayicons personalizados monocromáticos para seguir o padrão do Windows 10.
Como alterar o ícone de acordo com o tema do Windows? Ou seja, se a barra for clara, exibir o ícone escuro, e vice versa, conforme o Windows faz com seus ícones internos de bateria, wi-fi etc? |
Acredito que exista algum recurso da api para devolver a cor de determinado control do windows mesmo que seja a barra de tarefa.
Quanto ao saber qual icone usar mediante a uma determinada cor a resposta é bem simples
A cor deve ser convertida em tom de cinza e em seguida perguntado se o tom de cinza obtido é maior ou igual a 128, sendo então é um tema claro e deve ser usado o icone com cor escura, senão é um tema de cor escura e deve usar um icone de cor clara.
para obter um tom de cinza de um dada cor precisa possuir os rgb da mesma somado e dividodo por 3;
cor := cor_obtida;
tom_de_cinza := (getRvalue(cor)+ getGvalue(cor)+ getBvalue(cor) ) div 3;
if tom_cinza>=128
then use_icone_escuro
else use_icone_claro;
Caso não ache um recurso para obter a cor da barra de tarefa, voce pode usar o codigo do printscreen por região, assim voce printa um região pequena do desktop, muito proximo a uma região onde provavelmente possuiria a cor que vai entregar a cor do tema do windows, tipo: uma região de 40x40 pixels perto do botão iniciar ou do relógio deste print voce pode pegar um pixels e examinar a cor deste pixels levando a consideração o que foi explicado acima. _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Sáb Mar 19, 2022 1:31 am Assunto: |
|
|
Escrevi um codigo bem simples em vcl
Código: | procedure TForm1.Button2Click(Sender: TObject);
var
cor: tcolor;
tom_cinza: integer;
begin
cor := GetPixel(GetDC(0), 1, screen.Height - 1); // cor da barra de tarefa nas coordenadas informada
tom_cinza := (GetRValue(cor) + GetGValue(cor) + GetBValue(cor)) div 3; // descobrindo o tom cinza da cor buscada
Shape1.Brush.Color := cor;
if tom_cinza >= 128 then
Shape2.Brush.Color := clBlack // usar icone escuro
else
Shape2.Brush.Color := clWhite; // usar icone claro
end; |
Uma observação
Código: | // GetDC(0); -> busca o HDC do desktop (0 é seu HWND)
// GetPixel(HDC, x, y); busca o pixel da corredenada x e y do HDC |
Desta forma, para buscar um pixel de qualquer lugar do desktop basta combinar ambos em GetPixel(GetDC(0), x, y);
Dei as coordenada x = 1 e y = screen.height -1 _________________ Tudo podemos quando tudo sabemos! |
|
Voltar ao Topo |
|
|
marcieldeg Colaborador
Registrado: Terça-Feira, 5 de Abril de 2011 Mensagens: 1054 Localização: Vitória - ES
|
Enviada: Seg Mar 21, 2022 8:42 am Assunto: |
|
|
Encontrei uma forma bem simples, basta ler a chave de registro "SystemUsesLightTheme" em
Código: | Computador\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize |
Assim consigo identificar qual cor o sistema está usando e alterar o ícone de acordo.
Um problema é que não consigo fazer "a quente", alterando automaticamente se o usuário alterar as configurações do Windows, sendo necessário reiniciar a aplicação. _________________ "Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!" |
|
Voltar ao Topo |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|