Добавить событие Ondeactivate в Tfrxdialogcontrol

отредактировано 17:25 Раздел: FastReport 4.0
Добрый день!

Мне стало необходимо обработать событие перед закрытием диалоговой формы, но до начала уничтожения объектов, т.е. метод 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;

Комментарии

  • Stalker4Stalker4 123
    отредактировано 17:25
    R_Alexandr написал: »
    Добрый день!

    Мне стало необходимо обработать событие перед закрытием диалоговой формы, но до начала уничтожения объектов, т.е. метод Destroy не подходит.
    Я предлагаю добавить событие OnDeactivate: TNotifyEvent по такому же принципу.
    Так есть же у FR 4.12 у формы (TfrxDialogPage) событие OnDeactivate ...
  • отредактировано 17:25
    У формы - есть. У компонента TfrxDialogControl - нет. Я пишу компонент и событие нужно именно в компоненте.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.