ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ajustar Resolução de Tela.

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
tiago_ws
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 14 de Setembro de 2005
Mensagens: 317

MensagemEnviada: Sex Ago 08, 2008 1:38 pm    Assunto: Ajustar Resolução de Tela. Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
valnei
Novato
Novato


Registrado: Terça-Feira, 21 de Setembro de 2004
Mensagens: 14

MensagemEnviada: Sáb Ago 09, 2008 8:24 am    Assunto: Mudança de Resolução. Responder com Citaçã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
Ver o perfil de Usuários Enviar Mensagem Particular
tiago_ws
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 14 de Setembro de 2005
Mensagens: 317

MensagemEnviada: Sáb Ago 09, 2008 9:17 am    Assunto: Re: Mudança de Resolução. Responder com Citação

mas se nas configurações de video não tiver esta resolução de 1024X768 vai funcionar do mesmo jeito.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
tiago_ws
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 14 de Setembro de 2005
Mensagens: 317

MensagemEnviada: Sáb Ago 09, 2008 9:54 am    Assunto: Re: Mudança de Resolução. Responder com Citaçã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
Ver o perfil de Usuários Enviar Mensagem Particular
BugsBunny
Mestre
Mestre


Registrado: Quarta-Feira, 19 de Novembro de 2003
Mensagens: 890

MensagemEnviada: Sáb Ago 09, 2008 10:30 am    Assunto: Responder com Citação

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 Very Happy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
warquia
Novato
Novato


Registrado: Domingo, 9 de Novembro de 2008
Mensagens: 87
Localização: Goiania-go

MensagemEnviada: Ter Nov 18, 2008 11:13 pm    Assunto: Responder com Citação

Concordo plenamente com voçe bugs
Isso se torna uma coisa chata!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
pestana
Colaborador
Colaborador


Registrado: Sábado, 25 de Junho de 2005
Mensagens: 2917
Localização: Araras-SP

MensagemEnviada: Qua Nov 19, 2008 9:23 am    Assunto: Responder com Citação

o proprio Delphi tem seus metodos para ajustar os componente na resolução da máquina.

verifique estes tópicos:

[ http://www.activedelphi.com.br/forum/viewtopic.php?t=44129&highlight=resolu%E7%E3o ]
[ http://www.activedelphi.com.br/forum/viewtopic.php?t=38277&highlight=resolu%E7%E3o ]


espero ter ajudado!
_________________
uma pessoa inteligente aprende com os seus erros,
uma pessoa sábia aprende com os erros dos outros.
Augusto Cury
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 8888
Localização: Governador Valadares-MG

MensagemEnviada: Qua Nov 19, 2008 9:45 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
tiago_ws
Membro Junior
Membro Junior


Registrado: Quarta-Feira, 14 de Setembro de 2005
Mensagens: 317

MensagemEnviada: Qui Nov 20, 2008 5:38 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
carlosvalinhos
Aprendiz
Aprendiz


Registrado: Sábado, 3 de Junho de 2006
Mensagens: 112

MensagemEnviada: Sex Nov 21, 2008 9:36 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB