Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Spoock

Alterar Resolução

Recommended Posts

Olá pessoal, andei pesquisando pela internet mas todos os códigos estão incompletos ou não funcionam, consegui modificar um a ponto do aplicativo alterar a resolução automaticamente para 1024x768 no OnCreate, funcionou perfeitamente. Mas o código que era para armazenar os dados da resolução original do usuário não funciona, ou seja, o computador continua com a resolução 1024x768 ao invés de voltar a resolução normal da maquina do cliente, no meu caso 1600x900. Alguém sabe como resolver isso? Peguei o código em um site gringo, aterei apenas o nome das Functions e a MessageDLG, o resto está idêntico.

 

function MudaResolucao(X, Y, a , b: word): Boolean;
var lpDevMode: TDeviceMode;
begin
 if EnumDisplaySettings(nil, 0, lpDevMode) then
 begin
   lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
   a:= lpDevMode.dmPelsWidth;
   b:= lpDevMode.dmPelsHeight;
   lpDevMode.dmPelsWidth := x;
   lpDevMode.dmPelsHeight:= y;
   Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
 end;
end;

function NormalizaResolucao(a , b: word): Boolean;
var lpDevMode: TDeviceMode;
begin
 if EnumDisplaySettings(nil, 0, lpDevMode) then
 begin
   lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
   lpDevMode.dmPelsWidth := a;
   lpDevMode.dmPelsHeight:= b;
   Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
 end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 NormalizaResolucao(a , B);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  If (Screen.Width <> 1024)and(Screen.Height <> 768) then
  if (messageDlg('Este programa foi desenvolvido em 1024 x 768. Ele vai rodar normalmente nas suas confirações, mas não vai ficar posicionado corretamete em seu monitor! Deseja Alterar suas confirações de vídeo agora?',
      mtConfirmation, [mbYes, mbNo], 0)=mrYes) then
  MudaResolucao(1024, 768, a , B);
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega à algum tempo atrás usei um função semelhante mas não foi muito longe, não seria melhor voltar a resolução antiga com as mesma função.

 

Estou falando isso sem testar seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até daria certo, mas cada usuário utiliza uma resolução, no caso se eu setar a resolução do meu computador (1600x900) um usuário que utilizar a resolução 1280x720, por exemplo, poderá ter erros e até uma reinicialização dependendo da placa de vídeo, sem contar que não voltaria para resolução padrão automaticamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for só esse o problema, captura a resolução atual e guarda em uma variável global, quando finalizar a aplicação é só pegar o valor da variável, sempre lembrando que variáveis declaradas como globais mantém seu valores até o finalização da aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado wllf, seu comentário ajudou! Declarei as variáveis A e B como Private do tipo Word e declarei uma Uses que o site gringo não falou que era necessário mas é ela que ajuda na captura de resolução, é a ComObj.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.