Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - abstract error beim beenden


klausiemausie - So 15.02.09 15:38
Titel: abstract error beim beenden
ich hab am ende meines programm ein kleines video laufen, also sowohl wenn die hauptform beendet wird, als wenn man auf den beendern button klickt start das video. im notify von dem mediaplayer hab ich drin stehen : application.terminate;, aber wenn ich es beende kommt "abstract error", woran kann das liegen?


Boldar - So 15.02.09 15:40

ich glaube, da war was von wegen dass man Objekte nicht in ihren eigenen Methoden freigeben darf...


JayEff - So 15.02.09 15:56

Boldar hat da glaube ich recht. Mit HALT; dürft's zwar funktionieren aber wie Luckie das mal so schön gesagt hat: "Wenn ich mein Auto anhalten will fahr ich's desshalb auch nich gleich gegen nen Baum" (sinngemäß) :mrgreen:
Vielleicht machst du's statt dessen so:
Nimm eine Globale Boolean Variable die im FormCreate auf False gesetzt wird.
im onClose der Form setzt du dann Action := caNone; und die variable auf true, aber nur, wenn die variable gerade false ist. Dann spielst du deinen Film ab. Wenn der Film abgelaufen ist, rufst close; nochmal auf, dieses mal ist deine variable schon true, das heißt, die Abfrage mit Action := caNone wird übersprungen und das Programm schließt normal. So kann der User das Programm einfach durch doppeltes auf Schließen drücken beenden und den Film überspringen, ist vielleicht user freundlicher. Wenn du das nicht willst, kannst du das natürlich auch verhindern indem du die Variable direkt vor dem "Mediaplayer sagt: ich bin fertig!"-Close; aufruf auf true setzt, statt im onClose.


jaenicke - So 15.02.09 15:57

Ein "abstract error" tritt normalerweise auf, wenn aus irgendeinem Grund eine als abstrakt definierte Methode aufgerufen wird. Meistens kommt eine entsprechende Warnung beim Kompilieren.

Bei dem, was du beschrieben hast, wüsste ich aber nicht, wo das da verursacht werden könnte, es sei denn es ist schon etwas freigegeben, was danach noch verwendet wird. Womit wir wieder bei dem wären, was die beiden vor mir gesagt haben.