PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 25 → Como pegar a resolução de um form que sofreu Zoom com Ctrol e rodinha do mouse
Como pegar a resolução de um form que sofreu Zoom com Ctrol e rodinha do mouse
Started by Boller, May, 18 2025 10:52 PM - No answer
Registered member
4,520 messages
Posted on May, 18 2025 - 10:52 PM
Abaixo eu explico como pegar a resolução de uma window após aplicar zoom no windev?

Então

MyWindow..width traz uma resolução fake

Se vc der um printscreen apenas da window

Vc terá o pixel dela numa imagem temp is image

E terá a resolução exata mesmo que tenha dado zoom

Entao

Quando aplicamos zoom via Ctrl + Roda do Mouse, o Windows (ou o próprio WinDev) não altera diretamente os valores das propriedades como MyWindow..Width ou MyWindow..Height. Esses valores refletem o tamanho lógico da janela, não os pixels reais renderizados, principalmente se houver DPI scaling ou zoom do sistema operacional.

A solução é capturar a imagem renderizada da window (como se fosse um printscreen da própria janela) e então extrair a resolução real da imagem capturada. Seguindo as diretivas, aqui está uma procedure que faz isso corretamente em WLanguage:



PROCEDURE GetRealWindowResolution

//##############################

// Procedure: GetRealWindowResolution
// Autor: Adriano Boller / WX Soluções
// Objetivo: Obter a resolução real da janela após zoom usando captura de tela

PROCEDURE GetRealWindowResolution(pWindowName is string)

//------------------------------------------
// 1. Captura a imagem da área da janela
//------------------------------------------
imgCapture is Image
imgCapture = dCopyWindow(pWindowName)

//------------------------------------------
// 2. Verifica se a imagem foi capturada com sucesso
//------------------------------------------
IF imgCapture = Null THEN
Error("Falha ao capturar a janela: " + pWindowName)
RETURN
END

//------------------------------------------
// 3. Recupera a resolução real da imagem capturada
//------------------------------------------
nRealWidth is int = dWidth(imgCapture)
nRealHeight is int = dHeight(imgCapture)

//------------------------------------------
// 4. Exibe ou retorna a resolução
//------------------------------------------
Info("Resolução real da janela '" + pWindowName + "': " + nRealWidth + " x " + nRealHeight)

// Opcional: retornar como estrutura
res is Structure
Width is int
Height is int
END

res.Width = nRealWidth
res.Height = nRealHeight

RESULT res




Observações importantes:
• O comando dCopyWindow() captura a imagem real da janela, refletindo o tamanho visual verdadeiro (considerando zoom ou DPI do sistema).
• Pode ser usada com "MyWindow" ou WinInput() para pegar dinamicamente o nome da janela atual.
• Retorna uma estrutura com .Width e .Height reais da renderização em pixels.



Exemplo de uso:

resolucao is Structure = GetRealWindowResolution("WIN_TelaPrincipal")
Trace("Largura real: " + resolucao.Width)
Trace("Altura real: " + resolucao.Height)


Ok

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/