Delphi MDI - обработка открывает/закрывает/активирует дочернюю форму

htmlgenericcontrol мог бы помочь, если необходимо представить определенный тег

5
задан migajek 15 September 2009 в 13:33
поделиться

2 ответа

Несколько лет назад я написал компонент типа панели задач, который делает именно такие вещи. Это называется TrmMDITaskbar. Вы можете найти его копию на Torrys , это часть пакета библиотеки rmControls. Он обрабатывает активацию, минимизацию, максимизацию и т. Д.

Суть его работы заключается в том, что он перехватывает дескриптор окна MDIParents, ища события MDIChild, и делает что-то на основе этих событий.

Если вы хотите написать свой собственный Я бы посоветовал это как хорошее место для начала.

Райан.

PS Версия на Torrys немного старше, но все равно должна работать. У меня есть более новая версия, доступная на моем сайте поддержки. ( Миллс Энтерпрайз )

3
ответ дан 15 December 2019 в 01:06
поделиться

Вы всегда можете перехватить события «постфактум» из ваш код во время выполнения. По сути, создайте общий 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
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: