AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Exception EAccessViolation bei inherited add()
Thema durchsuchen
Ansicht
Themen-Optionen

Exception EAccessViolation bei inherited add()

Offene Frage von "blackdrake"
Ein Thema von blackdrake · begonnen am 10. Aug 2008 · letzter Beitrag vom 21. Aug 2008
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#21

Re: Exception EAccessViolation bei inherited add()

  Alt 12. Aug 2008, 19:42
Ich kämpfe im Moment "an allen Fronten", hab daher leider keine Luft, um mir das im Detail anzusehen. Evtl. morgen
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#22

Re: Exception EAccessViolation bei inherited add()

  Alt 18. Aug 2008, 23:10
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:
with tag_history.Columns.Add do
begin
  Caption := '1'; // EXCEPTION
  Width := (tag_history.Width - 20) div 3 * 2;
end;
Das Seltsame:

Delphi-Quellcode:
function TSortListColumns.Add: TSortListColumn;
begin
  Result := TSortListColumn(inherited Add);
end;
Der Debugger sagt bei F7 nicht, dass es bei "inherited Add" weiter (in die "tiefe") geht!!

Normalerweise sollte er bei

Delphi-Quellcode:
{ ComCtrls }

function TListColumns.Add: TListColumn;
begin
  Result := TListColumn(inherited Add);
  UpdateCols;
end;
weitermachen! Hier wird der Haltepunkt aber niemals erreicht.

Auch die noch weiter oben liegende Weiterleitung

Delphi-Quellcode:
{ Classes }

function TCollection.Add: TCollectionItem;
begin
  Result := FItemClass.Create(Self);
  Added(Result);
end;
wird niemals erreicht...

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
Angehängte Dateien
Dateityp: zip sortlistviews-erweiterung-wip2_146.zip (282,1 KB, 0x aufgerufen)
Daniel Marschall
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#23

Re: Exception EAccessViolation bei inherited add()

  Alt 19. Aug 2008, 21:32
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)
Daniel Marschall
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#24

Re: Exception EAccessViolation bei inherited add()

  Alt 21. Aug 2008, 21:11
Delphi-Quellcode:
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;
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.
Daniel Marschall
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz