AGB  ·  Datenschutz  ·  Impressum  







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

Exception beim Löschen von Objekten

Ein Thema von Fisch · begonnen am 10. Jan 2004 · letzter Beitrag vom 10. Jan 2004
Antwort Antwort
Fisch

Registriert seit: 10. Jan 2004
2 Beiträge
 
Delphi 7 Personal
 
#1

Exception beim Löschen von Objekten

  Alt 10. Jan 2004, 10:51
Hallo NG,

ich kämpfe zur Zeit mit einem Problem:

Ich erzeuge zur Laufzeit einige MEMO Felder, die ich, wenn der Nutzer mit der Maustaste drauf klickt, wieder lösche. Klappt alles recht gut, bis ich die Memo-Felder lösche - dann bekomme ich eine Exception. Das tritt immer dann auf, wenn ich so ca. 10 und mehr Memo Felder erzeugt habe. Habe ich weniger Felder erzeugt, funzt alles recht gut. Es scheint mir irgendwie am Speicher zu liegen - sollte ich dem Programm mehr zuweisen ? Bisher habe ich da keine Einstellungen im Debugger vorgenommen oder verändert.

Die Fehlermeldungen:

Zitat:
Klasse EaccessViolation, ZUgriffsverletzung bei Adresse xy im Modul usw...
Manchmal aber auch die Meldung:

Zitat:
abstrakter Fehler der Klasse EAbstract Error
Das ist der Code, zur Definition der Routine

Code:
type
  TForm11 = class(TForm)
    .....
    procedure BPKlick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
Hier die Routine mit der ich zur Laufzeit die Memos erzeuge:
Code:
   if Button=mbRight then
     begin
       BPEditCount:=BPEditCount+1;
       BPEdit[BPEditcount]:=TMemo.Create(Form11);
       BPEdit[BPEditcount].Parent:=Form11;
       BPEdit[BPEditcount].Left:=X;
       BPEdit[BPEditcount].Top:=Y-17;
       BPEdit[BPEditcount].Height:=20;
       BPEdit[BPEditcount].Width:=20;
       BPEdit[BPEditcount].OnKeyPress:=BPKEYPRESS;
       BPEDIT[BPEditCount].OnClick:=BPKLICK;
       BPEdit[BPEditCount].Font.Name:='Arial Narrow';
       BPEdit[BPEditCount].Font.Size:=8;
       BPEdit[BPEditCount].Tag:=BPEditCount;
       BPEdit[BPEditCount].Name:='Memo'+inttostr(BPEditCount);
       BPedit[BPeditCount].Text:='';
       BPEdit[BPEditCount].setfocus;
     end;
Und hier die Routine, mit der ich die MEMOs wieder lösche:

Code:
procedure TForm11.BPKLICK(Sender: TObject);
  Var BPC : integer;
  begin
    if application.messagebox(Pchar('Soll das Kommentarfeld wirklich gelöscht werden ?'),
                              PChar('L Ö S C H E N'),
                              MB_ICONQUESTION+MB_YESNO+MB_DefButton2)=6 then
       begin
         if (Sender is TMemo) then
           begin
              with (Sender as TMemo) do
                begin
                  if BPEdit[(Sender as TMemo).Tag]<>nil then
                    begin
                      BPC:=(Sender as TMemo).Tag;
                      BPEDIT[BPC].free;
//                      BPEDIT[BP]:=nil;
                    end;
                end;
            end;
       end;
  end;
Kann mir jemand helfen ?

Gruss


Markus
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Exception beim Löschen von Objekten

  Alt 10. Jan 2004, 11:02
Moin Fish,
die Fehler treten auf, weil Du das Memo in seinem eigenen OnClick Eventhandler freigeben möchtest.
D.h. das Memo empfängt die Click Message ruft daraufhin den Eventhandler auf. In diesem wird das Memo freigegeben. Nachdem der Eventhandler seine Arbeit getan hat, möchte dieser zum Memo zurückkehren. Leider ist nun kein Memo mehr da. Weil es freigegeben wurde.

Die Lösung findest Du dort http://www.delphipraxis.net/internal...339&highlight=
  Mit Zitat antworten Zitat
Fisch

Registriert seit: 10. Jan 2004
2 Beiträge
 
Delphi 7 Personal
 
#3

Re: Exception beim Löschen von Objekten

  Alt 10. Jan 2004, 12:37
Hallo Jens,


funzt leider nicht - das Problem ist mir jetzt aber klar. Die Ursache dafür liegt wohl in der Tatsache, dass ich gleichzeitgi noch ne OPenGL Scene mit nem MessageLoop laufen habe - das PostMessage läuft jetzt zu diesem Thread und hat dort logischerweise keine Auswirkung. Ich müsste also die Message an das Form11 leiten.

Ein Vorschlag ?

Danke und Gruss


Markus
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:57 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