Criando PopUps Móveis com GetFrame

Boa tarde! Meu cliente pediu para as pop ups serem móveis, por isso estou usando frames com o script abaixo :
Application.GetFrame(“Vent”).MoveFrame , , “11152hm”,“9100hm”
Application.GetFrame(“Vent”).OpenScreen(“Minitela_Ventilador”), Arg
Application.GetFrame(“Vent”).SetFrameOptions “”,2048+256+64+2+1

A questão é que para a tela fica centralizador, tive que deixar o SetFrameOptions na terceira linha do script em vez da primeira. Alguem sabe por que esse comportamento ?

Logo, se eu executo o script assim:

Application.GetFrame("Vent").SetFrameOptions "",2048+256+64+2+1 
Application.GetFrame("Vent").MoveFrame , , "11152hm","9100hm"
Application.GetFrame("Vent").OpenScreen("Minitela_Ventilador"), Arg

É como se o 2048 do SetFrameOpttions não funcionasse. Testei clicar num Xcontrol novamente com a tela aberta e a PopUp centraliza normalmente. Queria só saber se alguem tem um ideia do porque desse comportamento e do porque se trocar a linha de script ele passa a funcionar.

Obrigado!

Eu penso que a sequência correta, nesse caso em que você vai omitir os argumentos [PosX] e [PosY] do método MoveFrame, seja:

Dim objFrame
Set objFrame = Application.GetFrame("Vent")
objFrame.MoveFrame , , "11152 hm", "9100 hm"	' Redimensionar o frame
objFrame.SetFrameOptions "", 2048+256+64+2+1 	' Definir as opcoes
objFrame.OpenScreen("Minitela_Ventilador"), Arg	' Entao, abrir a tela

1 Like

Boa tarde Leandro! Nessa sequência também funcionou. Então o fato de omitir os argumentos do método MoveFrame não impede a janela de se mover , por isso devo definir a posição dela depois desse método ?

Não, o MoveFrame nesse caso serviu apenas para definir o tamanho do Frame. O que permite a popup de se mover é o valor 64 do argumento Flags do método SetFrameOptions .

Sim, o que queria dizer é que o MoveFrame mesmo com os argumentos [PosX] e [PosY] omitidos possui um default de posição, por isso utilizar o SetFrameOptions numa linha antes dele não funciona, a janela é centralizada porém o MoveFrame envia ela para essa posição padrão. Assim é necessário utilizar o MoveFrame sempre antes e depois o SetFrameOptions com o valor 64 no argumento, para centralizar.

Ah sim, entendi o que quis dizer, porém, o que acontece é que a rotina de centralizar a janela precisa do tamanho do Frame determinado para ter a referência de largura e altura para centralizá-lo de acordo com a resolução do monitor.

Entendi, obrigado pela ajuda !