AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abstrakter Fehler

Ein Thema von Martin W · begonnen am 25. Feb 2005 · letzter Beitrag vom 26. Feb 2005
Antwort Antwort
Seite 2 von 2     12   
Robert_G
(Gast)

n/a Beiträge
 
#11

Re: Abstrakter Fehler

  Alt 26. Feb 2005, 12:58
Zitat von Hansa:
Zitat von Martin W:
...Ich hab aber keine Prozedure mit "Abstract" oder sonst was versehen...
Du vielleicht nicht. Aber ist eventuell eine Fremdkomponente im Spiel ?
Würde ich auch sagen.
Du kannst die meisten Antworten hier getrost als "Im Trüben fischen" abtun.
Ab du nun Release, Free oder "Frag's Pferd was auch immer" aufrufst ist doch total Bohne. Du verwendest eine Instanz einer abstrakten Klasse. Und beim Ausführen einer nicht überschriebenen Methode knallt es eben. (Was vom Autor der Klasse sicher auch so gewollt ist )
Da du immer noch nicht den Inhalt deines OnClose Handlers gezeigt hast würde ich auch im Trüben fischen.
Deshalb gibt's von mir nur eine Fehlerbeschreibung. Rücke etwas Code raus und man kann dir sicher helfen.
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#12

Re: Abstrakter Fehler

  Alt 26. Feb 2005, 17:02
So.. mal die gesamte Form wo es "knallt"


Delphi-Quellcode:
unit neues_produkt_unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ComCtrls, jpeg, JvGIF, ExtCtrls;

type
  Tneues_produkt_form = class(TForm)
    Image1: TImage;
    Image3: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label23: TLabel;
    Image2: TImage;
    Image4: TImage;
    Label8: TLabel;
    Label7: TLabel;
    Image7: TImage;
    Image8: TImage;
    StatusBar1: TStatusBar;
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Button1: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  neues_produkt_form: Tneues_produkt_form;

implementation

{$R *.dfm}

procedure Tneues_produkt_form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  self.free;
end;

procedure Tneues_produkt_form.Button1Click(Sender: TObject);
begin
  self.close;
end;

end.

Beim Klick auf Button1 knallt es dann mit der oben gennanten Fehlermeldung.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Abstrakter Fehler

  Alt 26. Feb 2005, 17:11
Hi,

Das führt zwangsweise zu einem Abstraktem Fehler:
Delphi-Quellcode:
procedure Tneues_produkt_form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  self.free;
end;
Besser ist dann das:
Delphi-Quellcode:
procedure Tneues_produkt_form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;
Dann kannst Du auch Self.Close(); weglassen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#14

Re: Abstrakter Fehler

  Alt 26. Feb 2005, 17:16
Hey, das klappt ja echt prima... aber warum führt "self.free" zwangsweise zu einem abstrakten Fehler ?!?

Danke noch mal!!!!


Gruß
martin
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#15

Re: Abstrakter Fehler

  Alt 26. Feb 2005, 17:21
Das hättest Du früher haben können...

Warum ausgerechnet ein abstrakter Fehler auftritt weiss ich nicht (vielleicht hat ja jemand eine schlüssige Erklärung), aber prinzipiell ist es falsch, eine Komponente in einem eigenen Eventhandler freizugeben, damit zieht sie sich quasi selbst den Boden unter den Füßen weg.
Deshalb der Umweg über caFree in OnClose. In einem OnClick einer Form würdest Du Release aufrufen.

Gruß, teebee
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#16

Re: Abstrakter Fehler

  Alt 26. Feb 2005, 17:30
Ok, dann trotzdem noch mal danke für alle Antworten *freu*

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#17

Re: Abstrakter Fehler

  Alt 26. Feb 2005, 18:35
Zitat:
aber warum führt "self.free" zwangsweise zu einem abstrakten Fehler ?!?
Weil es ein Logik Fehler von dir war. Man sollte nie die Methode Free in einem Objekt aufrufen , damit es sich selbst "befreit". Eine Klasse wird immer von eine Andere "befreit" (oder von einem Thread), aber nicht in sich selbst.

So geht das:
Delphi-Quellcode:
var
  [b] Form1: TForm1; [/b]
  [b] Form2: TForm1; [/b]

procedure [b]TForm1[/b].Button1Click(Sender: TObject);
begin
 [b]Form2[/b].Free;
end;
Oder umgegehert.
Zwar wird es keine Exep. geben im Fall dass du so was schreibst:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 self.Free; // Oder nur Free
end;
Aber MainThread bleibt immer noch da, wird nicht beendet, weil das ganze die Logik von VCL nicht folgt.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz