Проблема как минимум в двух компонентах TCalendarDialog, TCalculatorDialog.
В чём причина непонятно, не вызывается также и TCalendarDialog.OnCanClose, TCalculatorDialog.OnClose, TCalculatorDialog.OnCanClose.
Проследил их "предков" вплоть до TCommonDialog, выдержки из кода:
Определение TCommonDialog в файле "..\lazarus\lcl\dialogs.pp",
методы Close, и DoClose определены как виртуальные, но нигде в потомках не видно переопределений (может я пропустил где-то...).
Определения методов в файле "..\lazarus\lcl\include\commondialog.inc ":
- Код: Выделить всё
procedure TCommonDialog.Close;
begin
DoClose;
TWSCommonDialogClass(WidgetSetClass).DestroyHandle(Self);
FHandle := 0;
end;
- Код: Выделить всё
procedure TCommonDialog.DoClose;
begin
if Assigned(FOnClose) then FOnClose(Self);
end;
Самое интересное, что многие диалоги являются, так или иначе, наследниками "TCommonDialog", например "TOpenDialog". Его предки "TFileDialog" и "TCommonDialog", но в "TOpenDialog" обработка события "OnClose" происходит нормально.
Как у остальных, кто-нибудь сталкивался с этой проблемой?
Что делать? Без этих событий использовать эти компоненты невозможно.