Ob ein Subclassing dafür die richtige lösung ist (auch wenn es funktioniert) mag dahin gestellt sein.
Ich würde den Fehler bei der Wurzel packen und nach dem Übeltäter suchen bzw. dann lieber das popupmenu selber zeichnen
als dieses zu verwenden das die Fehler verursacht.
Irgenwo hängt das in einer Winproc(Fremdcomponente)
Das verstehe ich auch nicht.
OldPopupListWndProc := TFNWndProc(GetWindowLong(PopupList.Window, GWL_WNDPROC));
warum nicht einfach
OldPopupListWndProc := pointer(GetWindowLong(PopupList.Window, GWL_WNDPROC));
Vielleicht hilft dir da was weiter
gruss