Muy buenas tardes, en una aplicacion de escritorio en Windows 10 necesitaba posicionar una ventana en un monitor en particular (tengo 2) , despues de leer y probar un monton de ejemplos creo que lo medio entendi, los ajuste y ya me sirve. Lo comparto por si a alguien le sirve ya que casi me da un derrame a mi, creo que funciona solo con dos monitores y no se si sera la mejor forma de hacerlo y solo lo he probado en windows 10, pero por si les sirve
Considerar:
-
Dependiendo como posiciones el segundo monitor graficamente (en el display settings) tendra diferentes valores la propiedad left y top, el width y heigh siempre seran los mismos salvo que cambies la resolucion del monitor
Asi por ejemplo si posiciono el monitor justo a la derecha a mi me da estos valores
Left Top Widh Heigh
Monitor 0 0 0 1920 1080
Monitor 1 1280 0 2133 1200
pero si el monitor graficamente lo arrastro y pongo a la izquierda del monitor 0
Monitor 1 -2133 0 2133 1200
-
Pueden ver la cantidad de monitores con la funcion screencount
-
Este Metodo se debe agregar a la ventana o extender el objeto ventana, recibe el numero de monitor (Variable pMonitor) y centra en ese monitor la ventana y la muestra
Dim X, Y As Integer
x = Screen(pMonitor).Width
y = screen(pMonitor).Height
// X sera el left del form
If X > self.Width Then
X = (x-self.Width) /2 -1
Else
x = Screen(pMonitor).left
End If
// Y sera el Top del form
If Y > self.Height Then
Y = (y - self.Height)/2 - 1
Else
y = Screen(pMonitor).top
End If
If pMonitor <> 0 Then
if screen(pMonitor).Left > 0 then
x = x + Screen(0).Width //ojo aqui debe ser en referencia a la screen 0 porque estoy a la derecha
ElseIF Screen(pMonitor).Left < 0 Then
x = x - Screen(pMonitor).Width //ojo aqui le resto mi propio ancho porque estoy a la izquierda
End If
If Screen(pMonitor).top > 0 Then
y = y + Screen(0).Height
ElseIF Screen(pMonitor).top < 0 THEN
y = y - Screen(pMonitor).Height
End If
end if
self.Left = X
Self.Top = Y
self.Show
Saludos y muy buen dia