AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zugriffsverletzung

Ein Thema von arisen89 · begonnen am 6. Feb 2012 · letzter Beitrag vom 6. Feb 2012
Antwort Antwort
arisen89

Registriert seit: 1. Dez 2011
16 Beiträge
 
#1

Zugriffsverletzung

  Alt 6. Feb 2012, 11:06
Hallo zusammen,
ich habe zwei Klassen vor mir, Main-Klasse : TForm1 und TForm2, die mehrmals von Form1 erstellt wird. In Form1(of TForm1) wird ein Array von TForm2 erstellt die jeweils eine public-procedur Fill enthält und genau wenn ich in Form1 die forms[page].Fill(...) anwende kommt sowas : Zugriffsverletzung 0051D26E . Idee ? wäre dankbar.

Code:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ComCtrls;

type
  TForm2 = class(TForm)
    Label8: TLabel;
    Label9: TLabel;
    Label11: TLabel;
    Splitter1: TSplitter;
    Splitter2: TSplitter;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    Label34: TLabel;
    Label35: TLabel;
    Edit3: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit21: TEdit;
    Edit22: TEdit;
    Edit23: TEdit;
    Edit24: TEdit;
    Edit25: TEdit;
    Edit26: TEdit;
    Edit27: TEdit;
    Edit28: TEdit;
    Edit29: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Fill(Values: array of string;section : integer);
  private
    { Private-Deklarationen }
  public
    labels : array of array of TLabel;
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  x,y : Integer;

implementation

{$R *.dfm}
Uses Unit1;


procedure TForm2.Fill(Values : array of string; section : integer);
var
  count,anzahl : Integer;

begin
    anzahl := Length(Values);
    labels[section][count] := TLabel.Create(self);
  {for count := 0 to anzahl-1 do
  begin
    labels[section][count] := TLabel.Create(Form1);
    labels[section][count].Caption := Values[count];
    labels[section][count].Top := 50;
    labels[section][count].Left := 50;
    ShowMessage(labels[section][count].Caption);
  end; }
end;

end.
und
Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls,
  Vcl.ExtCtrls,IniFiles,DateUtils,Unit2;

type



  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Label10: TLabel;
    Button2: TButton;
    Edit2: TEdit;
    Label3: TLabel;
    Panel2: TPanel;
    PageControl1: TPageControl;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button4Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation


{$R *.dfm}



procedure TForm1.Button4Click(Sender: TObject);
var
   newsheet : TTabSheet;

begin

end;

procedure TForm1.FormCreate(Sender: TObject);
var
     tmp_Values, Sections : TStringList;
     Values : array of string;
     ini: TIniFile;
     page,i,j: Integer;
     tabs : array of TTabSheet;
     forms : array of TForm2;

begin
  Form1.Left := (screen.width - Form1.width) div 2 ;
  Form1.top := (screen.height - Form1.height) div 2;

  Label3.Caption := FormatDateTime('dd.mm.yyyy', Now);
  Label4.Caption := FormatDateTime('hh:nn:ss', Now);

  Sections := TStringList.Create;
  tmp_Values := TStringList.Create;

  ini := TIniFile.Create('\\blnn288x.ww003.XXXXXXXXXXXXXXXX.net\Transfer\Makhouli\test.ini');
  ini.readSections(Sections);


  page :=-1;
  i :=0;

  while (i < Sections.Count) do
  begin
    ini.readSectionValues(Sections[i],tmp_Values);
    SetLength(values,tmp_Values.Count);
    for j := 1 to tmp_Values.Count do
    begin
      Values[j] := ini.ReadString(Sections[i],inttostr(j),'not found');
    end;
    if (Values[1] = 't') then
    begin
      page := page+1;
      SetLength(forms,page+1);
      SetLength(tabs,page+1);

      tabs[page] := TTabSheet.Create(PageControl1);
      tabs[page].Caption:= Sections[i];
      tabs[page].PageControl := PageControl1;

      forms[page] := TForm2.Create(Form1);
      forms[page].Parent := tabs[page];
      forms[page].Align := alClient;
      forms[page].BorderStyle := bsNone;
      forms[page].Visible := true;
      forms[page].Label8.Caption := inttostr(page);
    end;
    (forms[page].FindComponent('label'+IntToStr(i)) as TLabel).Caption:=Sections[i];
    forms[page].Fill(Values,i);
    i:=i+1;
  end;
end;




procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label4.Caption := TimeToStr(Now);
  Timer1.Interval := 1000 - MilliSecondOf(Now);
end;

end.

Geändert von arisen89 ( 6. Feb 2012 um 11:13 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
917 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Zugriffsverletzung

  Alt 6. Feb 2012, 11:51

Code:
  page :=-1;
  i :=0;

  while (i < Sections.Count) do
  begin
...
    if (Values[1] = 't') then
    begin
      page := page+1;
   ....
    end;
    (forms[page].FindComponent('label'+IntToStr(i)) as TLabel).Caption:=Sections[i];
    forms[page].Fill(Values,i); //da Fehler?
    i:=i+1;
  end;
end;
Du macsht page := page+1; nur bei einer bestimmten Bedingung, ein Inc(i) aber bei jeder Section - das kann ja nicht gut gehen...

GRüße
Delphi programming
  Mit Zitat antworten Zitat
arisen89

Registriert seit: 1. Dez 2011
16 Beiträge
 
#3

AW: Zugriffsverletzung

  Alt 6. Feb 2012, 12:40

Code:
  page :=-1;
  i :=0;

  while (i < Sections.Count) do
  begin
...
    if (Values[1] = 't') then
    begin
      page := page+1;
   ....
    end;
    (forms[page].FindComponent('label'+IntToStr(i)) as TLabel).Caption:=Sections[i];
    forms[page].Fill(Values,i); //da Fehler?
    i:=i+1;
  end;
end;
Du macsht page := page+1; nur bei einer bestimmten Bedingung, ein Inc(i) aber bei jeder Section - das kann ja nicht gut gehen...

GRüße
da ist der fehler, richtig
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286
Online

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
2.305 Beiträge
 
Delphi 7 Personal
 
#4

AW: Zugriffsverletzung

  Alt 6. Feb 2012, 12:46
Hab ich's übersehen?
Dafehlt noch ein setlength(labels,xx); Gruß
K-H
Programme gehorchen nicht Deinen Absichten
sondern Deinen Anweisungen
Do it with Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2012 by Daniel R. Wolf