This example shows how to use various declares and Xojo API2 code to dynamically retrieve the width and height of a screen so that these dimensions can be used to resize your main window.
*Uses Xojo API2
Above are two screen grabs where the Xojo program is running on the same computer with two different resolutions set on the two screens for the computer.
Sub Action() Handles Action //Create position variables for //x and y coordinates Dim PosX, PosY as Int32 //Get the point of the cursor on the screen GetCursorPoint(PosX, PosY) //Show the mouse x,y position in // the TextArea1 Control TextArea1.Value = "Global Mouse Coordinates: X: " + PosX.ToText + ", Y: " + PosY.ToText + EndOfLine //Get the handle for the monitor based on the mouse position Dim hdlMonitor as Integer = GetMonitorHandle(PosX, PosY) TextArea1.Value = TextArea1.Value + "Monitor Handle: " + hdlMonitor.ToText + EndOfLine //Get the monitor display text from the handle Dim MonitorText as String = ShowMonitorDisplayText(hdlMonitor) //Show the display number TextArea1.Value = TextArea1.Value + "Cursor in monitor number: " + MonitorText +_ ", or screen #: " + MonitorText.Right(1) + EndOfLine Dim SF as Integer Call GetScaleFactorForMonitor(hdlMonitor, SF) TextArea1.Value = TextArea1.Value + "ScaleFactor (incorrect): " + sf.ToText + EndOfLine Dim Effxdpi, Effydpi as UInt32 Call GetDpiForMonitor(hdlMonitor, MDT_Effective_DPI, Effxdpi, Effydpi) Dim MyRatio as Double = Effxdpi/96*100 TextArea1.Value = TextArea1.Value + "Effective xdpi: " + Effxdpi.ToText + EndOfLine +_ "ratio: " + MyRatio.ToText + "%" + EndOfLine TextArea1.Value = TextArea1.Value + "Xojo Screen Number: " + WhichScreen(PosX,PosY).ToText + EndOfLine TextArea1.Value = TextArea1.Value + "Left=" + Str(Screen.ScreenAt(WhichScreen(PosX,PosY)).AvailableLeft) + EndOfLine TextArea1.Value = TextArea1.Value + "Width=" + Str(Screen.ScreenAt(WhichScreen(PosX,PosY)).AvailableWidth) + EndOfLine TextArea1.Value = TextArea1.Value + "Top=" + Str(Screen.ScreenAt(WhichScreen(PosX,PosY)).AvailableTop) + EndOfLine TextArea1.Value = TextArea1.Value + "Height=" + Str(Screen.ScreenAt(WhichScreen(PosX,PosY)).AvailableHeight) + EndOfLine End Sub |
The main part of the code is to use the Screen.ScreenAt(WhichScreen(PosX,PosY)).AvailableHeight, and AvailableWidth calls when the declares retrieve the Xojo screen number. A timer is used to update the resolution data and also captures the mouse position.
The code is available on Github at: MultiScreen Resolution Xojo 2020 r1 API2
An older working version of the program has also been created in the Xojo 2015 r1 IDE that is available in Github.