Programación General > Visual Basic 6.0 e inferiores

 Presentacion Del Programa

(1/2) > >>

UserCode:
hola buenas a todos!!

Esto no es algo de tema impotanton o serio, es algo de "ver si se puede o no" lo cual es referente a esa ventanita de presentacion que sale cuando se ejecuta un programa.

Pero en mi caso tengo una idea algo loca sobre como mostrar esa ventanita de presentacion, veran...

Yo he puesto en esa ventanita este código, el cual fuerza al Form a ser transparente, con un Alpha bajo, algo asi como papel cebolla:

--- Código: Text --- 'Codigo Interezante para forzar transparencia en un form de manera muy sencilla y con transparencia graduable Private Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" _(ByVal hWnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" _(ByVal hWnd As Long, ByVal nIndex As Long, _ByVal dwNewLong As Long) As LongPrivate Const GWL_STYLE = (-16)Private Const GWL_EXSTYLE = (-20)'Requires Windows 2000 or later:Private Const WS_EX_LAYERED = &H80000 Private Declare Function SetLayeredWindowAttributes Lib "USER32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Const LWA_COLORKEY = &H1Private Const LWA_ALPHA = &H2 Public Sub MakeWindowTransparent(ByVal hWnd As Long, ByVal alphaAmount As Byte)Dim lStyle As LonglStyle = GetWindowLong(hWnd, GWL_EXSTYLE)lStyle = lStyle Or WS_EX_LAYEREDSetWindowLong hWnd, GWL_EXSTYLE, lStyleSetLayeredWindowAttributes hWnd, 0, alphaAmount, LWA_ALPHAEnd Sub 'La transparencia es graduable modificando el alphaamount en este caso esta en 150 mientras menor es este valor mas transparente se tornaPrivate Sub Form_Load()Call MakeWindowTransparent(Form1.hWnd, 150)End Sub  
Ese código, sin modulo ni archivo externo, solo eso en un Form1 y sale el efecto, bueno mi idea es usar eso para la ventanita de presentacion pero con una variación la cual es la siguiente idea..

Que la ventana comienze con eso del alpha=0 y que con un bucle For o controles Timer suba poco a poco gradualmente hasta 250 que es ya el valor de visualización normal de la ventana.  Y que al alcanzar el 250, vuelva poco a poco a bajar a 0.

Es decir, que la ventana aparezca gradualmente y se vaya desvaneciendose, ese es el efecto, sé que en Call MakeWindowTransparent(Form1.hWnd, 150) en el 150 podría poner una variable Intener "i" pero me he enrredado un poco tratando de ver como hacer esto, y he terminado con bucles infinitos y colgadas del vb.

bueno esto es para un programita y la presentacion pienso hacerles una bromita con esta imagen que muestro abajo como presentación, eso por lo del halloween, ya saben de donde saca McDonnald sus carnes para hamburquesa, por eso el dicho de  "somos lo que comemos" o algo asi  :nosweat:

la gente a quienes les estoy haciendo algo a veces se juegan con uno y bueno, les voy a poner eso de presentacion para ver que caras ponen, quien quita que hasta digan algo como:
 :huh: oye no esta mal, nos gusta dejale eso asi.

claro le falta ponerle el nombre del programa, version, etc... :lol:

Creen que si se pueda sin problemas verdad! pregunto no sé :mellow:

F_Tanori:
Que tal usercode como va todo

cual es el drama?


yo te aconsejo este codigo


--- Código: Text --- Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" _(ByVal hWnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" _(ByVal hWnd As Long, ByVal nIndex As Long, _ByVal dwNewLong As Long) As LongPrivate Const GWL_STYLE = (-16)Private Const GWL_EXSTYLE = (-20)'Requires Windows 2000 or later:Private Const WS_EX_LAYERED = &H80000 Private Declare Function SetLayeredWindowAttributes Lib "USER32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Const LWA_COLORKEY = &H1Private Const LWA_ALPHA = &H2 Public Sub MakeWindowTransparent(ByVal hWnd As Long, ByVal alphaAmount As Byte)Dim lStyle As LonglStyle = GetWindowLong(hWnd, GWL_EXSTYLE)lStyle = lStyle Or WS_EX_LAYEREDSetWindowLong hWnd, GWL_EXSTYLE, lStyleSetLayeredWindowAttributes hWnd, 0, alphaAmount, LWA_ALPHAEnd Sub 'La transparencia es graduable modificando el alphaamount en este caso esta en 150 mientras menor es este valor mas transparente se tornaPrivate Sub Form_load() MakeWindowTransparent Form1.hWnd, 0 'Iniciar en 'invisible' Me.Timer1.Interval = 10 'Iniciar el timerEnd Sub Private Sub Timer1_Timer()Dim Valor As Integer, Avance As IntegerDim Vueltas As Integer, Retardo As IntegerDim Desde As Integer, Hasta As Integer Avance = 1Desde = 0Hasta = 250Retardo = 10   For Vueltas = 1 To 2        For Valor = Desde To Hasta Step Avance       '   Sleep Retardo  'Si se requiere que el efecto sea mas pausado           MakeWindowTransparent Form1.hWnd, Valor           DoEvents        Next Valor    Avance = -1    Desde = 250    Hasta = 0  Next VueltasMe.Timer1.Enabled = FalseUnload MeEnd Sub 
Notas: Agrega una api para el retardo (sleep) por si acaso tambien funciona sin el pero por si esta demaciado rápido, y un control timer

Saludos y espero que te sirva

UserCode:
epale!! compadre todo bien bien gracias  :D

Gracias F_Tanori si sirve bien, pero como hago para que al llegar a 250 se quede en ese valor unos 2 o 3  segundos y luego vuelva a 0 ??? :mellow:

luciano2:
Hola que tal, una idea, podes agregar un retardo con la función Timer en un while, do loop. por ejemplo:

 For Vueltas = 1 To 2
       For Valor = Desde To Hasta Step Avance
      '   Sleep Retardo  'Si se requiere que el efecto sea mas pausado
          MakeWindowTransparent Form1.hWnd, Valor
          DoEvents
       Next Valor
       
       seg = Timer
       
       While Timer < seg + 3
       DoEvents
       Wend
       

       
   Avance = -1
   Desde = 250
   Hasta = 0
 Next Vueltas




..donde dice While Timer < seg + 3, cambia el 3 por los segundos


saludos




----------------------------------

recursos visual basic, ocx y codigo fuente

F_Tanori:
...gracias por la aportacion de luciano2 es una respuesta correcta..... aqui esta otra idea


Private Sub Timer1_Timer()
Dim Valor As Integer, Avance As Integer
Dim Vueltas As Integer, Retardo As Integer
Dim Desde As Integer, Hasta As Integer

Avance = 1
Desde = 0
Hasta = 250
Retardo = 10

 For Vueltas = 1 To 2
       For Valor = Desde To Hasta Step Avance
      '   Sleep Retardo  'Si se requiere que el efecto sea mas pausado
          MakeWindowTransparent Form1.hWnd, Valor
          DoEvents
       Next Valor
   Avance = -1
   Desde = 250
   Sleep 3000 '<--- Aqui va el retardo en milisegundos
   Hasta = 0
 Next Vueltas

Me.Timer1.Enabled = False
Unload Me
End Sub

Saludos y suerte

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa