destructor TControl.Destroy;
begin
Application.ControlDestroyed(Self);
if (FHostDockSite <> nil)
and not (csDestroying in FHostDockSite.ComponentState) // - это я добавил
then
begin
FHostDockSite.Perform(CM_UNDOCKCLIENT, 0, Integer(Self));
SetParent(nil);
Dock(NullDockSite, BoundsRect);
FHostDockSite := nil;
end else
SetParent(nil);
...
end;
Без этого падало на Delphi 7 и продолжает падать на Delphi XE3. Если просто сделать конструкцию из нескольких панелей и вдоченных форм. А потом попытаться одну из вдоченных форм убить. Честными средствами.
Это тоже был долгий разбор лет 10-ть назад. Примеры повторения - есть. Но рафинированный - пока не выделил.
Но опять же - никакого "хоккея" - там не было. Просто чистое использование VCL.
Это тоже был долгий разбор лет 10-ть назад. Примеры повторения - есть. Но рафинированный - пока не выделил.
Но опять же - никакого "хоккея" - там не было. Просто чистое использование VCL.
Что интересно, в Delphi 2007 это исправлено, а в XE5 - нет. Т.е. получается, что где-то между Delphi 7 и 2007 они это исправили, а между 2007 и XE3 (с Ваших слов) потеряли, и даже до XE5 "не нашли". К сожалению, всех исходников нет, поэтому установить точную версию, когда они это поправили и убрали не могу, но факт остается фактом.
ОтветитьУдалитьПолучается, что так.
ОтветитьУдалить