[Lazarus-es] Formulario no refresca en ciclos grandes

Ismael L. Donis García ismael en citricos.co.cu
Mar Dic 29 19:41:53 CET 2009


Perfecto.

1 Millón de Gracias
=========
¦¦ 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 11:00
  Asunto: Re: [Lazarus-es] Formulario no refresca en ciclos grandes


  asi no trabaja 


  while algo_ocurra do begin

      Application.ProcessMessages;
      ... to codigo

  end


  2009/12/29 Ismael L. Donis García <ismael en citricos.co.cu>

    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


    _______________________________________________
    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/54ba8e09/attachment-0002.html>


More information about the Lazarus-es mailing list