Es mag albern klingen, aber ich begegnete ein paar Situationen, wenn ich möchte, dass die Anwendung nicht zeigt, was passiert, bis eine andere spezifische Aktion passiert (StringGrids sind mit Daten gefüllt, UI ist vorbereitet ...). Gibt es eine Möglichkeit zu verhindern, dass Nachrichten von der Anwendung an das Betriebssystem gesendet werden?Delphi - Halten Sie die Systemmeldungen/verhindern UI Neuzeichnen?
So gibt es einige oposit zu
application.processmessages
? Etwas wie:
application.stopProcessingMessages;
fill stringGrids, prepare the UI...
application.processMessagesAgain;
?
Natürlich könnte ich die Aktionen in einem separaten Thread ausführen, aber es gibt Situationen, in denen ich entweder nicht möchte oder es nicht in einem separaten Thread tun kann.
Was ist * Raster *? Es gibt keine * Application.StopProcessingMessages *, aber abhängig davon, was Sie gerade tun, gibt es Möglichkeiten, einige Komponenten davon abzuhalten, den Bildschirm zu aktualisieren. Da Sie jedoch keine wirklich relevanten Informationen veröffentlicht haben, ist es schwierig, Vorschläge zu machen. Was Sie für Code gepostet haben, ist ziemlich viel. * Ich habe einen Code, der blah macht, blah, blah. Wie ändere ich das Verhalten dieses Codes ohne irgendwelche Details? * –
Viele verschiedene Möglichkeiten, diesen zu enthüllen. Beginnend mit einem Steuerelement über als ein Gitter. Eine Listenansicht im virtuellen Modus zum Beispiel. Alle Ihre Daten in einer UI-Steuerung zu halten, ist ein schlechtes Design. Sie ernten nur die Konsequenzen davon. Das Unterdrücken von Malen wäre eine Möglichkeit, es zu reparieren. Nicht zu schwer zu erreichen. Sie sollten niemals 'ProcessMessages' aufrufen. Sie würden wahrscheinlich von einem besseren Verständnis der Funktionsweise von Windows-Nachrichten profitieren. –
Ich möchte mich nicht genau an das Rasterbeispiel halten. Aber in diesem Fall spreche ich über TStringGrid –