хочу форму во всю ширину экрана сделать но если цепляюсь за разрешение экрана то форма намного шире цепляться за ширину экселя не правильно т.к. эксель может быть не на весь экран
на запрос в ВБА выдает GetSystemMetrics(SM_CXSCREEN) выдает 1280 Application.Width выдает 972 (Эксель развернут) zoom везде 100% почему такая разница? как правильно развернуть? или как альтернатива есть ли в форме свойство/метод аналогично как в эксле DisplayFullScreen
Добрый день.
хочу форму во всю ширину экрана сделать но если цепляюсь за разрешение экрана то форма намного шире цепляться за ширину экселя не правильно т.к. эксель может быть не на весь экран
на запрос в ВБА выдает GetSystemMetrics(SM_CXSCREEN) выдает 1280 Application.Width выдает 972 (Эксель развернут) zoom везде 100% почему такая разница? как правильно развернуть? или как альтернатива есть ли в форме свойство/метод аналогично как в эксле DisplayFullScreenОбитатель
Option Explicit 'поместить в модуль формы "UserForm1" Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Const SW_MAXIMIZE = 3 Private Const SW_NORMAL = 1 Private Const SW_MINIMIZE = 6
Dim hwnd As Long Private Sub UserForm_Initialize() hwnd = FindWindow(vbNullString, "UserForm1")' тут Название - "Caption" формы, поменять на своё нужно если не "UserForm1". ShowWindow hwnd, SW_MAXIMIZE End Sub
[/vba]
Вот попроще пример, без API.
[vba]
Код
'работает из модуля формы 'размер формы равен размеру окна приложения"Application" Private Sub UserForm_Initialize() Me.Height = Application.Height Me.Width = Application.Width End Sub
[/vba]
А что касается соотношения между пикселями и принятыми в VBA поинтами, вот пример:
[vba]
Код
'проверено для Exl 2010 Public Sub po_pix() With ActiveWindow [a1].Value = "Разница между поинтами и пикселями, дано для ActiveWindow" [b2].Value = "пиксели": [c2].Value = "поинты" [a3].Value = "Width": [b3].Value = .PointsToScreenPixelsX(.Width): [c3].Value = .Width [a4].Value = "Height": [b4].Value = .PointsToScreenPixelsY(.Height): [c4].Value = .Height End With End Sub
Option Explicit 'поместить в модуль формы "UserForm1" Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Const SW_MAXIMIZE = 3 Private Const SW_NORMAL = 1 Private Const SW_MINIMIZE = 6
Dim hwnd As Long Private Sub UserForm_Initialize() hwnd = FindWindow(vbNullString, "UserForm1")' тут Название - "Caption" формы, поменять на своё нужно если не "UserForm1". ShowWindow hwnd, SW_MAXIMIZE End Sub
[/vba]
Вот попроще пример, без API.
[vba]
Код
'работает из модуля формы 'размер формы равен размеру окна приложения"Application" Private Sub UserForm_Initialize() Me.Height = Application.Height Me.Width = Application.Width End Sub
[/vba]
А что касается соотношения между пикселями и принятыми в VBA поинтами, вот пример:
[vba]
Код
'проверено для Exl 2010 Public Sub po_pix() With ActiveWindow [a1].Value = "Разница между поинтами и пикселями, дано для ActiveWindow" [b2].Value = "пиксели": [c2].Value = "поинты" [a3].Value = "Width": [b3].Value = .PointsToScreenPixelsX(.Width): [c3].Value = .Width [a4].Value = "Height": [b4].Value = .PointsToScreenPixelsY(.Height): [c4].Value = .Height End With End Sub
в VBA принято не пикселями опредедять размеры а поинтами, это не одно и то-же. Поэтому чтобы привязать размер формы к размеру экрана монитора, сначала надо перевести пиксели в поинты, вот код:
[vba]
Код
'на модуль формы положить Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long Private Const gPointsPerPixel = 0.75 Private Sub UserForm_Initialize() Dim x As Integer, y As Integer x = GetSystemMetrics(0) y = GetSystemMetrics(1) MsgBox "Размер экрана в пикселях:" & x & " : " & y MyXPoints = x * gPointsPerPixel * 100 / ActiveWindow.Zoom MyYPoints = y * gPointsPerPixel * 100 / ActiveWindow.Zoom MsgBox "Размер экрана в поинтах:" & MyXPoints & " : " & MyYPoints Me.Height = MyYPoints Me.Width = MyXPoints End Sub
в VBA принято не пикселями опредедять размеры а поинтами, это не одно и то-же. Поэтому чтобы привязать размер формы к размеру экрана монитора, сначала надо перевести пиксели в поинты, вот код:
[vba]
Код
'на модуль формы положить Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long Private Const gPointsPerPixel = 0.75 Private Sub UserForm_Initialize() Dim x As Integer, y As Integer x = GetSystemMetrics(0) y = GetSystemMetrics(1) MsgBox "Размер экрана в пикселях:" & x & " : " & y MyXPoints = x * gPointsPerPixel * 100 / ActiveWindow.Zoom MyYPoints = y * gPointsPerPixel * 100 / ActiveWindow.Zoom MsgBox "Размер экрана в поинтах:" & MyXPoints & " : " & MyYPoints Me.Height = MyYPoints Me.Width = MyXPoints End Sub