Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wieso kann man Listenelemente nicht kopieren? (https://www.delphipraxis.net/131708-wieso-kann-man-listenelemente-nicht-kopieren.html)

wonnebeekiwi 29. Mär 2009 15:45

Re: Wieso kann man Listenelemente nicht kopieren?
 
OK :D... Das läuft jetzt.
Hat jemand irgenteine Idee wo plötzlich Access Violations herkommen können?
Bei Sachen die vorher schon liefen?
Gibt es nennenswerte Unterschiede zwischen TObject und TPersistent die soetwas beeinflussen können?

Andreas L. 29. Mär 2009 15:47

Re: Wieso kann man Listenelemente nicht kopieren?
 
Zitat:

Zitat von jbg
Zitat:

Zitat von Andreas L.
Leite TElement von TPersistent ab.

Das reicht nicht. Er muss auch noch die Assign-Methode für TElement umschreiben, denn sonst kommt nur "TElement kann nicht zu TElement zugewiesen werden".

Naja, da kommt man mit ein bisschen nachdenken auch selber drauf. Und in der Hilfe stehts auch:

Zitat:

In den meisten Anwendungen wird Assign überschrieben, um die Zuweisung von Eigenschaften aus ähnlichen Objekten vorzunehmen. Wenn das Zielobjekt die Zuweisung von Eigenschaften aus Source nicht behandeln kann, rufen Sie beim Überschreiben von Assign die geerbte Methode auf.
Zitat:

OK :D... Das läuft jetzt.
Hat jemand irgenteine Idee wo plötzlich Access Violations herkommen können?
Bei Sachen die vorher schon liefen?
Gibt es nennenswerte Unterschiede zwischen TObject und TPersistent die soetwas beeinflussen können?
Wo bleibt der Debugger stehen? Vermutlich greifst du auf ein noch nicht erstelltes Objekt zu. Poste dochmal deine Klasse.

wonnebeekiwi 29. Mär 2009 15:58

Re: Wieso kann man Listenelemente nicht kopieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TForm1.BaumgraphAnzeigen (Baum: TAVLBaum; Tiefe,X,DX: integer);
var Text: string;
    XPos,YPos: integer;
begin
  if not Baum.Leer then
    begin
      DX := DX div 2;
      XPos := X;
      YPos := Tiefe*40 + 20;
      Text := baum.Wurzel.toString;
      ImBaum.Canvas.Ellipse (XPos-10,YPos-5,XPos+24,YPos+15);
      ImBaum.Canvas.TextOut (XPos,YPos-3,Text);
      if not baum.rechts.Leer
      then begin
        ImBaum.Canvas.MoveTo (XPos+7,YPos+15);
        ImBaum.Canvas.LineTo (XPos+7+DX,YPos+40);
      end;
      BaumGraphAnzeigen (baum.rechts,Tiefe+1,X+DX,DX);
      if not baum.links.Leer
      then begin
        ImBaum.Canvas.MoveTo (XPos+7,YPos+15);
        ImBaum.Canvas.LineTo (XPos+7-DX,YPos+40);
      end;
      BaumGraphAnzeigen (baum.links,Tiefe+1,X-DX,DX);
    end;
end;
Der debugger zeigt mir diese Zeile an: Text := baum.Wurzel.toString;
Die Klasse sieht so aus:
Delphi-Quellcode:
type

  TAVLBaum = class(TPersistent)

  private

  public
    Wurzel : TItem;
    Balance: Integer;
    links: TAVLBaum;
    rechts: TAVLBaum;
    constructor create();overload;
    constructor create(Werte: String);overload;
    constructor create(pItem: TItem);overload;
    function KntnFinden(pItem: TItem): Boolean;
    function Hoehe(): Integer;
    function toString():String;
    function Leer():Boolean;
    function KntnEinfuegen(pItem: TItem):boolean;
    procedure Assign(Source: TPersistent);override;
    procedure AssignTo(Dest: TPersistent);override;
    procedure Sortieren;
    procedure LLDrehung;
    procedure LRDrehung;
    procedure RRDrehung;
    procedure RLDrehung;  

end;
Vorher lief das Programm genau so. An den Elementen die ich erstelle hab ich nicht mehr rumgepfuscht.
Im Anhang ist alles.

Andreas L. 29. Mär 2009 18:24

Re: Wieso kann man Listenelemente nicht kopieren?
 
Ich würde mal sagen das die Eigenschaft Wurzel (ein Objekt) von Baum nicht erstellt wurde. Zeig doch mal den constructor von TAVLBaum.

wonnebeekiwi 29. Mär 2009 20:54

Re: Wieso kann man Listenelemente nicht kopieren?
 
constructor TAVLBaum.create;
begin
Wurzel := nil;
Balance := 0;
end;

Andreas L. 29. Mär 2009 20:57

Re: Wieso kann man Listenelemente nicht kopieren?
 
Ich weiß ja nicht was genau TItem (Wurzel) ist, aber probier mal das:
Delphi-Quellcode:
constructor TAVLBaum.create;
begin
  Wurzel := TItem.Create;
  Balance := 0;
end;

wonnebeekiwi 29. Mär 2009 21:01

Re: Wieso kann man Listenelemente nicht kopieren?
 
TItem ist nur eine Puffer Klasse und Leitet auf TDaten weiter. Die Methoden sind alle abstrakt. Wenn ich das so implementiere kommt der Abstract Error.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr.
Seite 2 von 2     12   

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