The complete worrking code in my software.
1. You forgot to put the procedure PopNotifier to the interface section.
2. Use
Timer:= TTimer.Create(Self); // not TTimer.Create(nil);
and TPopupNotifier component will free the timer itself. Therefore, exclude the destructor completely.
3. Bad use of the global variable PopNotifierObj. If the PopNotifier procedure is called before the timer triggered, there will be a double release of the used object when the second timer is triggered. Change in OnTimer code to
//...
Sender.Free; // not PopNotifierObj.Free;
and move "var PopNotifierObj: TAutoclosePopupNotifier;" into the procedure PopNotifier.