Como configurar o brilho do monitor no Delphi/Lazarus em ambientes Windows?
Usar o computador a noite é uma grande problema para os olhos, ao ter contado com a tela do computador a visão acaba ficando ofuscada pelo brilho intenso da tela e até que possamos encontrar os controles do monitor para ajustar o brilho ideal o estrago já foi feito. Já que somos amantes da programação e temos ferramentas ao nosso favor, porque então não criar uma aplicação que controle automaticamente o brilho para nós?
API
O Windows disponibiliza uma API, Application Programming Interface (ou Interface de Programação de Aplicações) que permite que o usuário possa acessar os recursos do sistema de forma protegida e umas das funções dessa API é SetDeviceGammaRamp, disponível na GDI32.dll. Está função permite configurar o brilho quase que da mesma forma que no próprio monitor.
A função SetDeviceGammaRamp possui o valor de retorno booleano sendo:
- Se essa função tiver êxito, o valor de retorno é TRUE.
- Se essa função falhar, o valor de retorno é FALSE.
Os Parâmetros são
- DC - Especifica o monitor.
- Gama - Ponteiro para um buffer contendo a estrutura de calibragem a ser definido.
Programando
O primeiro passo é adicionar a unit Windows onde está declara a função e Math para os cálculos.
uses Math, Windows;
Vamos criar uma estrutura para calibrar a gamma do monitor:
TGamma = packed record
Vermelho: array[0..255] of Word;
Verde: array[0..255] of Word;
Azul: array[0..255] of Word;
end;
Agora podemos definir a função:
procedure SetBrilhoMonitor(brilho: Byte);
var
i, Value: Integer;
DC: HDC;
gama: tGamma;
begin
// Calcular a nova gama de acordo com o brilho passado
for i := 0 to 255 do
begin
Value := Min(Round(i * (brilho + 128) / 255), 255);
gama.Vermelho[i] := Value shl 8;
gama.verde[i] := Value shl 8;
gama.Azul[i] := Value shl 8;
end;
// Aplicar a nova calibragem para o monitor
DC := GetDC(0);
SetDeviceGammaRamp(DC, gama);
ReleaseDC(0, DC);
end;
Para testar você pode adicionar um TScrollBar e no evento onChange fazer:
SetBrilhoMonitor(ScrollBar.Position);
Requirementos:
Windows NT/2000/XP
Windows 95/98/Me
Biblioteca: Gdi32.dll
Referências:
http://msdn.microsoft.com/en-us/library/dd372194%28VS.85%29.aspx
Palavras Chaves: Delphi, API, Brilho, Monitor, brightness
2 comentários:
Muito bom o post!!!
Obrigado
quando eu tento alterar o monitor para um segundo monitor não funciona, exemplo
DC := GetDC(1);
SetDeviceGammaRamp(DC, gama);
ReleaseDC(1, DC);
por que?
Postar um comentário