• Domingo 22 de Diciembre de 2024, 23:05

Autor Tema:  Presentacion Del Programa  (Leído 1943 veces)

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Presentacion Del Programa
« en: Jueves 2 de Noviembre de 2006, 02:12 »
0
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
  1.  
  2. 'Codigo Interezante para forzar transparencia en un form de manera muy sencilla y con transparencia graduable
  3.  
  4. Private Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" _
  5. (ByVal hWnd As Long, ByVal nIndex As Long) As Long
  6. Private Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" _
  7. (ByVal hWnd As Long, ByVal nIndex As Long, _
  8. ByVal dwNewLong As Long) As Long
  9. Private Const GWL_STYLE = (-16)
  10. Private Const GWL_EXSTYLE = (-20)
  11. 'Requires Windows 2000 or later:
  12. Private Const WS_EX_LAYERED = &H80000
  13.  
  14. Private Declare Function SetLayeredWindowAttributes Lib "USER32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
  15. Private Const LWA_COLORKEY = &H1
  16. Private Const LWA_ALPHA = &H2
  17.  
  18. Public Sub MakeWindowTransparent(ByVal hWnd As Long, ByVal alphaAmount As Byte)
  19. Dim lStyle As Long
  20. lStyle = GetWindowLong(hWnd, GWL_EXSTYLE)
  21. lStyle = lStyle Or WS_EX_LAYERED
  22. SetWindowLong hWnd, GWL_EXSTYLE, lStyle
  23. SetLayeredWindowAttributes hWnd, 0, alphaAmount, LWA_ALPHA
  24. End Sub
  25.  
  26. 'La transparencia es graduable modificando el alphaamount en este caso esta en 150 mientras menor es este valor mas transparente se torna
  27. Private Sub Form_Load()
  28. Call MakeWindowTransparent(Form1.hWnd, 150)
  29. End Sub
  30.  
  31.  

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:
Si esto es Leído por accidente, induzca al vomito

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Presentacion Del Programa
« Respuesta #1 en: Jueves 2 de Noviembre de 2006, 04:10 »
0
Que tal usercode como va todo

cual es el drama?


yo te aconsejo este codigo

Código: Text
  1.  
  2. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  3. Private Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" _
  4. (ByVal hWnd As Long, ByVal nIndex As Long) As Long
  5. Private Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" _
  6. (ByVal hWnd As Long, ByVal nIndex As Long, _
  7. ByVal dwNewLong As Long) As Long
  8. Private Const GWL_STYLE = (-16)
  9. Private Const GWL_EXSTYLE = (-20)
  10. 'Requires Windows 2000 or later:
  11. Private Const WS_EX_LAYERED = &H80000
  12.  
  13. Private Declare Function SetLayeredWindowAttributes Lib "USER32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
  14. Private Const LWA_COLORKEY = &H1
  15. Private Const LWA_ALPHA = &H2
  16.  
  17. Public Sub MakeWindowTransparent(ByVal hWnd As Long, ByVal alphaAmount As Byte)
  18. Dim lStyle As Long
  19. lStyle = GetWindowLong(hWnd, GWL_EXSTYLE)
  20. lStyle = lStyle Or WS_EX_LAYERED
  21. SetWindowLong hWnd, GWL_EXSTYLE, lStyle
  22. SetLayeredWindowAttributes hWnd, 0, alphaAmount, LWA_ALPHA
  23. End Sub
  24.  
  25. 'La transparencia es graduable modificando el alphaamount en este caso esta en 150 mientras menor es este valor mas transparente se torna
  26. Private Sub Form_load()
  27.  MakeWindowTransparent Form1.hWnd, 0 'Iniciar en 'invisible'
  28.  Me.Timer1.Interval = 10 'Iniciar el timer
  29. End Sub
  30.  
  31. Private Sub Timer1_Timer()
  32. Dim Valor As Integer, Avance As Integer
  33. Dim Vueltas As Integer, Retardo As Integer
  34. Dim Desde As Integer, Hasta As Integer
  35.  
  36. Avance = 1
  37. Desde = 0
  38. Hasta = 250
  39. Retardo = 10
  40.  
  41.   For Vueltas = 1 To 2
  42.         For Valor = Desde To Hasta Step Avance
  43.        '   Sleep Retardo  'Si se requiere que el efecto sea mas pausado
  44.            MakeWindowTransparent Form1.hWnd, Valor
  45.            DoEvents
  46.         Next Valor
  47.     Avance = -1
  48.     Desde = 250
  49.     Hasta = 0
  50.   Next Vueltas
  51. Me.Timer1.Enabled = False
  52. Unload Me
  53. End Sub
  54.  

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
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Presentacion Del Programa
« Respuesta #2 en: Jueves 2 de Noviembre de 2006, 16:25 »
0
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:
Si esto es Leído por accidente, induzca al vomito

luciano2

  • Miembro activo
  • **
  • Mensajes: 71
    • Ver Perfil
    • http://www.recursosvisualbasic.com.ar/
Re: Presentacion Del Programa
« Respuesta #3 en: Jueves 2 de Noviembre de 2006, 18:31 »
0
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

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Presentacion Del Programa
« Respuesta #4 en: Jueves 2 de Noviembre de 2006, 18:45 »
0
...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
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Presentacion Del Programa
« Respuesta #5 en: Jueves 2 de Noviembre de 2006, 21:00 »
0
hola, he probado ambas formas y la aparicion, quieto por 3 segundos y vuelto a desvanecer poco a poco es todo un exito   :bravo:

Mil gracias a ambos, gracias muchachos espero no haber sido muy excentrico con esta idea de la ventanita de presentacion  B)

Tremenda presentacion que tendra el programita, claro que ya le pondre otra imagen hehe  :kicking:
Si esto es Leído por accidente, induzca al vomito

UserCode

  • Miembro MUY activo
  • ***
  • Mensajes: 338
    • Ver Perfil
Re: Presentacion Del Programa
« Respuesta #6 en: Viernes 3 de Noviembre de 2006, 15:52 »
0
hola,

no te preocupes, es en plataforma xp en donde estara el programita, gracias  :comp:

 :hola:
Si esto es Leído por accidente, induzca al vomito

luciano2

  • Miembro activo
  • **
  • Mensajes: 71
    • Ver Perfil
    • http://www.recursosvisualbasic.com.ar/
Re: Presentacion Del Programa
« Respuesta #7 en: Viernes 3 de Noviembre de 2006, 19:58 »
0
Hola, me alegro que te sirva.

Te comento por si no sabías, que esa función solo te va a servir para plataformas windows 2000 y xp, pero en win 98 y Me no funciona.  &lt;_&lt;


...saludos


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

Recursos visual basic