Spoock 0 Denunciar post Postado Julho 22, 2011 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
wllf 2 Denunciar post Postado Julho 22, 2011 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
Spoock 0 Denunciar post Postado Julho 22, 2011 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
wllf 2 Denunciar post Postado Julho 22, 2011 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
Spoock 0 Denunciar post Postado Julho 22, 2011 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