Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringgrid meldet eAccessViolation (https://www.delphipraxis.net/54141-tstringgrid-meldet-eaccessviolation.html)

Benjin 28. Sep 2005 17:40


TStringgrid meldet eAccessViolation
 
Hallo,

ich habe auf einer Registerkarte eines TPageControl ein TStringgrid positioniert.

Nun bekomme ich jedesmal, wenn ich Eigenschaften des Grids aufrufen möchte eAccessViolations.

Das Grid ist nicht zur Laufzeit erstellt, womit ich davon ausgehe dass ich es nicht als Istanz initiieren muss.

Hier die hauptsächliche betroffene Prozedur:
Delphi-Quellcode:
procedure TFormSettings.setIdentifiers;
var
i, ZeilenanzahlBuerger, ZeilenAnzahlWirtschaft : Integer;
Datei: TStringList;
begin
Datei:=TStringList.Create;
Datei.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'identifiers.txt');

splitString(Datei.Strings[0],';',IdentifierNameW);
splitString(Datei.Strings[1],';',IdentifierZeilenNrW);
splitString(Datei.Strings[2],';',IdentifierAusdruckW);
splitString(Datei.Strings[3],';',IdentifierName);
splitString(Datei.Strings[4],';',IdentifierZeilenNr);
splitString(Datei.Strings[5],';',IdentifierAusdruck);


ZeilenanzahlBuerger := StringGridBuerger.ColCount;
ZeilenanzahlWirtschaft := StringGridWirtschaft.ColCount;

for i:= 0 to ZeilenanzahlBuerger-1 do
  begin
  IdentifierName.Strings[i] := FormSettings.StringGridBuerger.Cells[i, 0];
  IdentifierAusdruck.Strings[i] := FormSettings.StringGridBuerger.Cells[i, 2];
  IdentifierZeilenNr.Strings[i] := FormSettings.StringGridBuerger.Cells[i, 1];
  end;

for i:= 0 to ZeilenanzahlWirtschaft-1 do
  begin
  IdentifierNameW.Strings[i] := FormSettings.StringGridWirtschaft.Cells[i, 0];
  IdentifierAusdruckW.Strings[i] := FormSettings.StringGridWirtschaft.Cells[i, 2];
  IdentifierZeilenNrW.Strings[i] := FormSettings.StringGridWirtschaft.Cells[i, 1];
  end;

Datei.Free;
end;

marabu 28. Sep 2005 18:23

Re: TStringgrid meldet eAccessViolation
 
Hi,

da du die Stelle nicht bezeichnest, an der die Zugriffsverletzung auftritt, nehme ich die erste Stelle, an der du auf eine property des StringGrid zugreifst:

Delphi-Quellcode:
...
ZeilenanzahlBuerger := StringGridBuerger.ColCount;
...
Hier kann ich mir nur einen Lesezugriff an Adresse 0 vorstellen - weil das StringGrid nil ist. Prüfe das mal mit einem breakpoint nach.

Grüße vom marabu

Benjin 28. Sep 2005 21:04

Re: TStringgrid meldet eAccessViolation
 
Die AV tritt immer auf, egal welchen der enthaltenen Zugriffe auf das Grid ich als erstes provoziere.

Benjin 28. Sep 2005 21:07

Re: TStringgrid meldet eAccessViolation
 
Zitat:

Zitat von marabu
Hi,

da du die Stelle nicht bezeichnest, an der die Zugriffsverletzung auftritt, nehme ich die erste Stelle, an der du auf eine property des StringGrid zugreifst:

Delphi-Quellcode:
...
ZeilenanzahlBuerger := StringGridBuerger.ColCount;
...
Hier kann ich mir nur einen Lesezugriff an Adresse 0 vorstellen - weil das StringGrid nil ist. Prüfe das mal mit einem breakpoint nach.

Grüße vom marabu

Das habe ich schon geprüft, es sind genau diese Stellen.

Wie kann ein StringGrid nil sein, was nicht zur Laufzeit erstellt wird?

Christian Seehase 28. Sep 2005 21:35

Re: TStringgrid meldet eAccessViolation
 
Moin Kurt,

Zitat:

Zitat von Benjin
Wie kann ein StringGrid nil sein, was nicht zur Laufzeit erstellt wird?

berechtigte Frage, vorausgesetzt, das Stringgrid befindet sich auf FormSettings, wovon man allerdings, auf Grund des Codes, ausgehen muss :gruebel:

Hast Du denn mal nachgeprüft, ob das StringGrid = nil ist?

Verwendest Du irgendwo Arrays?
Ich könnte mir nämlich vorstellen, dass eventuell die Werte durch das Überschreiten von Grenzen überschrieben, und somit ungültig werden.

(ggf. mal die Bereichsprüfung in den Compileroptionen aktivieren)

Benjin 1. Okt 2005 11:39

Re: TStringgrid meldet eAccessViolation
 
Zitat:

Zitat von Christian Seehase
Verwendest Du irgendwo Arrays?
Ich könnte mir nämlich vorstellen, dass eventuell die Werte durch das Überschreiten von Grenzen überschrieben, und somit ungültig werden.

(ggf. mal die Bereichsprüfung in den Compileroptionen aktivieren)

Tue ich, ja.
Werde das mal checken, danke.


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