![]() |
Re: Exception EAccessViolation bei inherited add()
Ich kämpfe im Moment "an allen Fronten", hab daher leider keine Luft, um mir das im Detail anzusehen. Evtl. morgen :|
|
Re: Exception EAccessViolation bei inherited add()
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.
Ich habe bei meinem Demoprojekt die ganzen Schritte von OnCreate() in ein Button-Click-Ereignis geschoben (soll später in OnShow, mit Aufruf von Loaded). Bei OnCreate ist die ImageList ja noch gar nicht geladen, weswegen es das Loaded() Problem gab (das du für mich gefunden hast). Ich erhalte bei folgender Stelle nun eine Meldung "Listenindex überschreitet Maximum 0":
Delphi-Quellcode:
Das Seltsame:
with tag_history.Columns.Add do
begin Caption := '1'; // EXCEPTION Width := (tag_history.Width - 20) div 3 * 2; end;
Delphi-Quellcode:
Der Debugger sagt bei F7 nicht, dass es bei "inherited Add" weiter (in die "tiefe") geht!!
function TSortListColumns.Add: TSortListColumn;
begin Result := TSortListColumn(inherited Add); end; Normalerweise sollte er bei
Delphi-Quellcode:
weitermachen! Hier wird der Haltepunkt aber niemals erreicht.
{ ComCtrls }
function TListColumns.Add: TListColumn; begin Result := TListColumn(inherited Add); UpdateCols; end; Auch die noch weiter oben liegende Weiterleitung
Delphi-Quellcode:
wird niemals erreicht...
{ Classes }
function TCollection.Add: TCollectionItem; begin Result := FItemClass.Create(Self); Added(Result); end; Komisch. TSortListColumns ist das Kind von TListColumns, also müsste doch die inherited-Variante bei TListColumns.Add() anknüpfen, oder nicht??? Irgendeine Idee? Gruß Daniel Marschall blackdrake |
Re: Exception EAccessViolation bei inherited add()
Kann mir denn niemand helfen? Wieso ruft inherited nicht die höhere Instanz auf? Ich habe sogar in die ComCtrls.pas eine showmessage() eingebaut, um ganz sicher zu gehen, dass sich der Debugger nicht geirrt hat. Der Punkt wird tatsächlich nicht erreicht.
Ich weiß nicht, ob das komplette Neuschreiben der Klasse überhaupt notwendig ist, da man es mit der Ableitung eigentlich prima hinbekommen könnte. (Schließlich macht es Borland meist genau so, z.B. mit den TCollectionItems, die einfach durch Ableiten erweitert werden) |
Re: Exception EAccessViolation bei inherited add()
Delphi-Quellcode:
Das kann doch nicht sein. Das Vererbungsmodell von Delphi funktioniert hier einfach nicht! Die Methode "Add" ist nicht als virtuell definiert, so dass man sie nicht mit override überschreiben kann.
function TSortListColumns.Add: TSortListColumn;
var x: TListColumn; y: TSortListColumn; begin x := inherited Add; // NACH DIESEM PUNKT IST MIT F7 DIE PROZEDUR ZUENDE! // DER DEBUGGER GEHT NICHT IN DIE TIEFE y := TSortListColumn(x); // DIESER PUNKT WIRD NIEMALS ERREICHT Result := y; // DIESER PUNKT WIRD NIEMALS ERREICHT //Result := TSortListColumn(inherited Add); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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-2025 by Thomas Breitkreuz