Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 19 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
74 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Ajuste Automatico de Vídeo - Configurando a resolução
Publicado por ricardoetep : Terça, Janeiro 29, 2008 - 12:09 GMT-3 (1922 leituras)
Comentários 2 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Como já tive muitos problemas em relação a configurações de vídeo, resolvi criar este mini tutorial para que possa ajudar quem também estiver com problemas ou se interessar pelo assunto.
Nota: Os códigos que estão neste documento não são de minha autoria. Apenas as peguei na Internet em sites de programação, inclusive aqui no ActiveDelphi e adaptei conforme minha necessidade. Todo os direitos autorais estão reservados aos seus autores e sites originais em que foram publicados.

Função Set Screen Resolution. Por padrão, não existe no delphi uma função capaz de alterar a resolução de vídeo, portanto, você irá precisar dela mais tarde. Faça o seguinte código na seção implementation (não esqueça de declarar a unit ShellApi na seção uses):

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:

  AuxWidth : integer;
  AuxHeight: integer;

No evento OnCreate do Form principal, coloque o seguinte código:

procedure TForm1.FormCreate(Sender: TObject);
var
  Mens: string;
begin
  //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;

    //prepara mensagem ao usuário
    Mens := 'O Programa ' + Application.Title + ' irá ajustar sua resolução de vídeo' +
      ' automaticamente para' + #13 + '1024 X 768, para uma melhor visualização,' +
      ' mas não se preocupe pois, ao termino de uso,' + #13 + ' ele retornará' +
      ' sua resolução novamente. Muito obrigado...';

    //mostra mensagem
    MessageBox(Self.Handle, PChar(Mens), 'Ajuste de Vídeo', MB_OK + MB_ICONWARNING);

    //altera a resolução
    SetScreenResolution(1024, 768);
  end;
end;

Agora coloque um botão "sair" ou no evento OnClose do seu form, faça o seguinte código:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 
//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
   
//ao clicar no OK da Mensagem, volta a resolução antiga
    if
(Application.MessageBox('Voltando para sua resolução antiga...',
      'Ajustes Automaticos', MB_OK + MB_ICONWARNING) = ID_OK) then
      SetScreenResolution(AuxWidth, AuxHeight);

  Application.Terminate;
end;

Agora é só testar! Pode ser que alguém já tenha feito isto mas de maneira diferente, porém foi a melhor forma que achei para resolver este problema.

Volto a ressaltar que não fui eu que fiz os códigos, não por falta de capacidade, apenas fui coletando dicas aqui e ali e fiz algumas alterações, adaptando-as para resolver meu problema. Insisto em dizer isto para que os autores das dicas não possam dizer que sou adepto do CTRL+C e CTRL+V e estou tentado ganhar créditos. Infelizmente foram tantas matérias pesquisadas que não lembro o nome dos autores.

Espero que tenha ajudado alguém. Muito obrigado!

Ricardo de Abreu - Analista de Suporte.

Contatos: rabreu@bredasjc.com.br ricardodeabreu@hotmail.com



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: cadumicro (cadumicro@ig.com.br) : Fev 04, 2008 - 05:53
(Informações sobre o membro | Enviar uma mensagem) http://http://
Olá Ricardo, Só lembrando que essa técnica embora seja útil em "alguns casos", pode complicar se não capturar outros eventos como o término da inesperado da aplicação ex: CTRL+ALT+DEL, queda de energia ou mesmo se não for tratado outros em eventos como onMinimize etc...
Aproveito para lhes indicar o componente ElasticForm http://www.elasticform.com/ já experimentei uma vez e realmente cumpre o que promete, além do que custa $100 com fontes ou $55 sem fontes, acredito ser um bom investimento para o tamanho do problema.

Carlos Eduardo Paulio
cadumicro@hotmail.com


por: gleyber (gleyber@gmail.com) : Fev 07, 2008 - 07:42
(Informações sobre o membro | Enviar uma mensagem) http://http://
Ricardo, estou precisando de um código que envie a imagem diretamente para um data show. Será que vc poderia me ajudar?
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados