![]() |
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:
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.
procedure TForm1.ActionExtractInitExecute(Sender: TObject);
begin Cldis.add(WebBrowser1); // in Liste einfügen Cldis.Count; Cldis.Document[1].Document; ... end; Danke für die Hilfe |
Re: Listenindex überschreitet maximum
Das erste Element ist [0].
Zitat:
|
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:
|
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)... |
Re: Listenindex überschreitet maximum
Delphi-Quellcode:
[/quote]
FDocumentlist:TObjectList;
function TCldis.Count: Integer; begin result:=FDocumentList.Count; end; function TCldis.Get(Index: Integer): TDocument; begin result:=TDocument(FDocumentList[Index]); end; Soweit so gut...
Delphi-Quellcode:
Nun ja, du greifst in deiner Get funktion auf FDocumentList[Index] zu, ersetz das mal durch TDocument(FDocumentList.Items[Index]);
procedure TForm1.ActionExtractInitExecute(Sender: TObject);
begin Cldis.add(WebBrowser1); // in Liste einfügen Cldis.Count; Cldis.Document[1].Document; ... end; Gruß Der Unwissende |
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