• Sábado 14 de Diciembre de 2024, 17:50

Autor Tema:  Consejos Para El Edit Box  (Leído 2353 veces)

mabauti

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Consejos Para El Edit Box
« en: Jueves 11 de Noviembre de 2004, 10:35 »
0
Hola a todos

Necesito ayuda con un programa de visual c.

En este programa hago un ordenamiento de 480,000 elementos.

En el cuadro de dialogo incluyo un "edit box", donde quiero ir poniendo el progreso del ordenamiento (0%, 1%,...99%, 100%)., el problema es que el edit box solo pone el porcentaje inicial ( 0 % )  y solo al terminar el ordenamiento me pone el 100% , sin haber visualizado valores intermedios, aun cuando los estoy enviando como a continuacion lo muestro.

   n=1;
   while  (n<101)
   {   n=m_barvalue;                       // envio a la variable del edit box
      UpdateData(FALSE);
      for (m=1; m<3000000;m++);   // efecto de retardo
      n++;
   }

como le hago para que se visualicen todos los valores del 1 al 100?
Les agradecere sus respuestas

navisoft

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.latindevelopers.com
Re: Consejos Para El Edit Box
« Respuesta #1 en: Jueves 11 de Noviembre de 2004, 20:49 »
0
Si tu variable m_barvalue esta enlazada a tu editbox entonces cambia

esto:        n = m_barvalue;
por esto:  m_barvalue = n;

en la linea:
for (m=1; m<3000000;m++);

es mejor que utilices la funcion Sleep...

Sleep(30);


Al inicio de todo el proceso puedes cambiar el cursor a su faceta de reloj de arena agregando esta linea al principio de tu funcion.

CWaitCursor x;

Eso será suficiente..

mabauti

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Consejos Para El Edit Box
« Respuesta #2 en: Sábado 13 de Noviembre de 2004, 12:19 »
0
Navisoft :

ajuste el programa a como me dices solo que este continua igual;
intente referenciarla como apuntador

int  *ptrV

ptrV = &m_value


y luego la incremento

*ptrV++;


pero nada. :(

la funcion sleep es opcional para mi.  :comp:

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Consejos Para El Edit Box
« Respuesta #3 en: Sábado 13 de Noviembre de 2004, 14:01 »
0
Hola  :hola:

Si no recuerdo mal UpdateData(false) era para actualizar el cuadro de texto, pero no actualiza la variable

Para actualizar la variable que has relacionado con la caja de texto es UpdateData(true).

Prueba a ver si va esto

Código: Text
  1.  
  2. n=1;
  3. while (n&#60;101)
  4. {
  5.  n=m_barvalue; // envio a la variable del edit box
  6. UpdateData(true);
  7. UpdateData(false);
  8. for (m=1; m&#60;3000000;m++); // efecto de retardo
  9. n++;
  10. }
  11.  
  12.  

un saludo  :hola:

mabauti

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Consejos Para El Edit Box
« Respuesta #4 en: Domingo 14 de Noviembre de 2004, 10:50 »
0
Diodo, probé lo que me dijiste pero no funcionó.

¿Tal vez haya que acceder a un miembro de la clase a la que pertenece el edit box ?
algo como
 
classeinicial::onEditBox..

 :ph34r:

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Consejos Para El Edit Box
« Respuesta #5 en: Domingo 14 de Noviembre de 2004, 13:04 »
0
Hola  :hola:

Para mi que el problema sera seguramente de los bucles, ya que en visual c++ al tratarse de programacion orientada a objetos que interactuan con mensajes, se necesita de un proceso que actualice la aplicacion cada x tiempo

Te voy a decir otra forma mucho mejor de hacer el contador que pretendes

primero tienes que crear un metodo OnTimer en la aplicacion( que supongo sera un dialogo). Para ello te vas al class wizard (ctrl +w) y en la pestaña de metodos y seleccionando la clase de dialogo , escoges en la lista el metodo ontimer.

seguidamente hay que iniciar el timer, para ello supongo un boton que al presionar empieza el timer:

Código: Text
  1.  
  2.  
  3. void CContarDlg::OnContar()
  4. {
  5.   
  6. SetTimer(1,50,NULL); // Esta es la funcion que inicia el timer, tiene 3 parametros
  7.                                 // el primero es un entero para identificar el timer, si
  8.                                 // tuvieras x timers tendrias que poner 1..... hasta x
  9.                                 // identificadores distintos.El segundo parametro es el
  10.                                // tiempo en milisegundos que tarda en actualizarse el
  11.                                // timer, si quieres cada 1 seg pones 1000.El último
  12.                                // argumento es un indicador de la funcion que se
  13.                               // va a ejecutar cada vez que se recibe el mensaje de
  14.                                // temporizacion , si pones NULL se pasa un mensaje a
  15.                                // la aplicacion que ha hecho la llamada a SetTimer
  16.     
  17. }
  18.  
  19.  
  20.  


Por ultimo hay que implementar la funcion OnTimer que es la que dice lo que hay que hacer cada vez que cambia el timer (es decir cada vez que pasan 50 ms en este caso). En tu caso seria importante ver cual el tiempo de refersco del timer optimo para que no te pase por ejemplo de un 15% a un 20% o que vaya tan rapido que relentice la aplicacion, pero eso ya lo veras segun tarde el programa en ordenar los elementos, divides entre 100 y mas o menos obtienes una fecuencia optima para el timer

Código: Text
  1.  
  2.  
  3. void CContarDlg::OnTimer(UINT nIDEvent)
  4. {
  5.  
  6. CDialog::OnTimer(nIDEvent);  // codigo que crea el visual c++
  7. CString numero; // creamos una variable cstring
  8. static int tiempo=0;  // y una variable static int para el contador
  9. tiempo=(tiempo+1)%101; // incrementamos el contador, lo del
  10.                                        // modulo es por si no quieres que pase
  11.                                        // de un cierto numero , en este caso 101
  12. numero.Format(&#34;%d&#34;,tiempo); // convertimos tiempo que es int
  13.                                             // en un CString mediante format
  14. m_contador=numero; // pasamos el numero en forma de CString
  15.                                 // a la variable de la caja de texto
  16. UpdateData(false);  // actualizamos la caja de texto
  17. if(m_contador==&#34;100&#34;)KillTimer(1); //Por ultimo si quieres que el
  18.                                                     // contador se pare puedes usar
  19.                                                     // la funcion KillTimer  indicando
  20.                                                     // el identificador 1 en este caso
  21.                                                     // del timer iniciado en OnContar
  22. }
  23.  
  24.  
  25.  

Esto es todo, espero que te sirva de ayuda.Un saludo  :hola:

Aqui te adjunto el ejecutable para que veas como funciona
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

mabauti

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Consejos Para El Edit Box
« Respuesta #6 en: Lunes 15 de Noviembre de 2004, 07:55 »
0
Caracoles Diodo!  mi programa ya funcionó.

Gracias por tu ayuda!

  :beer: