¿Cómo funciona la propiedad ZOrder en formularios que no son MDI? La tengo puesta para que me muestre un formulario superpuesto encima de otro, pero no funciona. ¿Hay qué hacer algo después de usar ZOrder? ¿Algún Refresh de los forms?
1 Respuesta
Respuesta de aja72
1
1
aja72, Desde los 14 años dedicado a la informática, principalmente...
Para poner un formulario Form1 visiblemente antes que otro bastará con que pongas: Form1. ZOrder 0 Ahora bien, en cuanto pinches en el segundo formulario, este cogerá el foco y pasará al primer plano, quedando Form1 detrás del segundo formulario. Si lo que quieres es que uno de los formularios esté "siempre visible" tendrás que recurrir a las API. Te pongo un trozo de código de ejemplo, en un formulario pon un checkbox llamado chkVisible y pega el siguiente código: ' Indicadores de SetWindowPos Const SWP_NOSIZE = &H1 Const SWP_NOMOVE = &H2 Const SWP_NOZORDER = &H4 Const SWP_NOREDRAW = &H8 Const SWP_NOACTIVATE = &H10 Const SWP_FRAMECHANGED = &H20 Const SWP_SHOWWINDOW = &H40 Const SWP_HIDEWINDOW = &H80 Const SWP_NOCOPYBITS = &H100 Const SWP_NOOWNERZORDER = &H200 Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Private Sub chkVisible_Click() If chkVisible.Value = vbChecked Then SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE Else SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE End If End Sub Si marcas el check, ningún formulario tapará esta ventana, ni siquiera tras perder el foco. Espero que te sirva de ayuda. No olvides valorar la respuesta.