Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
Tengo esto en código:

Public Sub b5_Click() 'BUSCADOR DE ARCHIVOS
  
  If Last.value = True Then
    levantabotones(Last)
  Endif
  
  Label1.Text = "Actualizando base de datos..."
  Label1.Show
  Application.Busy = 1
  Shell "recollindex" To salida
  Print salida
  Application.busy = 0
  
  Label1.Text = ""
  
End


Cuando pulso el botón, no llega a aparecer el "Actualizando base de datos..." porque antes de que termine el procedimiento le doy valor "" y por lo visto sólo se refresca en pantalla cuando termina el procedimiento. ¿Cómo lo hago entonces?
 



 
guadafan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
Es claro que el procedimiento es muy veloz. Propono un
Wait 1

Label1.Text = ""


     lipsrsealed
 



 
última edición por vuott el Miercoles, 03 Septiembre 2014, 15:46; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
Guadafan:

Citar:
por lo visto sólo se refresca en pantalla cuando termina el procedimiento

Si, es por eso, solo se refresca cuando termina el procedimiento .


Otra idea:

Public Sub b5_Click() 'BUSCADOR DE ARCHIVOS

If Last.value = True Then
levantabotones(Last)
Endif
Label1.Text = "Actualizando base de datos..."

SubrutinaTrabajo 'ejecutará la subrutina, pero continua con la subrutina b5 (es como si fuera otro hilo)

End


public sub subrutinaTrabajo()
Application.Busy = 1
Shell "recollindex" To salida
Print salida
Application.busy = 0

Label1.Text = ""
end

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Miercoles, 03 Septiembre 2014, 13:02; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
Tampoco así me sale  

Adjunto projecto por si tenéis tiempo de echarle un ojo.

minilauncher-0.0.7.tar.gz
Descripción:  
Descargar
Nombre del archivo: minilauncher-0.0.7.tar.gz
Tamaño: 29.4 KB
Descargado: 31 veces
minilauncher-0.0.7.tar.gz
Descripción:  
Descargar
Nombre del archivo: minilauncher-0.0.7.tar.gz
Tamaño: 29.4 KB
Descargado: 31 veces
minilauncher-0.0.7.tar.gz
Descripción:  
Descargar
Nombre del archivo: minilauncher-0.0.7.tar.gz
Tamaño: 29.4 KB
Descargado: 31 veces

 



 
guadafan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
Solo añade Wait 1 antes de borrar el contenido del label:

Public Sub b5_Click() 'BUSCADOR DE ARCHIVOS
  
  If Last.value = True Then
    levantabotones(Last)
  Endif
  
  Label1.Text = "Actualizando base de datos..."
  Label1.Show
  Application.Busy = 1
  Shell "recollindex" To salida
  Print salida
  Application.busy = 0

  Wait 1 ' <-----------------

  Label1.Text = ""
  
End


Eso hace que (después de ejecutar el código anterior) se espere un segundo para asignar una cadena vacía a la etiqueta. No sólo eso, sino que además se llama recursivamente al eventloop, permitiendo que se ejecute el código antes de que termine el procedimiento actual.

Supongo que si no añades esto, el proceso se ejecuta tan rápido que no da tiempo a ver el texto de la etiqueta... así que realmente esto añade un tiempo extra al total de la ejecución del código.

Saludos

Edito: Si pones el Wait 1 justo antes de Application.Busy = 0, podrás ver además el cursor de espera.
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
Hay que  usar procesos...

' gambas class file

Private hprocess As Process
Private salida As String

Public Sub _new()

End

Public Sub Form_Open()

End

Public Sub Button1_Click()

  'Dim salida As String anula esta linea

  Label1.Text = "Actualizar los datos"

  hprocess = Shell "ls -lha"
  While hprocess.State = hprocess.Running
    Wait 0.1
  Wend

  Label1.text = "fin de espera"
  Print "Salida generada:", salida

End

Public Sub hprocess_read()

  Dim cadena As String

  Line Input #Last, cadena
  salida &= cadena

End
 


Nota:
En tu caso particular seria:
Public hprocesso As Process
Public salida As String

Public Sub b5_Click() 'BUSCADOR DE ARCHIVOS

  If Last.value = True Then
    levantabotones(Last)
  Endif

  Label1.Text = "Actualizando base de datos..."
  Label1.Show
  Application.Busy = 1
  hprocesso = Shell "recollindex"
  While hprocesso.State = hprocesso.Running
    Wait 0.1
  Wend
wait 1 'añadir esta linea si el proceso es muy rápido, para que deje ver la etiqueta inicial "Actualizando base de datos..."
  Print salida
  Application.busy = 0

  Label1.Text = ""

End

Public Sub hprocesso_read()

  Dim cadena As String

  Line Input #Last, cadena

  salida &= cadena

End
 


En mi ordenador es muy rápido y no se ve el mensaje, entonce se deberia de añadir (como te han comentado Jguardon y Vuott) una pequeña espera forzada, con wait 1
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Miercoles, 03 Septiembre 2014, 18:21; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
Sí, con el wait sale bien, me parece un poco raro depender de un wait para hacer esto la verdad, porque en cierto modo quiere decir que dependiendo de la velocidad de la máquina lo hará o no.

Lo que me ha pillado por sorpresa es que el hecho de picar en otro toglebutton llame de nuevo al evento clic del botón que tenía antes presionado, haciendo una indeseable re-indexación de la base de datos  
 



 
guadafan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
Citar:

Hay que  usar procesos...

Eso es lo correcto... cuando queremos procesar la salida del comando shell de alguna manera mientras se está ejecutando. Si símplemente quieres esperar a que acabe, basta con

Application.Busy = 1
Shell "recollindex" wait
Print salida
Application.busy = 0


Más simple. Aunque lo que ha apuntado jsbsan es lo más completo, of course...

Saludos
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cómo Hago Para Actualizar Un Label Desde El Mismo Procedimiento? 
 
guadafan escribió: [Ver mensaje]

Lo que me ha pillado por sorpresa es que el hecho de picar en otro toglebutton llame de nuevo al evento clic del botón que tenía antes presionado, haciendo una indeseable re-indexación de la base de datos  


Eso no es porque pulses otro botón, sino porque al pulsar otro botón cambias el estado del togglebutton anterior y se vuelve a disparar su evento click().

Tendrás que usar una condición que compruebe la propiedad Value del togglebutton para que sólo se ejecute el código cuando su valor sea verdadero (esté pulsado).

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Procedimiento Almacenado MySQL Desde Gambas ricard_m Bases de Datos 0 Sabado, 24 Julio 2010, 20:37 Ver último mensaje
ricard_m
No hay nuevos mensajes Como Hago Para Crear Un Label Con Fondo De... jorssoftware General 4 Domingo, 20 Julio 2014, 13:41 Ver último mensaje
Shell
No hay nuevos mensajes ¿ Cómo Colocar Un Background De Gradient... Shell General 5 Lunes, 21 Julio 2014, 01:01 Ver último mensaje
vuott
No hay nuevos mensajes Permisos De Los Archivos Al Actualizar Des... Shell Mundo Linux 2 Viernes, 31 May 2019, 08:34 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron