Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: OnCloseQuery in einer MDI-Anwendung

  Alt 14. Feb 2011, 16:54
Ich würde von vorn herein davon ausgehen, dass die MDI-Childs nichts über das Parent wissen, sondern lediglich eine Schnittstelle anbieten, um "anderen" die Möglichkeit zu bieten, zu erfahren, ob Änderungen im MDI-Child vorgenommen wurden -- eine Property bietet sich hier wunderbar an. Daraus folgt, dass ich alle "Wollen Sie die Änderungen speichern?"-Dialoge in das Parent-Window legen würde. Du kannst beim Erzeugen eines MDI-Childs ja folgendes machen:
Delphi-Quellcode:
procedure TParentForm.CreateChild();
var
  mdi : TMdiChild;
begin
  // Self = ParentWindow
  mdi := TMdiChild.Create(Self);
  mdi.OnCloseQuery := Self.OnMdiChildCloseQuery;
end;

procedure TParentForm.OnMdiChildCloseQuery(Sender: TObject);
begin
  if (TMdiChild(Sender).Changed) then
  begin
    { Abfrage, ob Änderungen des MDI-Childs gespeichert werden sollen }
  end;
end;

procedure TParentForm.OnCloseQuery();
var
  i : Integer;
  Changed : Boolean;
begin
  { Prüfen, ob irgendein MDI-Child geändert würde }
  Changed := False;
  for i := 0 to Self.MDIChildCount - 1 do
  begin
    if (TMdiChild(Self.MDIChildren[i]).Changed) then
    begin
      Changed := True;
      break;
    end;
  end;
  if (Changed) then
  begin
    // ...
  end;
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat