Fechar

sexta-feira, 26 de novembro de 2010


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:

Anônimo disse...

Muito bom o post!!!

Obrigado

Anônimo disse...

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

Mais Populares

Seguidores

Є & V. Copyright 2011 Evaldo Avelar Marques - sprintrade network