![]() |
Leidiges EAccessViolation bei dynamischer TabSheet-Erzeugun
Salü,
folgender Code
Delphi-Quellcode:
Es geht also um dynamische TabSheet Erzeugung, in Abhängigkeit des Wertes von nTemp.
SetLength(TabSheetCCDiagramsArray, CD.nTemp);
SetLength(FrameCCDiagramArray, CD.nTemp); // create and setup diagrams For j:=0 To Pred(CD.nTemp) Do Begin // 1. create, setup tab sheet TabSheetCCDiagramsArray[j] := TTabSheet.Create(self); TabSheetCCDiagramsArray[j].PageControl := PageControlCCDiagrams; TabSheetCCDiagramsArray[j].Caption := CD.TempStr(j); TabSheetCCDiagramsArray[j].Name := 'TabSheet'+IntToStr(j); [...] PageControl ist ein normales Formularelement des Frames, in dem diese Prozedur stattfindet. Er wirft ein EAccessViolation Error. Ihm gefällt die Zuweisung des PageControlCCDiagrams als Parent für den TabSheet nicht. Woran könnte das liegen? |
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
Wo tritt der Fehler auf?
|
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
Er markiert diese Zeile
Delphi-Quellcode:
als Fehlerursache. Wenn ich sie auskommentiere, tritt der Fehler nicht auf.
TabSheetCCDiagramsArray[j].PageControl := PageControlCCDiagrams;
|
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
Zitat:
Mach mal vor der Zugeisung des PageControl noch folgendes:
Delphi-Quellcode:
TabSheetCCDiagramsArray[j].Parent := PageControlCCDiagrams;
|
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
Tat ich... jetzt frißt er ebendiese Zeile nicht:
Delphi-Quellcode:
TabSheetCCDiagramsArray[j].Parent := PageControlCCDiagrams;
|
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
An welcher Adresse kommt die AV? Ist es auch wirklich genau der Quellcode den du da gepostet hast? Könntest du eventuell die ganze Funktion posten?
|
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
Zitat:
Die Funktion:
Delphi-Quellcode:
Procedure TFrameCCDiagrams.AddTabSheets;
Var j:Integer; Begin // destroy greeting message; overlapped by diagrams { // dec. 14 objectExists := (LabelNoDataLoaded is TLabel); if objectExists then LabelNoDataLoaded.Free; } // setup array lengths, depending on no. of diff't temperatures SetLength(TabSheetCCDiagramsArray, CD.nTemp); SetLength(FrameCCDiagramArray, CD.nTemp); // create and setup diagrams For j:=0 To Pred(CD.nTemp) Do Begin // 1. create, setup tab sheet TabSheetCCDiagramsArray[j] := TTabSheet.Create(self); TabSheetCCDiagramsArray[j].Parent := PageControlCCDiagrams; TabSheetCCDiagramsArray[j].PageControl := PageControlCCDiagrams; TabSheetCCDiagramsArray[j].Caption := CD.TempStr(j); TabSheetCCDiagramsArray[j].Name := 'TabSheet'+IntToStr(j); // 2. create, setup CC container frame FrameCCDiagramArray[j] := TFrameCCDiagram.Create(Self); FrameCCDiagramArray[j].Parent := TabSheetCCDiagramsArray[j]; FrameCCDiagramArray[j].Name := 'CCFrame'+IntToStr(j); FrameCCDiagramArray[j].Top := 10; FrameCCDiagramArray[j].Left := 10; FrameCCDiagramArray[j].Height := TabSheetCCDiagramsArray[j].Height-5; FrameCCDiagramArray[j].Width := TabSheetCCDiagramsArray[j].Width -20; FrameCCDiagramArray[j].TIndex := j; // 3. create and setup diagrams within diagram container frames FrameCCDiagramArray[j].CreateDiagram; ShowData(j); // immer zuerst logarithmisch darstellen FrameCCDiagramArray[j].CCDiagram.AutoMinMax; FrameCCDiagramArray[j].CCDiagram.GF3 := False; FrameCCDiagramArray[j].CCDiagram.EpmLocked := False; FrameCCDiagramArray[j].CCDiagram.F1mLocked := False; FrameCCDiagramArray[j].CCDiagram.ValidResults := False; FrameCCDiagramArray[j].CCDiagram.Busy := False; FrameCCDiagramArray[j].CCDiagram.Abort := False; End; End; |
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
Dann würde ich doch mal spontan tippen das PageControlCCDiagrams zum Zeitpunkt der Zuweisung = nil ist
|
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
Der scheint tatsächlich
Delphi-Quellcode:
zu sein, zumindest versagt er bei
nil
Delphi-Quellcode:
Links in der IDE schreibt er für das ganze 'self' ebenfalls
writeln(PageControlCCDiagrams.Name);
Delphi-Quellcode:
, und für alle Objekte den Wert
nil
Delphi-Quellcode:
. Für den Schleifenzähler
^nicht verfügbarer Wert.
Delphi-Quellcode:
schreibt er 0.
j
|
Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
Dieser Fehler wurde jetzt behoben. Es musste einfach eine "createte" Instanz vom Frame, das diese Funktion beherbergt, benutzt werden.
Die Jagd geht aber weiter ... diesmal nach einem EInvalidPointer :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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