AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi EAbstract Error beim Entfernen aus verketteter Liste
Thema durchsuchen
Ansicht
Themen-Optionen

EAbstract Error beim Entfernen aus verketteter Liste

Ein Thema von mrmoe · begonnen am 17. Aug 2005 · letzter Beitrag vom 17. Aug 2005
 
mrmoe

Registriert seit: 15. Jul 2005
13 Beiträge
 
#1

EAbstract Error beim Entfernen aus verketteter Liste

  Alt 17. Aug 2005, 09:11
HI, ich habe ein seltsames Problem (oder ich bin einfach zu blöd dazu )
ich habe mir eine neue Klasse von Panels erstellt um die auf einem Form untereinander zu haben, dabei sollen beliebig neue Panels hinzugefügt und bei einer Vergrößerung eines Panels alle darunterliegenden iterativ entsprechend verschoben werden, das klappt auch ganz gut. Das Problem ist nur dass wenn ich das 2. oder 3. Panel von oben (also das 2. oder 3. in der Liste) entfernen will dann haut der mir alles um die Ohren. bei den anderen klappt das wunderbar.

Hier die Objekt-Definition:
Delphi-Quellcode:
type myPanel = class(TPanel)
  procedure expand(val: integer; Sender: TObject);
  procedure move(val: integer; Sender: TObject);
  procedure remove_it(Sender: TObject);
 private
  childP: myPanel;
  parentP: myPanel;
 public
  property childPanel: myPanel read childP write childP;
  property parentPanel:myPanel read parentP write parentP;
end;
Ich hab also Vorgänger und Nachfolger jedes Elements, beim Erstellen werden entsprechend die nil´s richtig verteilt wenn es das erste oder letzte Element ist. Bitte nicht über das "Sender: TObject" wundern, damit gebe ich der Methode die Information auf den Weg in welchem Panel gerade ein Button etc. geklickt wurde (ich weiss geht bestimmt auch anders aber so klappts erstmal)

und hier die Methode zum Entfernen:
(in Form1.letztes merke ich mir welches das letzte Element der Panel-Liste ist)
Delphi-Quellcode:
procedure myPanel.remove_it(Sender: TObject);
begin

        if Sender is myPanel then begin
         //einziges Element ?
         if (myPanel(Sender).parentPanel = nil) and (myPanel(Sender).childPanel = nil) then
         begin
          form1.letztes:=nil;
          myPanel(Sender).Destroy;
         end
         //erstes Element ?
         else if myPanel(Sender).parentPanel=nil then
         begin
          myPanel(Sender).childPanel.parentPanel:=nil;
          myPanel(Sender).childPanel.move(myPanel(Sender).Height*(-1)-10,myPanel(Sender).childPanel);
          myPanel(Sender).Destroy;
         end
         //letztes Element ?
         else if myPanel(Sender).childPanel=nil then
         begin
          myPanel(Sender).parentPanel.childPanel:=nil;
          form1.letztes:=myPanel(Sender).parentPanel;
          myPanel(Sender).move(myPanel(Sender).Height*(-1)-10,myPanel(Sender));
          myPanel(Sender).Destroy;
         end
         //mittel Element ?
         else if (myPanel(Sender).childPanel <> nil) and (myPanel(Sender).parentPanel <> nil) then
         begin
          myPanel(Sender).parentPanel.childPanel:=myPanel(Sender).childPanel;
          myPanel(Sender).childPanel.parentPanel:=myPanel(Sender).parentPanel;
          myPanel(Sender).childPanel.move(myPanel(Sender).Height*(-1)-10,myPanel(Sender).childPanel);
          myPanel(Sender).Destroy;
         end;

       end; // if is myPanel
end;
wie gesagt es kommt nur eine AV wenn ich das 2. oder 3. Element löschen will.
->und jetzt wirds verrückt: wenn ich auf dem hauptformular ein label platziere dann kommt der fehler nur noch beim ersten element der liste

was mach ich falsch ? muss ich etwa alles umkrempeln ? seh ich den wald vor lauter bäumen nicht ? wird es morgen regnen ?
-fragen über fragen-

gruß,
der moe
(datei zum testen angehängt)
Angehängte Dateien
Dateityp: exe project1_716.exe (414,5 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
 


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:05 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