producir un evento mientras piensa

Iniciado por fraktal, 2 Octubre 2006, 12:10 PM

0 Miembros y 1 Visitante están viendo este tema.

fraktal

Hola, quedria saber si en visual basic se produce algun evento cuando la maquina esta realizando una accion y aprovecharlo pues para hacer cualquier cosa, como cambiar el icono al reloj de arena etc. O si no se produce ningun evento como hacerlo. Pongamos por caso, que tengo un boton, y con ese boton abro un archivo asi.
open cd.filename for binary as #1
file = len(cd.filename)
get #1, , file
close #1
bien pues esto si escojo un archivo grande, el formulario en cuestion se queda el rato que esta trabajando digamos que casi bloqueado, osea la sensacion visual que da es que sa quedado pillado aunque no es asi. Y eso quisiera saber si en este momento se produce algun evento o como podria hacer para que el formulario se quedase intacto (dado que si cargas el archivo con un common dialog al abrirlo digamos k no se actualiza completamente el formulario de abajo mientras inicia la carga), y eso para que quede el formulario bien, o poner que se cambie el icono, o incluso una barra de prgreso mientras carga, etc. Gracias y saludos.

_Sergi_

Sólo tienes que usar la propiedad MousePointer.

Por ejemplo

Private Sub Command1_Click()
'Proceso empieza
Screen.MousePointer = vbHourglass
open cd.filename for binary as #1
file = len(cd.filename)
get #1, , file
close #1
'Proceso termina
Screen.MousePointer = vbDefault.
End Sub


En el caso de que quisieras utilizar un icono personalizado, sería algo así


Screen.MouseIcon = LoadPicture("C:\Test\Cursor.cur")
Screen.MousePointer = vbCustom


También puedes cursores desde archivos externos. Como sabes VB 6 no incluye el cursor de la mano; lo podrías usar de éste modo:

'En un módulo
Public Const HandCursor = 32649&
Public Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'En el evento MouseMove del form, botón etc
Dim lHandle As Long
lHandle = LoadCursor(0, HandCursor)
If (lHandle > 0) Then SetCursor lHandle
End Sub


Bien, lo mismo que te dije se aplica a las barras de progreso. Simplemente, cada vez que se complete un proceso, súmale un número a la propiedad Value de la ProgressBar

Por ejemplo

'Empieza el proceso
Process1.Value = 0
Kill "C:\TEMP\*.tmp"
Process1.Value = 25
Dim Datos as String
Dim Hora as Variant
Process1.Value = 75
Msgbox "Datos " & Datos & " " & "Hora: " & Hora
'Proceso terminado
Process1.Value = 100
Msgbox "Terminado"


Y para terminar, aclararte que no se produce ningún evento mientras VB6 realiza una acción.

Un saludo

Proyecto de Ingeniero

fraktal

Gracias sergi, me ha quedado muy claro. Gracias. S2.