Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Arbeiten mit Tobjectlist (https://www.delphipraxis.net/147670-arbeiten-mit-tobjectlist.html)

KahPee 13. Feb 2010 22:15

Re: Arbeiten mit Tobjectlist
 
mh.. das hat leider bei mir keine Glühbirne aufleuchten lassen :(

Was genau machen die einzelnen Zeilen? Die ändern doch eigentlich nichts außer, dass es jetzt nicht mehr jedes beliebige Objekt sein kann, welches in der Liste gespeichert werden kann, sondern nur noch objekte des typs Tseite.

Gibt mir das die Möglichkeit so auf die Objekte der Liste zuzugreifen wie ich das vorhatte?
project.pages.Items[index].save....

Das übernehmen deines Beispiels gibt auf jeden Fall erstmal nur Fehler. Ich hab auch keine Ahnung (:() wie ich die einzelnen Prozeduren deklarieren soll, die in TSeiteList deklariert werden...
Delphi-Quellcode:
TseiteList = class(TObjectList)
  public
    function Add(AObject: TSeite): Integer;
    function First: TSeite;
    function Last: TSeite;
    property Items[Index: Integer]: TSeite read GetItem write SetItem; default;
  end;
Ansonsten nochmal zu der Frage mit den Konstruktoren. Was passiert mit
Delphi-Quellcode:
Tseite(project.pages.last).pic:=Timage.create(self)
wenn ich das hier ausführe:
Delphi-Quellcode:
Tseite(project.pages.last).delete;

daywalker9 13. Feb 2010 22:35

Re: Arbeiten mit Tobjectlist
 
Ja, so kannst du machen was du machen möchtest.

So ersparst du dir das ganze rumcasten außerhalb der Objectliste.

So würden die implementierungen sein:

Delphi-Quellcode:
{ TMyList }

function TMyList.Add(AObject: TMeinObject): Integer;
begin
   result:=inherited Add(AObject);
end;

function TMyList.First: TMeinObject;
begin
  result:=TMeinObject(Inherited First);
end;

function TMyList.GetItem(Index: Integer): TMeinObject;
begin
  result:=TMeinObject(inherited items[index]);
end;

function TMyList.Last: TMeinObject;
begin
  result:=TMeinObject(inherited Last);
end;

procedure TMyList.SetItem(Index: Integer; const Value: TMeinObject);
begin
  inherited Items[index]:=Value;
end;

KahPee 13. Feb 2010 22:44

Re: Arbeiten mit Tobjectlist
 
Vielen Dank, auf den ersten Blick leuchten mir einige Dinge ein. Angepasst hab ich das mal ins projekt gepackt und leider gibt es recht viele Fehlermeldungen (stehen als kommentare dabei):

Delphi-Quellcode:
TseiteList = class(TObjectList)
  public
    function Add(AObject: TSeite): Integer;
    function First: TSeite;
    function Last: TSeite;
    property Items[Index: Integer]: TSeite read GetItem write SetItem; default; //fehler mit inkompatiblen typen
  end;

function TseiteList.Add(AObject: TSeite): Integer;
begin
   result:=inherited Add(AObject);
end;

function TseiteList.First: TSeite;
begin
  result:=TSeite(Inherited First);
end;

function TseiteList.GetItem(Index: Integer): TSeite; //Fehler: undefinierter bezeichner
begin
  result:=TSeite (inherited items[index]); //Result undefiniert (bei ner Funktion, was will der den da?????)
//Fehler: Diese Form des Methodenaufrufs ist nur in Methoden von abgeleiteten Typen erlaubt
//[Pascal Fehler]: 'ENDE' erwartet, aber ')' gefunden
end;

function TseiteList.Last: TSeite;
begin
  result:=TSeite(inherited Last);
end;

procedure TseiteList.SetItem(Index: Integer; const Value: TSeite); //undef. bezeichner Setitem
begin
  inherited Items[index]:=Value;{ [Pascal Fehler] : '=' erwartet, aber ')' gefunden
[Pascal Fehler] : Diese Form des Methodenaufrufs ist nur in Methoden von abgeleiteten Typen erlaubt}
end;

daywalker9 13. Feb 2010 22:48

Re: Arbeiten mit Tobjectlist
 
Delphi-Quellcode:
type
  TSeiteListe=Class(TObjectList)
  private
     function GetItem(Index: Integer): TSeite;
     procedure SetItem(Index:integer;Value:TSeite);
  public
    ....
  end;
Die Methoden fehlen natürlich noch in der deklaration der klasse. Dann funktioniert es.

KahPee 13. Feb 2010 22:53

Re: Arbeiten mit Tobjectlist
 
Wie sehen dann denn die neuen Aufrufe auf?
Delphi-Quellcode:
project.Pages.Add(Tseite.create); // so noch richtig?

project.Pages.Items[pages.last].pic:=TImage.create; //[Pascal Fehler] Inkompatible Typen: 'Integer' und 'Tseite'
//bezieht sich auf das "Items[pages.last]"

Die Prozeduren Last und Fist müssten doch eig. einen Integer als ergebnis haben oder?!

Delphi-Quellcode:
function TseiteList.Last: Integer; //Deklaration in der Klasse ebenfalls angepasst
begin
  result:=TSeite(inherited Last); //<-- hier besteht weiterhin die Inkompabilität zwischen Tseite und Integer

end;

mkinzler 14. Feb 2010 08:55

Re: Arbeiten mit Tobjectlist
 
Man kann aber keine Integer nach TSeite casten

KahPee 14. Feb 2010 09:02

Re: Arbeiten mit Tobjectlist
 
DAs erschließt sich ja aus der Fehlermeldung. Die Frage ist wie man das Problem löst. Das muss ja schon irgendwie gehen ;)

mkinzler 14. Feb 2010 09:05

Re: Arbeiten mit Tobjectlist
 
Lass den Cast einfach weg. :zwinker:

KahPee 14. Feb 2010 09:07

Re: Arbeiten mit Tobjectlist
 
du meinst ich brauch "function TseiteList.Last: Integer; " gar nicht neu zu definieren?

mkinzler 14. Feb 2010 09:08

Re: Arbeiten mit Tobjectlist
 
Eigentlich nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr.
Seite 2 von 3     12 3      

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