Código
Autor:Ricardo de Abreu
Como tive muitos problemas em relação a configurações de vídeo resolvi criar este mini tutorial para que possam ajudar a quem estiver interessado .
Nota : Estas dicas que estão neste documento não são minhas apenas peguei na Internet e sites de programação e adaptei conforme minha necessidade sendo assim cheguei em um padrão que qualquer pode adaptar seguindo o modelo que fiz
Set Screen Resolution
No delphi por padrão não existe esta função você irá precisar dela mais tarde , declare na USES logo abaixo de {$R *.dfm}:
Não esqueça de usar a biblioteca do windows : Shellapi.
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 :
oldwidth:integer;
OldHeight :integer;
Auxwidth:integer;
Auxheight:integer ;
No evento On Create do Form principal ponha o seguinte código :
var Mens: String;
begin
EnableMenuItem(GetSystemMenu(handle, False), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
begin
if (Screen.Width =1024) and (Screen.Height = 768) then
begin
Auxwidth :=1024;
Auxheight :=768;
end;
if (Screen.Width <> 1024) and (Screen.Height <> 768) then
begin
OldWidth := Screen.Width;
OldHeight := Screen.Height;
Auxwidth:=oldwidth;
Auxheight:=OldHeight;
Mens := 'O Programa "Seu programa -"irá ajustar sua resolução de vídeo para 1024 X 768'+#13;
Mens := Mens + 'automaticamente para uma melhor visualisação, mas não se preocupe pois ao termino de uso ,' + #13;
Mens := Mens + ' ele retornará sua resolução novamente. Muito obrigado...';
MessageBox(Self.Handle, PChar(Mens), 'Ajuste de Vídeo', MB_OK + MB_ICONWARNING);
SetScreenResolution(1024, 768);
end;
end;
end;
Explicando :
Desenvolvi este programa em uma resolução 1024X768 (tamanho do Forms) mas se por exemplo o usuário estiver com uma resolução diferente seja ele maior ou menor que 1024 ele seta para 1024 e quando ele encerra o programa ele volta para resolução anterior :
Detalhes:
Ao criar o form o código faz a seguinte verificação ,
As variaveis OldWidth e OldHeight recebem a resolução da tela atual depois testa as seguintes condições :
“Se for 1024 as variáveis auxiliares Auxwidth e Auxheight recebem as resolução 1024 X768 “(Isto será usado com base na hora de fechar o form logo abaixo ).
Agora “Se for diferente de 1024 as as variáveis auxiliares Auxwidth e Auxheight recebem agora o que as variáveis OldWidth e OldHeight ou seja a resolução de tela atual .
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Agora coloque um botão “sair “ ou no evento OnClose do seu form e ponha o seguinte código :
If (Screen.Width = 1024)and(Auxwidth=1024)and(Screen.Height = 768)and(Auxheight=768) then
begin
Application.Terminate;
end;
If (Screen.Width = 1024)and(Auxwidth<>1024)and(Screen.Height = 768)and(Auxheight<>768) then
if (Application.MessageBox('Voltando para sua resolução antiga...','Ajustes Automaticos',MB_OK +MB_ICONWARNING)=ID_OK )then
Begin
OldWidth := 800 ;
OldHeight := 600;
SetScreenResolution(Auxwidth, Auxheigth);
end;
Application.Terminate;
end;
Explicando :
Ao fechar o form o código verifica a resolução atual e verifica também as variáveis auxiliares – Auxwidth e AuxHeight
Detalhes
Após verificar a resolução de tela atual e as variáveis ele testa as seguintes condições :
“ Se a resolução e a variáveis auxiliares forem iguais ele termina a aplicação
“Se a resolução for 1024 X768 (que o próprio programa determinou) e as variáveis forem diferentes ele volta para a resolução antiga ou seja volta para a resolução que estava antes de abrir o programa .
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Pode ser que alguém já tenha feito de forma diferente porém foi a melhor forma que achei para resolver este problema .
Volto a resaltar que não fui eu que fiz estas dicas ,não por falta de capacidade , apenas fui coletando dicas ali,aqui e alterei algumas em certas tive que mudar o código adaptando assim de um melhor maneira para resolver meu problema .
Insisto em dizer isto para que os autores das dicas possam dizer que estou sendo adepto do CTRL+c e CTRL +v , e tentado ganha créditos .(Foram tantos que pesquisei que não lembro o nome de todos )
Agradeço ao conteúdo dos seguintes sites :
www.planetadelphi.eti.br
www.activedelphi.com.br
Espero que tenha ajudado alguém
Muito obrigado
Ricardo de Abreu
Analista de Suporte
rabreu@bredasjc.com.br
ricardodeabreu@hotmail.com
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009