![]() |
EAccessViolation abfangen
Hi,
wie kann ich eine EAccessViolation abfangen? Mit try und except geht das leider nicht... Hier mein Code:
Delphi-Quellcode:
MarkedPanel ist eine Globale Variable vom Typ "TObject", in ihr steht das selektierte Panel. Eine Möglichkeit das ganze zu umgehen wäre wohl die globale Variable zu überprüfen ob was drinsteht, aber ich suche nach was besseren.
function RemovePanel:Boolean;
begin try begin (MarkedPanel as TPanel).Destroy; Result:=True; end; except Result:=False; end; end; Schonmal Danke und einen schönen Feierabend ;-) |
Re: EAccessViolation abfangen
Du kannst das begin und end nach try weglassen:
Delphi-Quellcode:
function RemovePanel:Boolean;
begin try (MarkedPanel as TPanel).Destroy; Result:=True; except Result:=False; end; end; |
Re: EAccessViolation abfangen
Ich weiß, tut aber nichts zu meinen Problem ;-)
|
Re: EAccessViolation abfangen
Hallo onlinehome,
|
Re: EAccessViolation abfangen
Zitat:
|
Re: EAccessViolation abfangen
Moin Andreas,
oder vielleicht so:
Delphi-Quellcode:
Result := (MarkedPanel is TPanel);
if Result then MarkedPanel.Free; |
Re: EAccessViolation abfangen
@Christian Seehase
Du hast natürlich völlig Recht! Ich meinte is und schrieb as... |
Re: EAccessViolation abfangen
IMHO gehts auch mit assigned(MarkedPanel).
|
Re: EAccessViolation abfangen
Wenn das Objekt so oder so freigegeben werden soll - egal ob es nun ein Panel oder sonstwas ist - und auch die Funktion mehrfach aufgerufen werden könnte, dann so:
Delphi-Quellcode:
Das war dann alles.
FreeAndNil(MarkedPanel);
- FreeAndNil() ruft free auf, somit keine Probleme, wenn die Variable = Nil ist. - Der Destruktor ist virtuell, somit wird der richtige Destruktor des darin enthaltenen Objektes aufgerufen - Nach dem Free wird MarkedPanel auf Nil gesetzt und somit dafür gesorgt, dass es nicht mehrfach freigegeben wird. |
Re: EAccessViolation abfangen
Ok, mein Code lautet nun so:
Delphi-Quellcode:
Klappt wunderbar ;-)
function RemovePanel:Boolean;
begin if MarkedPanel.ClassType=TPanel then begin FreeAndNil(MarkedPanel); Result:=True; end else begin Result:=False; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz