Delphi MDI - handling of opening / closing / activating a child form

I am developing an MDI application that assigns a tab for each child MDI created. I need to "catch" OnActivate, OnCreate and OnDestroy events of the child form in the main (parent) form. Just calling the code in the child form is impossible for me, since there are many classes of forms that are used as MDI children, and the plugin can load its own form ...

So my question is: how to catch that the MDI child form has been activated / deactivated without using child forms?

+5
source share
2 answers

Taskbar , . TrmMDITaskbar. Torrys, rmControls. , , ..

, MDIParents, MDIChild, .

, , .

.

P.S. Torrys , - . , - . (Mills Enterprise)

+3

" " . OnActivate, :

type
  TEventHolder = class
  private
    FSFActivate: TNotifyEvent;
  published
    property SavedFormActivate : TNotifyEvent 
        read FSFActivate write fSFActivate;
  end;

type
  TMainForm = class(Tform)
    :
    SavedEvents : tStringList;
    procedure ChildFormActivate(Sender: TObject);
    procedure InitChildForm(MdiForm:TForm);
  end;

procedure TMainForm.ChildFormActivate(Sender: TObject);
var
  i : integer;
begin
  // your special processing here this is called for the child form.
  i := SavedEvents.IndexOf(ClassName);
  if i <> -1 then
    tEventHolder(SavedEvents.Objects[i]).SavedFormActivate(Sender);
end;

procedure TMainForm.InitChildForm(MdiForm:TForm);
var
  OrigEvents : TEventHolder; 
begin
  if not Assigned(SavedEvents) then
    SavedEvents := tSTringlist.create;
  if Assigned(MdiForm.OnActivate) then
    begin
      OrigEvents := tEventHolder.create;
      OrigEvents.SavedFormActivate := MdiForm.OnActivate;
      SavedEvents.AddObject(MdiForm.ClassName,OrigEvents); 
    end;
  MdiForm.OnActivate := ChildFormActivate;
end;

InitChildForm, - ( , ). , SavedEvents ( ).

+1

All Articles