Como já tive muitos problemas em relação a configurações de vídeo, resolvi criar este mini tutorial para que possa ajudar quem também estiver com problemas ou se interessar pelo assunto. Nota: Os códigos que estão neste documento não
são
de minha autoria. Apenas as peguei na Internet em sites de programação,
inclusive aqui no ActiveDelphi e adaptei conforme minha necessidade. Todo os
direitos autorais estão reservados aos seus autores e sites originais em que
foram publicados.
Função Set Screen Resolution. Por padrão,
não existe no delphi uma função capaz
de alterar a resolução de vídeo, portanto, você irá precisar
dela mais tarde. Faça o seguinte código na seção implementation (não
esqueça
de declarar a unit ShellApi na seção uses):
function SetScreenResolution(Width, Height: integer): Longint;
var
DeviceMode: TDeviceMode;
begin
with DeviceMode do
begin
dmSize := SizeOf(TDeviceMode);
dmPelsWidth := Width;
dmPelsHeight := Height;
dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
end;
Result := ChangeDisplaySettings(DeviceMode, CDS_UPDATEREGISTRY);
end;
Declare as seguintes variáveis globais:
AuxWidth : integer;
AuxHeight: integer;
No evento OnCreate do Form principal, coloque o seguinte código:
procedure TForm1.FormCreate(Sender: TObject);
var
Mens: string;
begin
//Desabilita o botão fechar da barra de títulos
EnableMenuItem(GetSystemMenu(handle, False), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
//se já está em 1024 x 768, alimenta as variáveis
if (Screen.Width = 1024) and (Screen.Height = 768) then
begin
AuxWidth := 1024;
AuxHeight := 768;
end;
//se a resolução é diferente de 1024 por 768
if (Screen.Width <> 1024) and (Screen.Height <> 768) then
begin
//captura a resolução atual, para restaurar na saída do programa
Auxwidth := Screen.Width;
Auxheight := Screen.Height;
//prepara mensagem ao usuário
Mens := 'O Programa ' + Application.Title + ' irá ajustar sua resolução de vídeo' +
' automaticamente para' + #13 + '1024 X 768, para uma melhor visualização,' +
' mas não se preocupe pois, ao termino de uso,' + #13 + ' ele retornará' +
' sua resolução novamente. Muito obrigado...';
//mostra mensagem
MessageBox(Self.Handle, PChar(Mens), 'Ajuste de Vídeo', MB_OK + MB_ICONWARNING);
//altera a resolução
SetScreenResolution(1024, 768);
end;
end;
Agora coloque um botão "sair" ou no evento OnClose do
seu form, faça o seguinte código:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//se já está em 1024x768, fecha a aplicação
if (Screen.Width = 1024) and (AuxWidth = 1024) and
(Screen.Height = 768) and (AuxHeight = 768) then
Application.Terminate;
//se está em 1024x768 e a Resolução Antiga era diferente disso
if (Screen.Width = 1024) and (AuxWidth <> 1024) and
(Screen.Height = 768) and (AuxHeight <> 768) then
//ao clicar no OK da Mensagem, volta a resolução antiga
if (Application.MessageBox('Voltando para sua resolução antiga...',
'Ajustes Automaticos', MB_OK + MB_ICONWARNING) = ID_OK) then
SetScreenResolution(AuxWidth, AuxHeight);
Application.Terminate;
end;
Agora é só testar! Pode ser que alguém já tenha
feito isto mas de maneira diferente, porém
foi a melhor forma que achei para resolver este problema.
Volto a ressaltar que não fui eu que fiz os códigos, não
por falta de capacidade, apenas fui coletando dicas aqui e ali e fiz algumas
alterações, adaptando-as para resolver meu problema. Insisto em dizer isto para
que os autores das dicas não possam dizer que sou adepto do CTRL+C
e CTRL+V e estou tentado ganhar créditos. Infelizmente foram
tantas matérias pesquisadas que não lembro o nome dos autores.
Espero que tenha ajudado alguém.
Muito obrigado!
Ricardo de Abreu -
Analista de Suporte.
Contatos:
rabreu@bredasjc.com.br
ricardodeabreu@hotmail.com
|