vb6 - toda - Tamaño del formulario para completar las dimensiones de la pantalla menos la barra de tareas
maximizar formulario c# (3)
¿Hay alguna razón por la que no puedas simplemente maximizar el formulario? Esa sería mi primera impresión.
Si no es un corredor, puede intentar obtener la altura de la barra de tareas de la siguiente manera:
Private Const ABM_GETTASKBARPOS = &H5
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type APPBARDATA
cbSize As Long
hwnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long
End Type
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Function GetTaskBarSize()
Dim ABD As APPBARDATA
SHAppBarMessage ABM_GETTASKBARPOS, ABD
MsgBox "Width:" & ABD.rc.Right - ABD.rc.Left
MsgBox " Height:" & ABD.rc.Bottom - ABD.rc.Top
End Sub
y luego establecer la altura de su formulario a la altura de la pantalla menos la altura de la barra de tareas.
¿Cómo se dimensiona el formulario en vb6 para que el borde inferior del formulario esté en la parte superior de la barra de tareas?
¿Menos solo la barra de tareas? Eso tal vez no sea realmente lo que quieres. Puede haber otras ventanas en los bordes de la pantalla que están destinadas a "tallar" regiones del escritorio. Además, tenga en cuenta que a veces la altura de la barra de tareas es irrelevante, como cuando está acoplada en el lado izquierdo o derecho de la pantalla.
Galwegian ha mostrado cómo obtener el alto de la barra de tareas, pero si realmente está buscando el área utilizable del escritorio, utilice la función SystemParametersInfo
con el indicador spi_GetWorkArea
. Le indicará el área del escritorio excluyendo todas las barras de herramientas del escritorio. MSDN informa que si está interesado en el espacio disponible en algo que no sea el monitor principal, debe llamar a GetMonitorInfo
en GetMonitorInfo
lugar; llena un registro, y uno de los campos es para el área de trabajo del monitor.
Voy a secundar la idea de que realmente podrías querer maximizar tu ventana. Si ya lo hizo y desea saber cuánto espacio ocupa, obtenga el tamaño actual de su ventana y luego restar las dimensiones del marco de la ventana (que se "esconde debajo de los bordes" de el escritorio cuando se maximiza una ventana). Puede usar GetSystemMetrics
con los sm_CXFrame
y sm_CYFrame
para eso.
Voy a aceptar que probablemente quieras maximizar tu ventana.
Pero si realmente desea conocer el área del escritorio excluyendo todas las barras de herramientas del escritorio (barra de tareas, barra de herramientas de Microsoft Office, etc.), aquí hay algunas declaraciones VB6 para la llamada SystemParametersInfo y una función de muestra que centra formularios en la pantalla, permitiendo las barras de herramientas . Esto se toma prestado de 101 consejos tecnológicos (PDF) del antiguo Visual Basic Programmers Journal.
Private Const SPI_GETWORKAREA = 48
Private Declare Function SystemParametersInfo& Lib "User32" Alias "SystemParametersInfoA" ( _
ByVal uAction As Long, _
ByVal uParam As Long, lpvParam As Any, _
ByVal fuWinIni As Long)
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Function CenterForm32 (frm As Form)
Dim ScreenWidth&, ScreenHeight&, ScreenLeft&, ScreenTop&
Dim DesktopArea As RECT
Call SystemParametersInfo (SPI_GETWORKAREA, 0, DesktopArea, 0)
ScreenHeight = (DesktopArea.Bottom - DesktopArea.Top) * Screen.TwipsPerPixelY
ScreenWidth = (DesktopArea.Right - DesktopArea.Left) * Screen.TwipsPerPixelX
ScreenLeft = DesktopArea.Left * Screen.TwipsPerPixelX
ScreenTop = DesktopArea.Top * Screen.TwipsPerPixelY
frm.Move (ScreenWidth - frm.Width) / 2 + ScreenLeft, _
(ScreenHeight - frm.Height) / 2 + ScreenTop
End Function