Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Leidiges EAccessViolation bei dynamischer TabSheet-Erzeugun (https://www.delphipraxis.net/82490-leidiges-eaccessviolation-bei-dynamischer-tabsheet-erzeugun.html)

triangulum 14. Dez 2006 10:30


Leidiges EAccessViolation bei dynamischer TabSheet-Erzeugun
 
Salü,

folgender Code

Delphi-Quellcode:
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);

     [...]
Es geht also um dynamische TabSheet Erzeugung, in Abhängigkeit des Wertes von nTemp.
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?

mkinzler 14. Dez 2006 11:51

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
 
Wo tritt der Fehler auf?

triangulum 14. Dez 2006 12:15

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
 
Er markiert diese Zeile

Delphi-Quellcode:
TabSheetCCDiagramsArray[j].PageControl := PageControlCCDiagrams;
als Fehlerursache. Wenn ich sie auskommentiere, tritt der Fehler nicht auf.

dfried 14. Dez 2006 12:25

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
 
Zitat:

Zitat von triangulum
Er wirft ein EAccessViolation Error. Ihm gefällt die Zuweisung des PageControlCCDiagrams als Parent für den TabSheet nicht. Woran könnte das liegen?

Vielleicht daran, dass du den Parent gar nicht zuweist?
Mach mal vor der Zugeisung des PageControl noch folgendes:
Delphi-Quellcode:
TabSheetCCDiagramsArray[j].Parent := PageControlCCDiagrams;

triangulum 14. Dez 2006 12:38

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
 
Tat ich... jetzt frißt er ebendiese Zeile nicht:

Delphi-Quellcode:
 TabSheetCCDiagramsArray[j].Parent := PageControlCCDiagrams;

SirThornberry 14. Dez 2006 12:41

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?

triangulum 14. Dez 2006 12:46

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
 
Zitat:

Erste Gelegenheit für Exception bei $7C812A5B. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 0047E4CE in Modul 'soundso.exe'. Lesen von Adresse 00000268'. Prozess soundso.exe (3916)
. Soweit die IDE

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;

SirThornberry 14. Dez 2006 12:48

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
 
Dann würde ich doch mal spontan tippen das PageControlCCDiagrams zum Zeitpunkt der Zuweisung = nil ist

triangulum 14. Dez 2006 13:00

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze
 
Der scheint tatsächlich
Delphi-Quellcode:
nil
zu sein, zumindest versagt er bei
Delphi-Quellcode:
writeln(PageControlCCDiagrams.Name);
Links in der IDE schreibt er für das ganze 'self' ebenfalls
Delphi-Quellcode:
nil
, und für alle Objekte den Wert
Delphi-Quellcode:
^nicht verfügbarer Wert.
. Für den Schleifenzähler
Delphi-Quellcode:
j
schreibt er 0.

triangulum 14. Dez 2006 13:31

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 23:32 Uhr.
Seite 1 von 2  1 2      

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