Italian [B4J] Form con più monitor

zenlab

Member
Licensed User
Longtime User
ciao, vorrei poter far aprire un form in un monitor diverso da quello principale....
ho provato con WindowTop e WindowLeft ma appena setto i valori per andare a posizionarlo oltre lo schermo principale....il form si apre semplicemente al centro....
qualche dritta???
 

Sagenut

Expert
Licensed User
Longtime User
Mi hai incuriosito ed ho fatto una prova al volo.
A me modificando il WindowsLeft mi ha messo il form sul secondo schermo.
Il secondo schermo deve essere impostato come Estendi Schermo e assicurati di spostare il Form verso il lato che effettivamente porta al secondo schermo.
La posizione dello schermo la configuri dalle impostazioni video di Windows.
 

Star-Dust

Expert
Licensed User
Longtime User
Mi hai incuriosito ed ho fatto una prova al volo.
A me modificando il WindowsLeft mi ha messo il form sul secondo schermo.
Il secondo schermo deve essere impostato come Estendi Schermo e assicurati di averlo spostato verso il lato che effettivamente porta al secondo schermo.
La posizione dello schermo la configuri dalle impostazioni video di Windows.
Nel forum trovi diversi esempi. Devi considerare come se fosse tutto un monitor unico.
Con fx.Screens e JavaObject puoi ottenere le dimensioni e puoi calcolare a quale coordinate posizionare il form e con quali dimensioni
 
Last edited:

zenlab

Member
Licensed User
Longtime User
scusate il ritardo....comunque nulla da fare...
con tre monitor FullHd con il centrale come "principale" se metto

B4X:
    MainForm = Form1
    MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
    MainForm.WindowLeft = 1900 - MainForm.Width
appare come mi aspetto sul bordo del monitor centrale ma appena aumento il left da 1900 lo passo a 2100 (quindi mi aspetto che esca il form sullo schermo di destra, mi posiziona automaticamente il form al centro del monitor principale....
stessa cosa se scendo sotto lo 0 che dovrebbe posizionarmi il form sul monitor di sinistra....

PS ovviamente il MainForm.Width è un form standard da 600.....
 

Star-Dust

Expert
Licensed User
Longtime User
scusate il ritardo....comunque nulla da fare...
con tre monitor FullHd con il centrale come "principale" se metto

B4X:
    MainForm = Form1
    MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
    MainForm.WindowLeft = 1900 - MainForm.Width
appare come mi aspetto sul bordo del monitor centrale ma appena aumento il left da 1900 lo passo a 2100 (quindi mi aspetto che esca il form sullo schermo di destra, mi posiziona automaticamente il form al centro del monitor principale....
stessa cosa se scendo sotto lo 0 che dovrebbe posizionarmi il form sul monitor di sinistra....

PS ovviamente il MainForm.Width è un form standard da 600.....
Non hai seguito quello che ho scritto.
Cerca nel forum che trovi in esempio già pronto di quello che ti ho spiegato.
 

zenlab

Member
Licensed User
Longtime User
ciao StrarDust, scusa se sono gnucco ma non riesco a trovare nulla che funzioni sul forum....tu a quale esempio ti riferisci? riesci a mandarmi un link o altro che sono esausto di prove....
 

Star-Dust

Expert
Licensed User
Longtime User
ciao StrarDust, scusa se sono gnucco
Non ti voglio contraddire 🙄

ma potresti vedere qui

Con questo codice puoi proiettare i form sui vari schermi (che sono estensioni del desktop)
Meglio se quello principale sia il primo e che siano tutti allineati, eviti di trovarti le pagine disallineate.
La perfezione la ottieni se tutti hanno la stessa risoluzione, non avrai disallineamenti
 

zenlab

Member
Licensed User
Longtime User
hemmm.....non puoi proprio contraddirmi cercavo "secondary monitor" e via dicendo......vabbè....che dire: Grazie 1000 :p
 

zenlab

Member
Licensed User
Longtime User
Vuoi ridere.....
ho fatto una semplice modifica al codice dopo aver visto quello che consigliavano....e se semplicemente scrivo:

B4X:
MainForm = Form1
    MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
    MainForm.WindowLeft = 2100
    MainForm.Show
Il form lo butta al centro dello schermo principale...
se invece scrivo:

B4X:
MainForm = Form1
    MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
    MainForm.Show   
    MainForm.WindowLeft = 150
Funziona esattamente come mi aspettavo.....tutta colpa del MainForm.Show fatto dopo o prima del setting della posizione 😭 😭 😭
 
Top