When you are doing something like using the zipper lib when you tell it to compress the form becomes non responsive then comes back alive after compression is complete... When the form is responsive again it shifts..
That means you are performing the compression in the context of the main UI thread, blocking the UI message loop until the compression is finished.
When you are compressing a whole list of file it shifts back and forth the whole time... Anyway to avoid this behavior other than multi tread?
If the lib exposes a status callback event, you can call Application.ProcessMessages() (or at least TForm.Update() to process pending paint messages) while compressing a file. Otherwise, you could call it in between each file, but that means the UI is still blocked while compressing each file, and for large compressions that take time, that may still trigger the OS to flag the UI as unresponsive.
Otherwise, using a worker thread is best. You really should not be doing any blocking operations in the main UI thread at all.