Jump to content
Fórum Script Brasil
  • 0
Lazaruz

(Resolvido) Tela Desktop X Laptop - Lazarus

Question

  Tenho um programa que fiz em Lazarus  no PC, mas  no Laptop as telas não ficam compatíveis.

  Existe algum componente que trate isso? No delphi existia um Scaled etc..

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Veja esses links

https://www.devmedia.com.br/forum/ajustar-todos-os-forms-a-resolucao-de-video/382092

https://www.google.com.br/search?source=hp&ei=QU_zXs_sH7m65OUP2cS9kAw&q=tela+auto+ajustável+delphi&o que=tela+autoajustavel+delp&gs_lcp=CgZwc3ktYWIQARgCMgcIIRAKEKABMgcIIRAKEKABMgQIIRAKOgUIABCDAToFCAAQsQM6AggAOgQIABAKOggIABAWEAoQHjoGCAAQFhAeOggIABAIEA0QHjoFCCEQoAFQihZY-JMBYPSpAWgDcAB4AIABygGIAaYZkgEGMC4yNC4xmAEAoAEBqgEHZ3dzLXdperABAA&sclient=psy-ab

ou


Ajuste automatico da resolução  ( FUNCIONA PERFEITAMENTE ) OK

Código
Configurando a resolução de vídeo
Autor:Ricardo de Abreu


Como tive muitos problemas em relação a configurações de vídeo resolvi criar este mini tutorial para que possam ajudar a quem estiver interessado .

Nota : Estas dicas que estão neste documento não são minhas apenas peguei na Internet e sites de programação  e adaptei conforme minha necessidade sendo assim cheguei em um padrão que qualquer pode adaptar seguindo o modelo que fiz


Set Screen Resolution

No delphi por padrão não existe esta função você irá precisar dela mais tarde , declare na USES  logo abaixo de {$R *.dfm}:

Não esqueça de usar a biblioteca do windows : Shellapi.

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 :
 
 oldwidth:integer;
 OldHeight :integer;
 Auxwidth:integer;
Auxheight:integer ;


No evento On Create do Form principal ponha o seguinte código :

var Mens: String;

begin
 EnableMenuItem(GetSystemMenu(handle, False), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
begin

  if (Screen.Width  =1024) and (Screen.Height = 768) then
  begin
  Auxwidth :=1024;
  Auxheight :=768;
  end;

 if (Screen.Width <> 1024) and (Screen.Height <> 768) then
 begin

    OldWidth := Screen.Width;
    OldHeight := Screen.Height;
    Auxwidth:=oldwidth;
     Auxheight:=OldHeight;

    Mens := 'O Programa "Seu programa -"irá ajustar sua resolução de vídeo  para 1024 X 768'+#13;
    Mens := Mens + 'automaticamente para uma melhor visualisação, mas não se preocupe pois ao termino de uso ,' + #13;
    Mens := Mens + ' ele retornará sua resolução novamente. Muito obrigado...';
    MessageBox(Self.Handle, PChar(Mens), 'Ajuste de Vídeo', MB_OK + MB_ICONWARNING);
    SetScreenResolution(1024, 768);
 end;
end;


end;

Explicando :

Desenvolvi este programa em uma resolução 1024X768 (tamanho do Forms) mas se por exemplo o usuário estiver com uma resolução diferente seja ele maior ou menor  que 1024  ele seta para 1024  e quando ele encerra o programa ele volta para resolução anterior :

Detalhes:

Ao criar o form  o código faz a seguinte verificação ,
As variaveis  OldWidth   e  OldHeight recebem a resolução da tela atual depois testa as seguintes condições :

“Se for 1024  as variáveis auxiliares   Auxwidth e  Auxheight  recebem as resolução 1024 X768 “(Isto será usado com base na hora de fechar o form logo abaixo ).

Agora “Se for diferente de 1024 as as variáveis auxiliares  Auxwidth e  Auxheight  recebem agora o que as variáveis OldWidth   e  OldHeight  ou seja a resolução  de tela atual .

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Agora coloque um botão “sair “ ou no evento OnClose do seu form  e ponha o seguinte código :


If (Screen.Width = 1024)and(Auxwidth=1024)and(Screen.Height = 768)and(Auxheight=768) then
begin
  Application.Terminate;
  end;
  If (Screen.Width = 1024)and(Auxwidth<>1024)and(Screen.Height = 768)and(Auxheight<>768) then

        if  (Application.MessageBox('Voltando para sua resolução antiga...','Ajustes Automaticos',MB_OK +MB_ICONWARNING)=ID_OK )then

         Begin
            OldWidth := 800  ;
            OldHeight := 600;
            SetScreenResolution(Auxwidth, Auxheigth);
        end;
                Application.Terminate;
end;

Explicando :

Ao fechar o form  o código verifica a resolução  atual e  verifica também as variáveis auxiliares – Auxwidth e AuxHeight

Detalhes

Após verificar a resolução de tela atual e as variáveis ele testa as seguintes condições :

“ Se a resolução e a variáveis auxiliares forem iguais ele termina a aplicação

“Se  a resolução for 1024 X768 (que o próprio programa determinou) e as variáveis forem diferentes ele volta para a resolução antiga ou seja volta para a resolução que estava antes de abrir o programa .


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Pode ser que alguém já tenha feito de forma diferente porém  foi a melhor  forma que achei para resolver este problema .
Volto a resaltar que não fui eu que fiz estas dicas ,não por falta de capacidade , apenas fui coletando dicas ali,aqui e alterei algumas em certas tive  que mudar o código adaptando assim de um melhor maneira para resolver meu problema .
Insisto em dizer isto para que os autores das dicas possam dizer que estou sendo adepto do CTRL+c e CTRL +v , e tentado ganha créditos .(Foram tantos que pesquisei que não lembro o nome de todos )

abraço

Share this post


Link to post
Share on other sites
  • 0

  Olá , Ricardo agradeço a ajuda. Neste meio tempo estive tetando em outro modo mais simples  que o Lazarus proporciona, mas vou registrar aqui os seu esforços e guardar para um hora que meus teste não surtirem efeito desejado.

       Consegui trocar o Lazarus 1.6 para 2.0.8  e este já traz alguns parâmetros bate pronto no Options->Project_>Usar escalonamento e Resurso de manifesto e  Scaled nos forms =  true. Com isso pelo menos até agora deu certo . Vou continuando aqui com meus testes.

Obrigado.

Share this post


Link to post
Share on other sites
  • 0

Desculpe, Jhonas voce fez referencia ao Ricardo.

Não deu certo como fiz acima, porque ele monta as resoluções e quando levo ao laptop e volto se desfaz tudo e ainda altera o meu form sem eu setar nada.

   Agora vou testar esta sugestão do cod. adaptado do parceiro.

Share this post


Link to post
Share on other sites
  • 0

Num dos links que te passei tem um codigo que funciona assim:

voce monta os seus forms no seu computador usando a sua propria tela ...  vamos supor que voce esteja usando a resolução de 1024 X 768 ... então voce configura tudo para funcionar nessa resolução.

quando voce executar o seu programa em outra maquina e nela estiver usando uma resolução de  ( Ex: 1280 X 800 ) , o código vai alterar automaticamente ( assim que for executado o programa ) para a resolução que voce usou inicialmente ( 1024 X 768 )  e assim que o programa for fechado, a resolução da tela volta a ser a que estava sendo usada na maquina ( 1280 X 800 )

O código esta num dos links que te passei ...  veja se voce consegue achar

abraço

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.




  • Forum Statistics

    • Total Topics
      148594
    • Total Posts
      644163
×
×
  • Create New...