Как определить разрешение моего дисплея в VB6? - PullRequest
4 голосов
/ 22 августа 2010

Я использую следующий код:

Private Sub Form_Load()
    ResWidth = Screen.Width \ Screen.TwipsPerPixelX
    ResHeight = Screen.Height \ Screen.TwipsPerPixelY
    ScreenRes = ResWidth & "x" & ResHeight
    MsgBox (ScreenRes)
End Sub

и несколько других похожих кодов, за которыми я гуглил. Проблема в том, что я всегда получаю сообщение о том, что мое разрешение 1200х1200, хотя фактическое разрешение - 1920х1200. Почему у меня плохие результаты?

Ответы [ 3 ]

4 голосов
/ 23 августа 2010

Не знаю, почему это не работает, но вы можете подключиться к Windows API.

Private Declare Function GetSystemMetrics Lib "user32" _
    (ByVal nIndex As Long) As Long

А затем, когда вам нужны ширина и высота экрана, определите эти константы:

Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1

Тогда вы можете использовать GetSystemMetrics там, где вам это нужно. Если имеет смысл добавить объявление и константы в модуль (.BAS), просто сделайте объявление и константы общедоступными.

Dim width as Long, height as Long
width = GetSystemMetrics(SM_CXSCREEN)
height = GetSystemMetrics(SM_CYSCREEN)

GetSystemMetrics в службу поддержки Microsoft

2 голосов
/ 29 марта 2013

Похоже, что проблема с объектом Screen в VB6. Согласно KB253940 PRB: неправильная ширина / высота объекта экрана после изменения размера рабочего стола :

Внутри Visual Basic IDE объект Screen сообщает о неверном значении ширины рабочего стола после изменения разрешения экрана. Когда приложение выполняется вне среды IDE, свойства «Ширина» и «Высота» объекта «Экран» возвращают неверные значения, если разрешение изменяется с помощью значка «Свойства экрана» на панели задач.

КБ предлагает использовать GetDeviceCaps API-функцию для решения проблемы:

Private Declare Function GetDeviceCaps Lib "gdi32" _
        (ByVal hdc As Long, ByVal nIndex As Long) As Long

Private Const HORZRES = 8
Private Const VERTRES = 10

Private Sub Form_Load()
    ResWidth = GetDeviceCaps(Form1.hdc, HORZRES)
    ResHeight = GetDeviceCaps(Form1.hdc, VERTRES)
    ScreenRes = ResWidth & "x" & ResHeight
    MsgBox (ScreenRes)
End Sub
0 голосов
/ 22 марта 2018

Если вы работаете с какой-либо Windows Mobile, путь несколько иной.Вам необходимо использовать следующий метод:

Width = (Screen.PrimaryScreen.WorkingArea.Width * 0.32)

В предыдущем примере 32% ширины экрана назначено переменной width.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...