Jump to content
Fórum Script Brasil
  • 0

Dúvida com alteração de brilho da tela


Roodrigo_OM

Question

Olá, bem, sou meio novo no delphi, 1º ano de escola técnica ainda, mas resolvi fazer por conta própria um projeto, onde haveria um circuito com LDR integrado, e porta paralela, com 3 pinos ligados. No começo eu iria só imprimir uma mensagem dizendo qual o nível de luminosidade do ambiente naquele momento, mas achei que era pouca coisa, e quis tentar fazer com que o brilho da tela mudasse conforme a luminosidade (Valor do inportb($379)) recebido.

Como o que estou aprendendo de delphi é bem básico ainda, toda a estrutura de form e porta paralela eu fiz de curioso, estudando em fóruns, sites etc, foi quando resolvi perguntar pra 2 dos meus professores se seria possível mudar o brilho da tela pelo delphi, e ambos responderam que não, mas disseram pra eu fazer um projeto que iria propor essa idéia, o controle do brilho como configuraçao num sistema. Eu tenho 3 prints da mesma tela, com brilho diferente (uma escura, outra normal e uma com brilho alto) e consegui fazer com que elas mudassem certinho de acordo com o valor que eu recebesse.

A questão é, encontrei uma funçao do Windows 7 chamada Brilho Adaptavel, que faz exatamente o que eu queria que meu programa fizesse, mudar o brilho da tela de acordo com a luminosidade, só que não faço a mínima idéia de como eles fizeram isso, e seria uma enorme alavancada no projeto se eu conseguisse fazer isso. Outra alternativa que pensei, porém não sei como usar no código, é como o programa DimScreen faz, pelo que eu entendi e testei, ele só escurece a tela, e esse nivel de "escuridão" é controlado em porcentagem tipo 10%, 20%, 50%, 100%, e queria saber se tem como eu fazer algo parecido no meu programa, ou se eu seria capaz de controlar o DimScreen automaticamente pelo meu programa para que ele escurecesse a tela dependendo da luminosidade.

