[Lazarus-es] Formulario no refresca en ciclos grandes

Ismael L. Donis García ismael en citricos.co.cu
Mar Dic 29 18:11:57 CET 2009


Me da el siguiente error:

ufrmcierremp.pas(78,22) Error: identifier idents no member "processmesage"

pongo:

if Application.processmesage('Estás seguro que desea inicializar un nuevo día de trabajo?',pchar(caption),$00000004+$00000020+$00000100) = 7 then 
        begin
          txtmes.SetFocus;
          exit;
        end;

que Unit hay que referenciar?

El mensaje no está dentro del ciclo, sino lo que pregunta si realiza la operación o no la realiza, además no solo no refresca el formulario quedando la caja del mensaje, sino que al rato de estar operando marea la aplicación por el número tan grande de operaciones.

Repito que eso en Visual Basic se elimina traspasando la prioridad de ejecución al sistema operativo y después devolviéndosela a la aplicación.

Yo actualmente hago:

      if Application.MessageBox('Estás seguro que desea inicializar un nuevo día de trabajo?',pchar(caption),$00000004+$00000020+$00000100) = 7 then
        begin
          txtmes.SetFocus;
          exit;
        end;
      frmmp.lblestado.Caption := 'Realizando Cierre Diario';
      frmmp.Refresh;
      self.Hide;
      .............

Pero ni se me oculta la ventana de la pregunta, ni el formulario desde donde pongo la operación.

Repito eso solo ocurre en los ciclos grandes.

Saludos reiterados
=========
¦¦ ISMAEL ¦¦
=========
"Oír o leer sin reflexionar es una ocupación inútil".
               Confucio (551-479 a. C.); filósofo chino.

  ----- Mensaje original ----- 
  De: christian Ortiz 
  Para: Spanish version of Lazarus List 
  Enviado: martes, 29 de diciembre de 2009 09:15
  Asunto: Re: [Lazarus-es] Formulario no refresca en ciclos grandes


  application.processmesage dentro de tu bucle


  El 29 de diciembre de 2009 09:34, Ismael L. Donis Garc?a <ismael en citricos.co.cu> escribió:

    No, no lo puedo hacer en un proceso independiente, debe ser en el proceso
    principal. Lo que necesito es transferir el proceso a los otros sistemas de
    forma temporal o refrescar el formulario interciclo para evitar que la
    aplicación se maree ya que el sistema no debe dejar hacer nada más hasta que
    no termine esa operación. Así que no me sirve el multihilo o multihebra.

    Saludos a to2s

    =========
    ¦¦ ISMAEL ¦¦
    =========
    "Oír o leer sin reflexionar es una ocupación inútil".
                  Confucio (551-479 a. C.); filósofo chino.

    ----- Mensaje original -----
    De: "JoshyFun" <joshyfun en gmail.com>
    Para: "Spanish version of Lazarus List"

    <lazarus-es en lists.lazarus.freepascal.org>

    Enviado: lunes, 28 de diciembre de 2009 04:06
    Asunto: Re: [Lazarus-es] Formulario no refresca en ciclos grandes



    Hello christian,

    Monday, December 28, 2009, 10:38:20 PM, you wrote:

    cO> intenta algo como
    cO> application.processmessage
    cO> o usa algo mas decente con hilos de ejecucion (aveces le llaman hebras)
    cO> http://wiki.lazarus.freepascal.org/Multithreaded_Application_Tutorial/es

    Una hebra es otra cosa, aunque algunos a veces lo usan incorrectamente
    de manera indiferente.

    Cuando un sistema operativo ejecuta cosas lo puede hacer en 3 modos
    "básicos":

    Proceso:
    -------------
    A) El código tiene una zona de programa común (todas las copias del
    mismo proceso comparten el código).
    B) La zona de datos es diferent para cada proceso.
    C) Stack independiente para cada proceso.

    Thread o Hilo
    -------------
    A) El código es común entre todos los procesos iguales e hilos
    iguales.
    B) Zona de datos común para todos los hilos de un mismo proceso.
    C) Stack independiente para cada hilo.

    Fiber o hebra
    -------------
    A) El código es común entre todos los procesos iguales, hilos y
    hebras iguales.
    B) Zona de datos común para todos los hilos y hebras de un mismo
    proceso.
    C) Stack común para todos.

    Esto implica que la multitarea en una hebra o "fiber" no es posible
    del mismo modo que con un "thread", y esta ha de ser "cooperativa" al
    igual que lo eran los threads y los procesos en Win 3.1.

    La ventaja de la hebra sobre el thread es que hacer un "task
    switching" no requiere poner el procesador en modo "context switch" lo
    que requiere muchos ciclos, ya que todo el proceso se realiza en el
    modo "usuario" o "ring 3".

    Windows creo que soporta hebras desde Vista en adelante, pero
    programar con hebras es para artistas :)

    --
    Best regards,
     JoshyFun


    _______________________________________________
    Lazarus-es mailing list
    Lazarus-es en lists.lazarus.freepascal.org
    http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es



    _______________________________________________
    Lazarus-es mailing list
    Lazarus-es en lists.lazarus.freepascal.org
    http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es




  -- 
  Christian



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


  _______________________________________________
  Lazarus-es mailing list
  Lazarus-es en lists.lazarus.freepascal.org
  http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20091229/fb12147c/attachment-0002.html>


More information about the Lazarus-es mailing list