[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