This code is working correctly on Win (10) and Lazarus (gtk2 and qt). Do you call Statusbar.Invalidate?
BTW, in order to show progress of some action in the statusbar, I normally use a TProgressbar and set its parent to the Statusbar. The statusbar is normally hidden and shown only while the observed process runs.