[Lazarus-es] Formulario no refresca en ciclos grandes

christian Ortiz xortix en gmail.com
Mar Dic 29 18:00:29 CET 2009


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 <xortix en gmail.com>
> *Para:* Spanish version of Lazarus List<lazarus-es en lists.lazarus.freepascal.org>
> *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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20091229/b2211c08/attachment-0002.html>


More information about the Lazarus-es mailing list