Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Exception wird nicht angezeigt - Ist das ein Fehler?

  Alt 9. Dez 2016, 12:17
Da hier die Form "lokal" ist und von außen geschlossen wird

Delphi-Quellcode:
// weg mit der bösen globalen Variable!!!

procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(Self); // oder nil, da wir das ja eh alles immer selber freigeben
  try
    Form2.PopupParent := Self; // damit die Form2 immer über der Form1 liegt (nicht nötig bei ShowModal)
    Form2.Show; // hier natürlich ShowModal, da sonst ja das Release/Free die Form auch ohne Exception sofort schließt ;)
    raise Exception.Create('Ein Fehler');
  finally
    Form2.Free;
  end;
end;
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ...
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation);
  private
    Form2: TForm2;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  try
    Form2.PopupParent := Self; // damit die Form2 immer über der Form1 liegt (nicht nötig bei ShowModal)
    Form2.Show; // hier natürlich ShowModal, da sonst ja das Free
    raise Exception.Create('Ein Fehler');
  except
    FreeAndNil(Form2);
    raise;
  end;
end;

procedure TForm1.Notification(AComponent: TComponent; Operation: TOperation);
begin
  if Operation = opRemove then begin
    if AComponent = Form2 then // Form2 sagt mir, dass es mich jetzt verlassen will > siehe das Create(Self)
      Form2 := nil; // stattdessen könnte man auch die Form2-Variable im TForm2.Destroy auf nil setzen, aber TForm2 weiß ja eigentlich nichts von dieser Variable
  end;
  inherited;
end;

// und nicht das caFree im TForm2.OnClose vergessen, außer man will die bestehende Form später erneut anzeigen können
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 9. Dez 2016 um 12:20 Uhr)
  Mit Zitat antworten Zitat