B4J Question Detect second screen and open there a B4XPages maximized

Elric

Well-Known Member
Licensed User
Hello everybody!

I'm working on a Scoreboard.

I would like to implement a console B4XPage on pc screen and a chart B4XPage on second screen.

There is a way to detect if there is a second screen and, if yes, open there a B4XPages already maximized and in utility mode?

Thank you!
 
Solution
Try this:
B4X:
Private Sub B4XPage_Created (Root1 As B4XView)
    Dim f As Form = B4XPages.GetNativeParent(Me)
    f.SetFormStyle("UTILITY")
    MoveToSecondMonitor(f)
    SetMaximized(f)
    Root = Root1
    'load the layout to Root
    Root.LoadLayout("Page1")
End Sub

Private Sub MoveToSecondMonitor(f As Form)
    Dim screen As Screen = FindSecondScreen(f)
    f.WindowLeft = screen.MinX + 10
    f.WindowTop = screen.MinY + 10
End Sub

Private Sub FindSecondScreen(f As Form) As Screen
    Dim fx As JFX
    For Each screen As Screen In fx.Screens
        If (f.WindowLeft > screen.MaxX Or f.WindowLeft < screen.MinX) And _
            (f.WindowTop > screen.MaxY Or f.WindowTop < screen.MinY) Then
            Return screen
        End If...

Erel

B4X founder
Staff member
Licensed User
Longtime User
Try this:
B4X:
Private Sub B4XPage_Created (Root1 As B4XView)
    Dim f As Form = B4XPages.GetNativeParent(Me)
    f.SetFormStyle("UTILITY")
    MoveToSecondMonitor(f)
    SetMaximized(f)
    Root = Root1
    'load the layout to Root
    Root.LoadLayout("Page1")
End Sub

Private Sub MoveToSecondMonitor(f As Form)
    Dim screen As Screen = FindSecondScreen(f)
    f.WindowLeft = screen.MinX + 10
    f.WindowTop = screen.MinY + 10
End Sub

Private Sub FindSecondScreen(f As Form) As Screen
    Dim fx As JFX
    For Each screen As Screen In fx.Screens
        If (f.WindowLeft > screen.MaxX Or f.WindowLeft < screen.MinX) And _
            (f.WindowTop > screen.MaxY Or f.WindowTop < screen.MinY) Then
            Return screen
        End If
    Next
    Return fx.PrimaryScreen
End Sub

Sub SetMaximized(frm As Form)
    Dim joForm As JavaObject = frm
    Dim joStage As JavaObject = joForm.GetField("stage")
    joStage.RunMethod("setMaximized", Array(True))
End Sub

I'm working with a single (42'') monitor here so can't fully test it.
 
Upvote 1
Solution

teddybear

Well-Known Member
Licensed User
A bit of change

B4X:
Private Sub FindSecondScreen(f As Form) As Screen
    Dim fx As JFX
    For Each screen As Screen In fx.Screens
        If  fx.PrimaryScreen <> screen then
            Return screen ' found second screen
        End If
    Next
    Return fx.PrimaryScreen
End Sub
 
Upvote 1
Top