|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
tiago_ws Membro Junior
Registrado: Quarta-Feira, 14 de Setembro de 2005 Mensagens: 318
|
Enviada: Sex Ago 08, 2008 1:38 pm Assunto: Ajustar Resolução de Tela. |
|
|
Estou tendo um problema no meu sistema , desenvolvo minha aplicação na resolução 1024 X 768, tenho um cliente que o micro dele não tem esta resolucao, as resoluções que ele tem é , 1280X720, 960X600, 800X600 ,
coloquei um procedimento que peguei aqui mesmo no forum mais não adiantou. O meu sistema fica na tela toda , mas dai os botões, edits, e memo que eu tenho nao ficam em toda a tela, ficam ate a metade, e no rodape tb não se ajusta. vou postar a rotina que eu uso.
//NO ONCREATE DO FORM
if (Screen.Width <> 1024) and (Screen.Height <> 768) then
begin
// se a resolução do video for diferente da desenvolvida 1024X768 então
OldWidth := Screen.Width;
OldHeight := Screen.Height;
SetScreenResolution(1024, 768);
end;
procedure TPrincipal. SetScreenResolution(AWidth, AHeigth: Integer);
var
DevMode: TDeviceMode;
Hnd: THandle;
begin
Hnd := GetDC(Handle);
EnumDisplaySettings(nil, 0, DevMode);
with DevMode do begin
dmPelsWidth := AWidth;
dmPelsHeight := AHeigth;
dmBitsPerPel := GetDeviceCaps(Hnd, BITSPIXEL);
end;
ChangeDisplaySettings(DevMode, 0);
end;
///no onclose do form
if (OldWidth <> Screen.Width) and (OldHeight <> Screen.Height) then
SetScreenResolution(OldWidth,OldHeight);
Muito Obrigado, desde ja. |
|
Voltar ao Topo |
|
|
valnei Novato
Registrado: Terça-Feira, 21 de Setembro de 2004 Mensagens: 14
|
Enviada: Sáb Ago 09, 2008 8:24 am Assunto: Mudança de Resolução. |
|
|
Caro colega,
Utilizo esta rotina e esta resolvendo meu problema que tb enfrento.
No evendo On-Create do formulário principal. coloque.
//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;
//altera a resolução
SetScreenResolution(1024, 768);
//prepara mensagem ao usuário
Mens := 'O Programa Synapse ajustou sua resolução de vídeo automaticamente para 1024 x 768 ' + #13 +
' para uma melhor visualização, mas não se preocupe, pois ao termino de uso, ele retornará ' + #13 +
' a sua resolução anterior.';
//mostra mensagem
MessageBox(Self.Handle, PChar(Mens), 'Ajuste de Vídeo', MB_OK + MB_ICONWARNING);
-------------
Declare em var as variáveis.
// Variavies para ajuste de resolução.
AuxWidth, AuxHeight: integer;
---------------]
Função.
// Seta nova resolução para o sistema.
// Geralmente as aplicações são escritas para resolução 1024x768.
// Esta função seta a nova resolução do monitor, após o termino da aplicação.
// a resolução antiga volta.
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;
------------------
Seu evento quando fechar a aplicação para voltar a resolução anterior.
//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
SetScreenResolution(AuxWidth, AuxHeight);
// Finaliza Aplicação.
-------------------
fim
Eu utilizo assim, modifico a resolução para criar o sistema, por exemplo 1024x768, caso a resolução lá for maior que isto eu seto para 1024, assim meu sistema funciona na tela corretamente e quando a aplicação finaliza eu volto a resolução anterior do cliente.
Espero ter ajudado.
"O conhecimento humano pertence ao mundo". |
|
Voltar ao Topo |
|
|
tiago_ws Membro Junior
Registrado: Quarta-Feira, 14 de Setembro de 2005 Mensagens: 318
|
Enviada: Sáb Ago 09, 2008 9:17 am Assunto: Re: Mudança de Resolução. |
|
|
mas se nas configurações de video não tiver esta resolução de 1024X768 vai funcionar do mesmo jeito. |
|
Voltar ao Topo |
|
|
tiago_ws Membro Junior
Registrado: Quarta-Feira, 14 de Setembro de 2005 Mensagens: 318
|
Enviada: Sáb Ago 09, 2008 9:54 am Assunto: Re: Mudança de Resolução. |
|
|
e q meu sistema é em tela inteira, nao fica em janela, se eu colocar ele em janela vai funcionar direitinho testei. mas em tela inteira e que nao estou conseguindo |
|
Voltar ao Topo |
|
|
BugsBunny Mestre
Registrado: Quarta-Feira, 19 de Novembro de 2003 Mensagens: 890
|
Enviada: Sáb Ago 09, 2008 10:30 am Assunto: |
|
|
Velhinhos,
Falando como usuário.
Se um programa que instalei altera minha resolução para funcionar, eu removo o programa no mesmo segundo e peço meu dinheiro de volta.
Falando como desenvolvedor.
Desenho minhas telas na menor resolução possível. Se puder usar 640x480 eu uso. Reconheço que faz um bom tempo que desenvolvo as telas em 800x600.
Se for um programa para um cliente especifico, ainda mais facil. Fechamos os detalhes das telas juntamente com a resolução.
Se for um programa de dominio publico, a resolução faz parte dos requisitos do programa.
Se o usuário tiver uma tela com resolução menor, exibo uma mensagem dizendo que o programa foi desenvolvido para rodar em ambientes com pelo menos telas de 800x600. Ele que chame o help desk ou entre em contato comigo para alterar a configuração dele. Mas jamais altere a configuração do usuário.
Já pensou se vc muda para 1024x768, aí ele roda outro programa que muda para 800x600, e depois um outro que muda para 1920x1080?!?!
Não tem jeito.. Design de telas é polemico mesmo, porém estabeleci essas regras, e as sigo para meu desenvolvimento.
Bugs |
|
Voltar ao Topo |
|
|
warquia Novato
Registrado: Domingo, 9 de Novembro de 2008 Mensagens: 87 Localização: Goiania-go
|
Enviada: Ter Nov 18, 2008 11:13 pm Assunto: |
|
|
Concordo plenamente com voçe bugs
Isso se torna uma coisa chata! |
|
Voltar ao Topo |
|
|
pestana Colaborador
Registrado: Sábado, 25 de Junho de 2005 Mensagens: 3147 Localização: Araras-SP
|
|
Voltar ao Topo |
|
|
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qua Nov 19, 2008 9:45 am Assunto: |
|
|
BugsBunny!
é isso aí!!!
falando em requisitos. nós programadores tb somos submetidos a exigências do tipo. E uma delas é saber se colocar no lugar de usuário. |
|
Voltar ao Topo |
|
|
tiago_ws Membro Junior
Registrado: Quarta-Feira, 14 de Setembro de 2005 Mensagens: 318
|
Enviada: Qui Nov 20, 2008 5:38 pm Assunto: |
|
|
fiz uns testes aqui , passei meu form principal e outro para a resolucao 800 X 600, e coloquei algumas soluções que achei aqui no forum. Mas nenhuma delas resolveu sem porcento meu problema. em umas resoluçoes ficavam certinhas em outras o sistema se perdia.
umas das respostas era reposicionar todos os meus objetos do form em tempo de execução, mais eu tenho neste sistema que desenvolvi uns 10 forms teria sempre que estar alterando , e teria que ter uma tabela cm posições para cada objeto.
Pelo jeito o mais facil e fazer e programa em uma resolução e o usuario se adaptar a ela.
Se alguem tiver mais alguma dica. |
|
Voltar ao Topo |
|
|
carlosvalinhos Aprendiz
Registrado: Sábado, 3 de Junho de 2006 Mensagens: 112
|
Enviada: Sex Nov 21, 2008 9:36 pm Assunto: |
|
|
Fiz desta forma e resolveu meu problema.
procedure TForm1.FormCreate(Sender: TObject);
var
XW, xH :double;
begin
XW := (((Screen.Width) / 100) * 100);
XH := (((Screen.Height) / 100) * 100);
Self.Width := Round(XW);
Self.Height := Round(xH);
Form1.Position := poScreenCenter;
end;
vc pode usar Anchors para ajustas o componentes |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|