Добавить событие Ondeactivate в Tfrxdialogcontrol
Добрый день!
Мне стало необходимо обработать событие перед закрытием диалоговой формы, но до начала уничтожения объектов, т.е. метод Destroy не подходит.
При этом, событие OnActivate уже есть в TfrxDialogControl.
Я предлагаю добавить событие OnDeactivate: TNotifyEvent по такому же принципу. Это очень удобно.
Вот патч, добавляющий данную функционалость ( для FastReport версии 4.12.1 ):
Мне стало необходимо обработать событие перед закрытием диалоговой формы, но до начала уничтожения объектов, т.е. метод Destroy не подходит.
При этом, событие OnActivate уже есть в TfrxDialogControl.
Я предлагаю добавить событие OnDeactivate: TNotifyEvent по такому же принципу. Это очень удобно.
Вот патч, добавляющий данную функционалость ( для FastReport версии 4.12.1 ):
# HG changeset patch
# User heMn
# Date 1334616987 -14400
# Branch dev
# Node ID 7c377e34394692c4ccb1209616c34e3909ec68ac
# Parent 922a479eda458f6379de1571d14d883d94ee7761
[+] Добавил события OnDeactivate для формы TfrxDialogPage и для всех frx контролов.
Теперь стало возможно перехватывать событие перед закрытием frx формы в run-time.
diff -r 922a479eda45 -r 7c377e343946 Source/frxClass.pas
--- a/Source/frxClass.pas Thu Mar 08 19:50:01 2012 +0400
+++ b/Source/frxClass.pas Tue Apr 17 02:56:27 2012 +0400
@@ -323,6 +323,7 @@
FOnMouseMove: TfrxMouseMoveEvent;
FOnMouseUp: TfrxMouseEvent;
FOnActivate: TNotifyEvent;
+ FOnDeactivate: TNotifyEvent;
function GetColor: TColor;
function GetEnabled: Boolean;
procedure DoOnClick(Sender: TObject);
@@ -376,6 +377,7 @@
property OnMouseMove: TfrxMouseMoveEvent read FOnMouseMove write FOnMouseMove;
property OnMouseUp: TfrxMouseEvent read FOnMouseUp write FOnMouseUp;
property OnActivate: TNotifyEvent read FOnActivate write FOnActivate;
+ property OnDeactivate: TNotifyEvent read FOnDeactivate write FOnDeactivate;
published
property Left;
property Top;
@@ -4168,6 +4170,8 @@
Caption := AName;
end;
+
+
procedure TfrxDialogControl.DoOnClick(Sender: TObject);
begin
if Report <> nil then
@@ -6901,6 +6905,8 @@
end;
function TfrxDialogPage.ShowModal: TModalResult;
+var
+ i : integer;
begin
Initialize;
FForm.BorderStyle := FBorderStyle;
@@ -6908,6 +6914,12 @@
try
TfrxDialogForm(FForm).OnModify := DoModify;
Result := FForm.ShowModal;
+ for i := 0 to AllObjects.Count - 1 do
+ begin
+ if (TObject(AllObjects[i]) is TfrxDialogControl) and
+ Assigned(TfrxDialogControl(AllObjects[i]).OnDeactivate) then
+ TfrxDialogControl(AllObjects[i]).OnDeactivate(Self);
+ end;
finally
FForm.FormStyle := fsStayOnTop;
end;
Комментарии