Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Zugriffsverletzung seit Umstellung auf XE5 (https://www.delphipraxis.net/179908-zugriffsverletzung-seit-umstellung-auf-xe5.html)

NadineOnline 10. Apr 2014 09:26


Zugriffsverletzung seit Umstellung auf XE5
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,

ich brauche mal eure Hilfe.

Seit der Umstellung auf Delphi XE5 und die neue VirtualStringTree-Komponente (V5.3.0) habe ich folgendes Problem:
Mein Tree wird sauber geladen, auch wenn ich ihn neu lade, ist alles gut.
Wenn ich aber nach einer Spalte sortiere und dann den Tree neu lade, bekomme ich ein e Zugriffsverletzung.
Laut Stack-Aufruf liegt der Fehler im Ereignis "CompareNodes" (siehe Anhang).

Im Programm knallt es bei der Spalte, die zuvor sortiert wurde:
Delphi-Quellcode:
Data1 := vt.GetNodeData(Node1);
Data2 := vt.GetNodeData(Node2);
Delphi-Quellcode:
if (not Assigned(Data1)) or (not Assigned(Data2)) then
  Result := 0
else
begin
  it1 := TUebersichtsItem(Data1.FObj);
  it2 := TUebersichtsItem(Data2.FObj);
  case Column of
  1: begin
     if it1.Spalte1= it2.Spalte1 then
   ...
Hat jemand eine Idee, wie ich das Problem lösen kann?
Vor der Umstellung lief das Programm einwandfrei...

Union 10. Apr 2014 09:53

AW: Zugriffsverletzung seit Umstellung auf XE5
 
Du solltest mal die Compiler-Optimierung ausschalten im Debug und dann durchsteppen um erstmal die Zeile zu ermitteln, an der der Fehler auftritt.

baumina 10. Apr 2014 10:16

AW: Zugriffsverletzung seit Umstellung auf XE5
 
Die Zugriffsverletzung kommt, weil it2 = Nil ist (siehe dein angehängtes Bild). Um herauszufinden warum it2 Nil ist, wirst noch etwas genauer suchen müssen.

NadineOnline 30. Jun 2014 13:31

AW: Zugriffsverletzung seit Umstellung auf XE5
 
Hallo,

ich habe das Problem gelöst:
Die Zugriffsverletzung kam, wenn ich nach dem Sortieren den Tree neu geladen habe.
Lösung: Das Laden der Liste muss mit einen vt.BeginUpdate starten und mit vt.EndUpdate enden.

Weiterhin frohes Schaffen ;-)

himitsu 30. Jun 2014 13:35

AW: Zugriffsverletzung seit Umstellung auf XE5
 
Zitat:

Zitat von NadineOnline (Beitrag 1263826)
Lösung: Das Laden der Liste muss mit einen vt.BeginUpdate starten und mit vt.EndUpdate enden.

Und/Oder ebenfalls das it1 und it2 auf Assigned prüfen. :angel2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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