Método GetFrame em monitores múltiplos

Bom dia, pessoal.

Estou trabalhando com múltiplos monitores (3) e quando uso o método GetFrame para gerar um novo frame, o mesmo sempre abre no monitor 1; não achei nenhum argumento ou propriedade que force a abertura deste frame nos monitores 2 ou 3. É possível?

Obrigado pela ajuda.

Bom dia Cláudio,

Você tem que ajustar os parâmetros do frame após a abertura.

Veja o exemplo:

Estou usando 2 monitores com resolução 1920 x 1080, ao executar o script abaixo, o novo frame “Monitor2” irá abrir maximizado no segundo monitor.

Application.GetFrame("Monitor2").OpenScreen("Monitor2"), 0
	Set Mon2 = Application.GetFrame("Monitor2")
	Mon2.SetFrameOptions "Monitor 2", 1+2+16+64+256+2048
	Mon2.RestoreFrame
	Mon2.MoveFrame 2000, 0
	Mon2.MaximizeFrame
	Item("Monitores").Value = 2

Bom dia, Nivaldo.

Obrigado pela ajuda; uma dúvida… a instrução que move o frame para o segundo monitor é o “MoveFrame” ou “Item(“Monitores”).Value = 2”?
O argumento PosX do MoveFrame não é limitado a 1920? Ou a partir disso considera como sendo o segundo monitor?

Disponha @cromero.

Para mover o frame corretamente e manter o mesmo maximizado, uso os 3 métodos:
.RestoreFrame
.MoveFrame posX, posY
.MaximizeFrame

Os valores a serem usados em posX e posY vão depender do seu layout com vários monitores e também da resolução aplicada neles.

No meu caso como o layout dos monitores está na horizontal, conforme imagem abaixo,
eu preciso mover o frame para uma posição entre 1921 e 3840 na posição X antes de mandar maximizar. Se o seu layout for diferente, ou a resolução for diferente, você deve identificar qual a posição correta para mover o frame.

A instrução Item(“Monitores”).Value = 2 é uma situação particular do meu script, desnecessária no seu caso.

2 Likes

Está claro!

Muito obrigado.