Lazaruz Postado Junho 23, 2020 Denunciar Share Postado Junho 23, 2020 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.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Junho 24, 2020 Denunciar Share Postado Junho 24, 2020 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lazaruz Postado Junho 27, 2020 Autor Denunciar Share Postado Junho 27, 2020 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Lazaruz Postado Junho 29, 2020 Autor Denunciar Share Postado Junho 29, 2020 (editado) Desculpe, Jhonas voce fez referencia ao Ricardo. Testei a solução do parceiro e acabei adotando a opção simples do próprio Lazarus conforme já descrito. OBS. No PC desenvolvedor deve estar nas configurações padrões de video inclusive aquele item que trata tamanho de letra 100%,125% etc. No meu caso estava 125% e não dava certo quando eu levava o executável produzido para o lap-top. Com este ajuste funcionou normal e o executável ajusta certinho quando eu executo no lap -top. Editado Julho 15, 2020 por Lazaruz nova posicao. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 1, 2020 Denunciar Share Postado Julho 1, 2020 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Lazaruz
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..
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.