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

[0] Índice de Mensajes

Ir a la versión completa