I test this on Linux x64 (gtk2 and qt5).
Demo attached.
What app must do. When I start typing (e.g. I hold 'd') in TEdit, timer starts, and on each TEdit.OnChange timer is disabled+enabled. I expect to see OnTimer call only when I release the pressed key.
But: I see OnTimer call also when I press the key. It is unneeded for me.
I want to receive the OnTimer in buffered way - if I type faster than Timer1.Interval I want to get only the LAST OnTimer. Not all intermediate OnTimer calls. Demo supports this - it does in TEdit.OnChange
Timer1.Enabled:= false;
Timer1.Enabled:= true;
Lazarus 2.3.0 (rev main-2_3-1386-g23b2324f9f) FPC 3.2.3 x86_64-linux-gtk2