Programación General > Visual Basic 6.0 e inferiores
Formulario siempre visible
(1/1)
Carlos Camargo:
Buenas
Estoy elavorando una aplicacion en visual basic 6.0 y necesito que cuando se active me bloquee el escritorio y quede en encima de cualquier aplicacion windows incluyendo los juegos.
Gracias.
--- Código: Visual Basic ---
Nebire:
Debes usar la api: 'SetWindowPos'
Esta es la declaración: Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (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
Los parámetros son:
hwnd : el hwnd del formulario en cuestión.
hWndInsertAfter: este parámetro significa 2 cosas, o bien el hwnd del formulario sobre el que se posicionará debajo , o una constante que indica como se comporta en el orden Z, estas constantes te las describo como una enumeración al final... en el ejemplo...
X: la nueva posición horizontal
y: la nueva posición vertical
CX: el nuevo ancho que le quieres dar
CY: el nuevo alto que le quieres dar
wFlags: son estados para especificar más opciones de tamaño y posición, resulta bastante largo de especificar en detalle, por lo que lo omito...
Para probar el programa copia el código y pégalo a un nuevo proyecto, añade un botón y dale a ejecutar.... Ten en cuenta que los valores que lo colocan en primer plano son los valores -1 y 0 y el valor que le devuelve la 'normalidad' es el valor -2.
--- Código: Visual Basic --- Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (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 Const MOSTRAR_VENTANA = 64 ' es el flag que vamos a meter... en hexadecimal es H40 ' las constantes cuando el parámetro hWndInsertAfter utiliza constantes...private enum enPosicionZ ORDEN_NORMAL= -2 ORDEN_EN_LA_CIMA= -1 ORDEN_ENCIMA=0 ORDEN_DEBAJO=1 end enum Private Type Rectangulo X As Long Y As Long Ancho As Long Alto As LongEnd Type Private p_OrdenZ As enPosicionZPrivate AreaF As Rectangulo Friend Property Get OrdenZ() As enPosicionZ OrdenZ = p_OrdenZEnd Property Friend Property Let OrdenZ(ByVal oz As enPosicionZ) If p_OrdenZ <> oz Then If oz > -3 And oz < 2 Then p_OrdenZ = oz Call getRect Call SetWindowPos(Me.hwnd, p_OrdenZ, AreaF.X, AreaF.Y, AreaF.Ancho, AreaF.Alto, MOSTRAR_VENTANA) msgBox("Nuevo orden z: " & p_OrdenZ) End If End If End Property Private Sub Command1_Click() Static n As Integer n = n + 1 If n = 2 Then n = -2 OrdenZ = nEnd Sub ' toma la posición y medidas actuales del FormularioPrivate Function getRect() AreaF.X = ScaleX(Me.Left, vbTwips, vbPixels) + 0 ' previsto para añadir alguna variable AreaF.Y = ScaleY(Me.Top, vbTwips, vbPixels) + 0 AreaF.Ancho = ScaleX(Me.Width, vbTwips, vbPixels) + 0 AreaF.Alto = ScaleY(Me.Height, vbTwips, vbPixels) + 0End Function
Por último indicarte que no abuses de colocar ventanas encima del todo, deja que el usuario decida si le interesa o no. Sólo los malos programadores y las malas aplicaciones le quitan la decisión al usuario...
Nota: en el modo -1 comparte orden con el administrador de tareas, el que tenga el foco activo se coloca encima... es para evitar fantasmadas de lamers...
p.d.: se me olvidaba... para que se quede encima de la barra de tareas, debes maximizar la ventana y ponerla sin bordes, estos es, establece en diseño: windowstate=2 y borderstyle=0
Navegación
Ir a la versión completa