powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как обнилить владельца fsMDIChild формы?
6 сообщений из 6, страница 1 из 1
Как обнилить владельца fsMDIChild формы?
    #39670543
Имеется форма TFReference = class(TForm) с FormStyle := fsMDIChild.
Также в главной форме с FormStyle := fsMDIForm есть несколько приватных полей:
Код: pascal
1.
2.
3.
4.
5.
6.
private
    FMDIRefKinds,
    FMDIRefSpecs,
    FMDIRefTasks,
    FMDIRefTrailers,
    FMDIRefTypes: TFReference;    // MDI формы справочников


Так создается экземпляр MDI формы с соответсвующим заголовком:
Код: pascal
1.
2.
3.
4.
5.
  FMDIRefKinds := TFReference.Create(Application);
  with FMDIRefKinds do begin
    Caption := 'Kinds';
    Show;
  end;


и так для всех других FMDIRef...
Закрытие MDI формы:
Код: pascal
1.
2.
3.
4.
procedure TFReference.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;



Вопрос: как в момент закрытия MDI формы сделать так, чтобы FMDIRefKinds и т.п. стало равным nil ? Т.е. как об nil ить создателя MDI формы?
...
Рейтинг: 0 / 0
Как обнилить владельца fsMDIChild формы?
    #39670553
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
учусьвсюжизнь,

Я бы заслал сообщение... Примерно так в главной форме:
Код: pascal
1.
2.
    procedure MDIChildActivate(var Message: TMessage); message em_child_activate;
    procedure MDIChildClose(var Message: TMessage); message em_child_destroy;


И в процедуре MDIChildClose обnilивал нужные переменные.

Ну, и в MDIChild например в Destroy:
Код: pascal
1.
PostMessage(MainForm.Handle, em_child_destroy, 0, 0);
...
Рейтинг: 0 / 0
Как обнилить владельца fsMDIChild формы?
    #39670603
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чушь написал. Ссылка на форму и создатель формы не имеют ничего общего. Можешь при создании формы передавать ссылку на эту переменную а в деструкторе формы её обнулять. Хотя это изначально кривой дизайн
...
Рейтинг: 0 / 0
Как обнилить владельца fsMDIChild формы?
    #39670655
white_niggerэто изначально кривой дизайн
Хорошо. Как тогда без перебора всех MDIChild
Код: pascal
1.
for i := 0 to MDIChildCount - 1 do


и идентификации нужного окна по имени или еще какому признаку узнать, что нужная форма уже открыта и BringToFront ее, а если нет, то создать ее? А так, по переменной сразу было бы видно - открыта (не nil) или нет (nil) форма.
...
Рейтинг: 0 / 0
Как обнилить владельца fsMDIChild формы?
    #39670764
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потом появятся ещё стопицот нужных форм и для них потребуется стопицот переменных... Сделай виртуальную функцию у базового класса MDIChild, которая вернёт свой идентификатор. И функцию которая вернет/активирует MDIChild по этому идентификатору. И да, именно проходом по MDIChildCount
...
Рейтинг: 0 / 0
Как обнилить владельца fsMDIChild формы?
    #39670775
white_nigger,
не появятся :)
Всем спасибо за науку, реализовал хотелку через встроенный в VCL механизм
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
protected
  procedure Notification(AComponent: TComponent; Operation: TOperation); override;

procedure TFMain.Notification(AComponent: TComponent; Operation: TOperation);
begin 
  inherited;

  if (Operation = opRemove) and
     (AComponent is TForm) and
     (TForm(AComponent).FormStyle = fsMDIChild)
  then begin
    // set reference to Child to nil
    case TFReference(AComponent).ID_Ref of
      100: FMDIRefTasks := nil;
      ...
    end;
  end;
end;
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как обнилить владельца fsMDIChild формы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]