Uso Delphi 7, segue o código do meu programa. Quaisquer erros por favor me avisem, fiz tudo sozinho sem ter aprendido na escola ainda, então se tiver algo que eu possa melhorar, ficaria muito feliz se me apontassem, Obrigado galera.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons, jpeg, shellapi;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    Leds: TLabel;
    StaticText1: TStaticText;
    Label1: TLabel;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Timer2: TTimer;
    Button2: TButton;


    procedure Timer1Timer(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

 private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1; trocou:boolean; a,b:integer;

implementation
 function inportb(EndPorta:integer):byte stdcall; external 'inpout32.dll' name 'Inp32';
procedure outportb(EndPorta:integer;Valor:integer); stdcall; external 'inpout32.dll' name 'Out32';
{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);

begin
edit1.Text  := IntToStr( inportb($379) );
a := inportb($379);

if (b<>a) then trocou:=false;

 if (a = 127) and (trocou=false) then
 begin
 edit2.text := ('Iluminação Baixa');
 Image3.Picture.LoadFromFile(GetCurrentDir() + '\Print Tela\Brilho Baixo2.jpeg');
 trocou:=true; {pino 10}
 end

else if (a = 63) and (trocou=false) then
begin
edit2.text :=('Iluminação Ideal'); {pino 11}
Image3.Picture.LoadFromFile(GetCurrentDir() + '\Print Tela\Brilho Normal2.jpeg');
trocou:=true;
end

 else if (a = 31) and (trocou=false) then
 begin
 edit2.text:=('Iluminação Excessiva'); {pino 12}
 Image3.Picture.LoadFromFile(GetCurrentDir() + '\Print Tela\Brilho Alto2.jpeg');
 trocou:=true;
 end

else if  (a = 121) and (trocou=false) then
begin
edit2.Text:=('Placa Desconectada');
Image3.Picture.LoadFromFile(GetCurrentDir() + '\Print Tela\Brilho Normal2.jpeg');
trocou:=true;
end

b:=a;

end;

//Liga o timer e define trocou para false//

procedure TForm1.Image1Click(Sender: TObject);
begin
Timer1.enabled:=true;
trocou:=false;
end;

//Desliga o timer//

procedure TForm1.Image2Click(Sender: TObject);
begin
Timer1.Enabled:=false;
edit1.Text:='Clique em Iniciar';
edit2.text:=('');
Image3.Picture.LoadFromFile(GetCurrentDir()+'\Print Tela\Brilho Normal2.jpeg');
end;

//Pergunta se o usuário quer entrar no site//

procedure TForm1.FormCreate(Sender: TObject);
begin
if Application.MessageBox('Deseja entrar no nosso site?','', mb_iconquestion + mb_yesno) = idYes then
ShellExecute(Handle, nil, 'J:\Programa Lumus - FUCKING FINISHED MOTHERFUCKER AW YEAH\site projeto\index.html' , nil, nil, SW_SHOWNORMAL)
else;
ShowWindow(Handle, SW_SHOWMAXIMIZED);
end;

end.

Edited by Roodrigo_OM
Link to comment
Share on other sites

Recommended Posts

  • 0

Achei o seu projeto legal ....

a := inportb($379);

se os valores de ( a ) estão entre 0 e 255, depois passo para voce um exemplo do uso de uma API do windows chamada:

SetDeviceGammaRamp ( controla o brilho do monitor - placa de video )

OBS: voce não vai precisar usar figuras, o proprio monitor vai ajustar automaticamente o brilho da tela, dependendo do valor atribuido a variavel a.

caso queira incrementar ainda mais o seu projeto, veja tambem

http://www.efg2.com/Lab/Library/Delphi/Graphics/Color.htm

PS: resolvi perguntar pra 2 dos meus professores se seria possível mudar o brilho da tela pelo delphi, e ambos responderam que não

Diga a seus professores que é possivel sim mudar o brilho, contraste e cores do monitor atraves do delphi

abraço

Link to comment
Share on other sites

  • 0

Bom, eu faço curso de Informática lá, então não entendo taaaanto de eletrônica, e um professor do curso de eletrônica que me ajudou a montar, mas pelo que entendi, o circuito tem o CI LM339, com os devidos cabos de alimentação e o ldr ligados.

Nesse circuito, tem 3 Trimpots (potênciometros) e em um outro lado da placa (Placa universal infelizmente, então ela meio que foi dividida em dois cortando uma trilha) tem 3 opto-acopladores (Para fototransistores) e neles estão ligados os pinos 10, 11 e 12 da porta paralela.

Tipo, quando eu aciono o programa, o valor que eu recebo depende da quantidade de luz que eu estiver recebendo, mas o que eu planejo é receber, quando eu inicio o programa, o valor de luminosidade média, no caso 63 (Ontem dei uma ajeitada nos Trimpots pois tinha um pequeno bug, e recebi valores novos, mas agora perfeitamente coordenados como eu queria - Depois atualizo os valores no meu código la em cima para como está agora).

E como fiz uma pequena casa de madeira, com uma cortina e uma lâmpada incandescente ligada num dimmer, o LDR não vai pegar muita "interferência" de luz do ambiente ao redor, só da lâmpada dessa casinha de madeira, por isso que provavelmente eu vo iniciar o programa com a lâmpada ligada no médio e receber o valor de luminosidade média, 63.

E assim, pela distância que a placa fica da lâmpada e ângulo, o único jeito que eu achei de receber o valor de luminosidade baixa, fosse quando o LDR acusasse 127 que é o valor que recebo quando não tem cabo nenhum de porta paralela ligado no computador, ou quando a placa ta sem fonte de alimentação etc, mas pelos meus testes não atrapalhou em nada

Ah, e uso Windows 7 x64 aqui para fazer o programa, mas o computador que eu vou usar pro projeto é windows XP, então não sei se eu conseguirei testar agora se a biblioteca da função for diferente nos dois sistemas etc já que o computador do projeto é de um amigo meu, mas segunda, ou então amanhã (com MUITA sorte, hoje) eu posso testar no dele.

Abraços.

Edited by Roodrigo_OM
Link to comment
Share on other sites

  • 0

pelo que eu entendi, voce quer demonstrar que alterando o valor da luminosidade atraves do trimpot, voce quer que o programa altere a luminosidade do monitor ( tela ) correto ?

estudei eletronica anos atraz, por isso sei o que voce está dizendo... na verdade somente um LDR é necessário

como eu disse o delphi pode controlar o brilho o contraste e até a matiz de cores do monitor de video ( isso é feito via API do windows )

já que o seu circuito está funcionando, preciso que voce me passe os valores minimo e maximo recebidos da variação do LDR pela porta paralela ( ou seja , sem luz e com a luz no maximo )

ex: 0 - 127 ou 0 - 255

dependendo dessa variação, o programa vai ajustar o brilho na tela automaticamente

abraço

Link to comment
Share on other sites

  • 0

Não, tipo, o Trimpot é só pra ajustar a "tolerância" de luminosidade, por exemplo, o trimpot é uma posiçao, ele recebia 63 (luminosidade média) até quando eu botava a lâmpada quase em cima do LDR, ai ajustando ele eu recebo luminosidade média, baixa, alta certinho. Então eu receberia diferentes niveis da luminosidade dependendo do quanto eu rotacionasse o dimmer da lâmpada incandescente, os Trimpots vão estar sempre na mesma posiçao agora.

Quando eu desligo a lâmpada, eu recebo 127, que seria a luminosidade baixa.

Quando eu ligo a lâmpada levemente, só dando uma clareada, eu recebo 63, que seria luminosidade média.

Quando eu ligo a lâmpada no máximo, eu recebo 31, que seria Luminosidade Alta.

Só recebo esses 3 mesmo.

E como funcionaria esse SetDeviceGammaRamp? É uma biblioteca específica, tem alguma DLL que eu precisaria baixar, porque não entendi muito bem o funcionamento disso :s

Edited by Roodrigo_OM
Link to comment
Share on other sites

  • 0

ficaria assim:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
  ScrollBar1: TScrollBar;
    Edit1: TEdit;
    Timer1: TTimer;
  procedure ScrollBar1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TGamma = packed record
  Vermelho:   array[0..255] of Word;
  Verde: array[0..255] of Word;
  Azul:  array[0..255] of Word;
end;

var
  Form1: TForm1;
  a : integer = 0;
implementation

{$R *.dfm}


uses Math;

function inportb(EndPorta:integer):byte stdcall; external 'inpout32.dll' name 'Inp32';

procedure outportb(EndPorta:integer;Valor:integer); stdcall; external 'inpout32.dll' name 'Out32';

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;


{procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
   // testar usando o componente ScrollBar1
   // min = 0 e max = 255
   SetBrilhoMonitor(ScrollBar1.Position);
   Edit1.Text := inttostr(ScrollBar1.Position);
end; }

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   // Timer1.Interval = 1000
   edit1.Text  := IntToStr( inportb($379) );
   a := inportb($379);
   SetBrilhoMonitor(a);
end;

end.

teste o programa, e verá que conforme voce aumenta a luminosidade da lampada, o brilho da tela diminui e vice versa

abraço

Link to comment
Share on other sites

  • 0

Dei uma improvisada aqui e consegui testar o que você mandou, e deu tudo certo, mas só uma pergunta: A scrollbar só vai até 100 mesmo? Não tem como passar? porque o a tela aqui que eu improvisei o brilho era maior, ai fui testar ficou mais escurinho e não volta mais HUAHSUAHUSHAUSHUA.

E também na hora de apresentar o programa, queria tentar pôr um brilho bem alto quando eu recebesse 31 (Iluminaçao alta), mas se não der não tem problema, faço uns ajustes e fica certinho.

Edit: Consegui mudar essa tolerância de brilho modificando o

Value := Min(Round(i * (brilho + 128) / 255), 255);
Para
Value := Min(Round(i * (brilho + 200) / 255), 255);

Mas ainda assim não tem uma diferença muito absurda do ponto 0 pro 100. Acho que quando botei as prints exagerei muito na diferença e o ideal seria como tá o programa agora, mas só por curiosidade, tem como "aumentar" essa "diferença" de brilho do ponto 0 e 100, tipo, o 0 BEM escuro, o 50 normal como a maioria usa e o 100 BEM claro? Se eu tirar a linha de código que faz com que ele conte o brilho a partir do anterior, será que funciona como eu quero?

Abraços

Edited by Roodrigo_OM
Link to comment
Share on other sites

  • 0
ai fui testar ficou mais escurinho e não volta mais HUAHSUAHUSHAUSHUA.

A scrollbar só vai até 100 mesmo?

voce viu o código ?

// testar usando o componente ScrollBar1

// min = 0 e max = 255

na propriedade max do ScrollBar1 voce coloca 255 ( limite para o brilho )

outra coisa: o brilho da tela vai permancer no valor que voce colocar, mesmo fechando o programa .

(a menos que voce defina um valor padrão antes de fechar o programa )

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   ScrollBar1.Position := 60;
end;
E também na hora de apresentar o programa, queria tentar pôr um brilho bem alto quando eu recebesse 31 (Iluminaçao alta)
como voce pode perceber atravez do valor do Edit, valor menor ( menos brilho ) valor maior ( mais brilho ) então basta inverter a leitura dos valores e iniciar com
procedure TForm1.FormActivate(Sender: TObject);
begin
   ScrollBar1.Position := 255;
end;
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
   // testar usando o componente ScrollBar1
   SetBrilhoMonitor(ScrollBar1.Position);
   Edit1.Text := inttostr(255-ScrollBar1.Position); 
end;

{procedure TForm1.Timer1Timer(Sender: TObject);
begin
   // Timer1.Interval = 1000
   edit1.Text  := IntToStr( inportb($379) );
   a := inportb($379);
   SetBrilhoMonitor(255-a);
end;  }

abraço

Link to comment
Share on other sites

  • 0

para ficar mais correto com o uso do ScrollBar seria:

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
   // testar usando o componente ScrollBar1
   SetBrilhoMonitor(255-ScrollBar1.Position);
   Edit1.Text := inttostr(ScrollBar1.Position);
end;

{procedure TForm1.Timer1Timer(Sender: TObject);
begin
   // Timer1.Interval = 1000
   edit1.Text  := IntToStr( inportb($379) );
   a := inportb($379);
   SetBrilhoMonitor(255-a);
end;  }

procedure TForm1.FormActivate(Sender: TObject);
begin
   ScrollBar1.Position := 1;  ///  brilho maximo
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   ScrollBar1.Position := 180;  ///  brilho padrão ao sair
end;

abraço

Link to comment
Share on other sites

  • 0

Opa, consegui chegar em casa mais cedo e fiz todos os ajustes no programa, e tenho 99,9% de certeza que deu certo, é porque meu computador não tem entrada pra porta paralela e a placa não está comigo, está com meu amigo, mas fiz uns testes mudando valores, etc, e parece que está tudo certo.

Só mais uma pergunta: Adicionei essa linha de código no programa:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SetBrilhoMonitor(100);
  ScrollBar1.Position := 100; 
end;

Mas ela simplesmente não funciona, não sei se está certa, mas o brilho da tela não volta ao normal quando eu fecho o programa.

EDIT: Agora que vi seu último post, pelo jeito acho que botei o código certo, mas ainda assim não está funcionando

Edited by Roodrigo_OM
Link to comment
Share on other sites

  • 0

Não altere esse código

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;
e no seu código mude
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //SetBrilhoMonitor(100);  tire esse comando
  ScrollBar1.Position := 100; 
end;

aqui esta funcionando 100 % ...

abraço

Link to comment
Share on other sites

  • 0

O código final ficou assim:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons, jpeg, shellapi;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    Leds: TLabel;
    StaticText1: TStaticText;
    Label1: TLabel;
    Image1: TImage;
    Image2: TImage;
    Timer2: TTimer;
    Button2: TButton;
    ScrollBar1: TScrollBar;

    procedure Timer1Timer(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TGamma = packed record
  Vermelho:   array[0..255] of Word;
  Verde: array[0..255] of Word;
  Azul:  array[0..255] of Word;
end;

var
  Form1: TForm1; trocou:boolean; a,b:integer;

implementation
uses Math;
function inportb(EndPorta:integer):byte stdcall; external 'inpout32.dll' name 'Inp32';
procedure outportb(EndPorta:integer;Valor:integer); stdcall; external 'inpout32.dll' name 'Out32';
{$R *.DFM}


//Configuração do Brilho e afins//

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;


//ScrollBar
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
   // testar usando o componente ScrollBar1
   // min = 0 e max = 255
   SetBrilhoMonitor(ScrollBar1.Position);
   Edit1.Text := inttostr(ScrollBar1.Position);
end;


//Timer
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text:=IntToStr( inportb($379) );
a := inportb($379);

 if (a = 127) then
 begin
 edit2.text := ('Iluminação Baixa');
 SetBrilhoMonitor(35);
 ScrollBar1.Position := 35;
 trocou:=true; {pino 10}
 end

else if (a = 63) then
begin
edit2.text :=('Iluminação Ideal'); {pino 11}
SetBrilhoMonitor(100);
ScrollBar1.Position := 100;
trocou:=true;
end

 else if (a = 31) then
 begin
 edit2.text:=('Iluminação Excessiva'); {pino 12}
 SetBrilhoMonitor(185);
 ScrollBar1.Position := 185;
 trocou:=true;
 end

else if  (a = 121) then
begin
edit2.Text:=('Placa Desconectada');
SetBrilhoMonitor(100);
ScrollBar1.Position := 100;
end;

end;

//Liga o timer e define trocou para false//

procedure TForm1.Image1Click(Sender: TObject);
begin
Timer1.enabled:=true;
end;

//Desliga o timer//
procedure TForm1.Image2Click(Sender: TObject);
begin
Timer1.Enabled:=false;
edit1.Text:='Clique em Iniciar';
edit2.text:=('');
SetBrilhoMonitor(100);
end;

//Pergunta se o usuário quer entrar no site//

procedure TForm1.FormCreate(Sender: TObject);
begin
if Application.MessageBox('Deseja entrar no nosso site?','', mb_iconquestion + mb_yesno) = idYes then
ShellExecute(Handle, nil, 'J:\Programa Lumus - FUCKING FINISHED MOTHERFUCKER AW YEAH\site projeto\index.html' , nil, nil, SW_SHOWNORMAL)
else;
ShowWindow(Handle, SW_SHOWMAXIMIZED);
end;

//Mudar brilho ao fechar programa
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ScrollBar1.Position := 100;  ///  brilho padrão ao sair
end;


end.

Mas ainda assim o FormClose ainda não muda o brilho quando fecha o programa, não sei porque, por isso mandei o código todo, acho que ajustei alguma coisa errada nele e por isso não funciona.

Link to comment
Share on other sites

  • 0

o ideal, como falei, é que voce conseguisse o valor de ajuste do trimpot em 255 para o LDR ( creio que se voce mudar o tipo do LDR voce alcança esse valor )

no seu código

//Timer
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Edit1.Text:=IntToStr( inportb($379) );
   a := inportb($379);

   if (a >= 127) then
   begin
      edit2.text := ('Iluminação Baixa');
      ScrollBar1.Position := a;
      trocou:=true; {pino 10}
   end

   else if (a >= 60) or ( a <= 70 then
   begin
      edit2.text :=('Iluminação Ideal'); {pino 11}
      ScrollBar1.Position := a;
      trocou:=true;
   end

   else if (a <= 31) then
   begin
      edit2.text:=('Iluminação Excessiva'); {pino 12}
      ScrollBar1.Position := a;
      trocou:=true;
   end

   else if  (a = 121) then
   begin
      edit2.Text:=('Placa Desconectada');
      ScrollBar1.Position := a;
   end;

end;

//Liga o timer e define trocou para false//

procedure TForm1.Image1Click(Sender: TObject);
begin
   Timer1.enabled:=true;
end;

//Desliga o timer//
procedure TForm1.Image2Click(Sender: TObject);
begin
   Timer1.Enabled:=false;
   edit1.Text:='Clique em Iniciar';
   edit2.text:=('');
   ScrollBar1.Position := 100;
end;

//Pergunta se o usuário quer entrar no site//

procedure TForm1.FormCreate(Sender: TObject);
begin
if Application.MessageBox('Deseja entrar no nosso site?','', mb_iconquestion + mb_yesno) = idYes then
   ShellExecute(Handle, nil, 'J:\Programa Lumus - FUCKING FINISHED MOTHERFUCKER AW YEAH\site projeto\index.html' , nil, nil, SW_SHOWNORMAL)
else;
   ShowWindow(Handle, SW_SHOWMAXIMIZED);
end;

//Mudar brilho ao fechar programa
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ScrollBar1.Position := 100;  ///  brilho padrão ao sair
  ScrollBar1Change(Sender);  //  acrescente este comando se não acontecer nada
end;


end.

OBS: com esse seu código voce esta limitando o brilho da tela em 3 posições somente e não a todas as variações possiveis ) de 0 a 255

abraço

Link to comment
Share on other sites

  • 0

Sim sim, mas a intenção era essa, limitar a 3 níveis somente (Baixa, Média e Alta). Eu não achei que teria como usar todas as variações e ainda estava na idéia de usar os prints, por isso limitei a esses 3 quando falei com o professor. Eu até mudaria a placa, mas como pediram pra eu apresentar o programa segunda-feira, prefiro deixar assim mesmo.

Tudo está funcionando certinho de acordo com os testes que eu fiz aqui, e depois testarei no computador do meu amigo. Só mais uma coisa: Será que botar o programa em Windows XP dará algum problema de compatibilidade? Acredito que não, mas sempre fico preocupado com isso...

Obrigado Jhonas, muito, muito obrigado mesmo.

Link to comment
Share on other sites

  • 0

Agora me surgiu outra dúvida, que já tentei pensar numa solução mas não consegui, que seria o programa mostrar o nível de brilho antes deu mudar ele, porque como ele ta agora, não mostra nada, só mostra quando eu mexo na scrollbar, e ai ele começa em 0 ou outro numero da posiçao na scrollbar.

Tinha pensado em mudar essa parte:

Label3.Caption := inttostr(ScrollBar1.Position);
Para:
Label3.Caption := inttostr(SetBrilhoMonitor);

Mas como esperado, não funciona, não sei se o problema é na conversão para string ou se não dá pra usar o SetBrilhoMonitor nesse caso. Por que fui testar em outros PCs e eu acabo me perdendo na quantidade de brilho que havia antes de eu mexer no ScrollBar e se outras pessoas fossem testar, também poderiam se perder. Pensei também em usar a Variável DC, mas eu recebo um número enorme :s

Link to comment
Share on other sites

  • 0

Acho que eu teria que deixar o

Label3.Caption := inttostr(ScrollBar1.Position);
E tentar fazer de um jeito que a ScrollBar iniciasse na posição que ela estava quando o programa foi fechado, ou inicie na posição correspondente ao brilho da tela da pessoa, sem precisar de uma execução anterior como na primeira opção, mas não faço a mínima idéia de como fazer nenhuma dessas duas, sei que na primeira eu teria que ter um arquivo externo pra salvar essa configuração, certo? Mas na segunda opção parece ser mais fácil, só não tenho muita certeza de qual variavel usar, e como setar o ScrollBar1.Position sem criar conflito com o
SetBrilhoMonitor(ScrollBar1.Position);

Abraço

Edited by Roodrigo_OM
Link to comment
Share on other sites

  • 0
Olá, bem, sou meio novo no delphi

amigo, percebeu que depois que voce consegue fazer o que quer no programa, as firulas ( incrementos ) começam a

povoar as suas ideias ?

entretanto sem o minimo de experiencia ou conhecimento, voce não consegue usar os inumeros recursos que a linguagem te oferece.

veja que:

// Aplicar a nova calibragem para o monitor
DC := GetDC(0);
SetDeviceGammaRamp(DC, gama); 
ReleaseDC(0, DC);
como se faria para chamar a gama da tela num primeiro momento ? o comando a ser usado seria o : GetDeviceGammaRamp // obter as informações sobre o brilho atual na tela então essa vou deixar para voce pesquisar e pensar um pouco. ========================================================= quanto a sua idéia no post acima, ela tambem é válida ... outra sugestão que é mais simples seria, manter um valor padrão ao sair do programa
//Mudar brilho ao fechar programa
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ScrollBar1.Position := 160;  ///  brilho padrão ao sair
  ScrollBar1Change(Sender);  //  acrescente este comando se não acontecer nada
end;

abraço

Link to comment
Share on other sites

  • 0

Meu maior problema é usar esse GetDeviceGammaRamp e o SetDeviceGammaRamp, porque eu me enrolei um pouco pra entender como funcionava essa parte do código, mas eu não consigo pensar em um jeito de transformar o GetDeviceGammaRamp em um valor que eu possa manipular, sei que não é assim, mas sempre que eu tento utilizar ele numa label, por exemplo Label3.Caption:=(GetDeviceGammaRamp) ele da erro de not enough actual parameters.

Se eu tentar jogar ele em um scroll, será que funciona?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...