Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listenindex überschreitet maximum (https://www.delphipraxis.net/56689-listenindex-ueberschreitet-maximum.html)

ozz 9. Nov 2005 21:55


Listenindex überschreitet maximum
 
Hallo zusammen,
das Probelm klingt recht unspektakulär, aber der Fehler steck im Detail :mrgreen:

Delphi-Quellcode:
Ich habe einen Typ TDocument
type TDocument = class (TComponent)
private
  ...
  FDocument:TWebBrowser;
  FLinks:TStringlist;
Published
  property Document: TWebBrowser read FDocument write FDocument;
  property links: TStringlist read FLinks;
...
Delphi-Quellcode:
type TClDiS = class (Tcomponent)
private
 ...
 FDocumentlist:TObjectList;
 function Get(Index: Integer): TDocument;
 procedure Put(Index: Integer; const Value: TDocument);
Published
...
 function add(item: TWebbrowser):integer;
 function Count: Integer;
public
 property Document[Index: Integer]: TDocument read Get write Put;
...

function TCldis.Count: Integer;
begin
    result:=FDocumentList.Count;
end;

function TCldis.Get(Index: Integer): TDocument;
begin
    result:=TDocument(FDocumentList[Index]);
end;

procedure TCldis.Put(Index: Integer; const Value: TDocument);
begin
    FDocumentList[Index]:=Value;
end;


Soweit so gut...

Delphi-Quellcode:
procedure TForm1.ActionExtractInitExecute(Sender: TObject);
begin

  Cldis.add(WebBrowser1); // in Liste einfügen
  Cldis.Count;
  Cldis.Document[1].Document;
  ...
end;
Das Problem ersteht, wenn ich Cldis ein Objekt hinzufüge, liefert Cldis.Count die korrekte Anzahl. Greife ich aber über das Array Cldis.Document[1].Document direkt auf eine Element zu, knallt es obwohl count korrekt 1 zurückliefert.

Danke für die Hilfe

Union 9. Nov 2005 21:57

Re: Listenindex überschreitet maximum
 
Das erste Element ist [0].

Zitat:

Zitat von Online Hilfe
Items (Eigenschaft von TObjectList)
Die Eigenschaft Items listet die Objektreferenzen auf.

Delphi-Syntax:

property Items[Index: Integer]: TObject; default;

Beschreibung

Mit Items können Sie auf die Objekte in der Liste zugreifen. Die Eigenschaft ist ein nullbasiertes Array. Auf die erste Komponente kann mit dem Index 0, auf die zweite mit dem Index 1 usw. zugegriffen werden. Zur Navigation in der Liste verwenden Sie Items zusammen mit der Eigenschaft Count.


ozz 9. Nov 2005 22:34

Re: Listenindex überschreitet maximum
 
Danke für die Hilfe. Leider ist dies nicht der Fehler. Ich habe im Beispiel nur die falsche Zahl eingetragen (0-basis). :gruebel:

alzaimar 9. Nov 2005 22:40

Re: Listenindex überschreitet maximum
 
Na, dann ist WebBrowser1 irgendwie nicht sauber. Entweder nicht initialisiert, oder zwischendurch mal freigegeben...
Ich teste sowas neuerdings mit FastMM, dem geilsten Tool für Delphi. Gips bei Sourceforge. Falls Du das nicht kennst: FastMM ersetzt den Borland Memory Manager und zeigt Dir ziemlich jeden Fehler, denn Du bezüglich Alloziierung, Freigabe, Schreiben in nicht alloziierten Speicher etc. machen kannst.

Fehler Deiner Kajüte findet man eigentlich IMMER, außer, es ist ein Fehler im IE (ich gehe mal davon aus, das der WebBrowser1 eine Instanz davon ist)...

Der_Unwissende 9. Nov 2005 22:46

Re: Listenindex überschreitet maximum
 
Delphi-Quellcode:
 FDocumentlist:TObjectList;

function TCldis.Count: Integer;
begin
    result:=FDocumentList.Count;
end;

function TCldis.Get(Index: Integer): TDocument;
begin
    result:=TDocument(FDocumentList[Index]);
end;
[/quote]


Soweit so gut...

Delphi-Quellcode:
procedure TForm1.ActionExtractInitExecute(Sender: TObject);
begin

  Cldis.add(WebBrowser1); // in Liste einfügen
  Cldis.Count;
  Cldis.Document[1].Document;
  ...
end;
Nun ja, du greifst in deiner Get funktion auf FDocumentList[Index] zu, ersetz das mal durch TDocument(FDocumentList.Items[Index]);

Gruß Der Unwissende

ozz 11. Nov 2005 07:15

Re: Listenindex überschreitet maximum
 
Danke. Ich habe den Fehler gefunden. :bounce2: Es lag an der Typenkonvertierung.
Besten Dank auch für den Tip mit FastMM.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.

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 by Thomas Breitkreuz