J'ai une application héritée ici qui a quelques boucles «chronophages» qui se déclenchent à la suite de diverses interactions de l'utilisateur. Le code qui prend du temps met régulièrement à jour quelque chose sur l'écran avec des informations de progression (généralement une étiquette), puis, apparemment pour persuader l'actualisation visuelle de se produire là-bas, le code appelle Application.ProcessMessages (argh!). Nous savons tous maintenant quel genre de problème cela peut introduire dans une application GUI (caritative, c'était un moment plus innocent à l'époque) et nous constatons que, comme les œufs, de temps en temps nous obtenons des utilisateurs l'impossible avec le programme parce qu'ils cliquent sur des contrôles pendant que le programme est 'occupé'.Obtenez la fenêtre pour actualiser (etc) sans appeler Application.ProcessMessages?
Quelle est la meilleure façon d'actualiser périodiquement les visuels du formulaire sans prendre en charge d'autres événements/messages, etc.?
Mes pensées étaient soit;
- désactiver tous les contrôles avant de faire quoi que ce soit du temps, et en laissant les appels » ... ProcessMessages de mises en place pour la « force » l'actualisation ou
- trouver un autre moyen de rafraîchir un contrôle périodique
Je peux faire le premier mais il m'a laissé me demander - y at-il une meilleure solution?
exemple de code de l'héritage;
i:=0; while FJobToBeDone do begin DoStepOfLoop; inc(i); if i mod 100 = 0 then begin UpdateLabelsEtc; Application.ProcessMessages; end; end;
Je peux déjà vous entendre tous s'évanouir, à l'arrière. :-)
spot sur mghie , Merci! J'ai laissé tomber ceci dans quelques endroits clés d'échantillon et lui ai donné un essai rapide; les mises à jour de l'écran se passent bien, mais les contrôles ne génèrent pas de «nouveaux» événements lorsque le formulaire est occupé. Si je combine cela avec le verrouillage explicite du formulaire lorsque le travail démarre, j'ai bon espoir que cela empêchera les événements indésirables d'avoir lieu. Merci beaucoup! – robsoft