Die ca. 15 - 20 Fremdkomponenten können nicht einfach aus mehreren 100.000 Zeilen Code entfernt werden.
Deshalb habe ich die oben angesprochene Mimik
Code:
.
.
procedure TMain.PopupListWndProc(var Message: TMessage);
begin
with Message do
begin
case Msg of
WM_ENTERMENULOOP:
if evPopAvail.WaitFor(0) = wrSignaled then
begin
evPopAvail.ResetEvent();
.
<Subroutine mit Application.ProcessMessages>
.
end
else
begin
Exit;
end;
WM_EXITMENULOOP:
evPopAvail.SetEvent();
end;
Result := CallWindowProc(OldPopupListWndProc, PopupList.Window, Msg, WParam, LParam);
end;
end;
.
.
im Hauptfenster der Applikation implementiert. Seitdem ist das Problem verschwunden. Der TEvent sorgt zusammen mit WM_ENTERMENULOOP und WM_EXITMENULOOP auf jeden Fall sicher dafür, dass nicht aus irgendwelchen Gründen (bspw. Hintergrund-Threads) zwei mal zur gleichen Zeit ein Popup aufgehen kann.