Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Brauche Hilfe bei Zugriffsverletzung (https://www.delphipraxis.net/166771-brauche-hilfe-bei-zugriffsverletzung.html)

dillipp 28. Feb 2012 17:17

Brauche Hilfe bei Zugriffsverletzung
 
Moin, ich hab grade angefangen, ein Programm zu DSA (kennt bestimmt keiner, is auch unwichtig) zu schreiben. In dem Programm gibt einen Hinzufügen Button, der einem Array daten zuweist, jedoch bekomme ich immer eine Zugriffsverletzung, wenn ich das versuche. Kann mir jemand helfen?

Ach ja, hier noch mal der Quellcode:

Delphi-Quellcode:
unit UnitMap;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Image1: TImage;
    Button1: TButton;
    ButtonSave: TButton;
    ButtonLoad: TButton;
    ButtonAdd: TButton;
    ButtonDelete: TButton;
    ButtonQuit: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    EditName: TEdit;
    EditParty: TEdit;
    EditKO: TEdit;
    EditKK: TEdit;
    EditTP: TEdit;
    EditINI: TEdit;
    EditAT: TEdit;
    EditPA: TEdit;
    EditWaffe: TEdit;
    EditGS: TEdit;
    EditLeP: TEdit;
    Button2: TButton;
    procedure ButtonQuitClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButtonAddClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
type TActor = class
     public
       Name:String;
       Index:Integer;
       Party:String;
       KO:Integer;
       KK:Integer;
       LeP, INI, AT, PA, GS:Integer;
       Waffe, TP:String;
     end;
type TDatensatz = record
                    Map:String[40];
                    Actors:TActor;
                  end;
var
  Form1: TForm1;
  FActors: Array[1..40] of TActor;
  Index:Integer;
implementation

uses UnitAdd;

{$R *.DFM}

procedure TForm1.ButtonQuitClick(Sender: TObject);
begin
  exit;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Button1.Caption='+' then
    begin
      Button1.Caption:='-';
      ButtonSave.visible:=true;
      ButtonLoad.visible:=true;
      ButtonAdd.visible:=true;
      ButtonDelete.visible:=true;
      ButtonQuit.visible:=true;
    end
  else
    begin
      Button1.Caption:='+';
      ButtonSave.visible:=false;
      ButtonLoad.visible:=false;
      ButtonAdd.visible:=false;
      ButtonDelete.visible:=false;
      ButtonQuit.visible:=false;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  index:=0;
end;

procedure TForm1.ButtonAddClick(Sender: TObject);
begin
  Form1.Width:=Form1.Width+100;
end;

function IsNumeric(s:String):Boolean;
var i:Integer;
begin
  Result:=False;
  for i := 1 to Length(s) do
    if not (s[i] in ['0'..'9']) then showmessage('Ungültige Zeichen!!')
                                else Result:=True;
end;
       
procedure TForm1.Button2Click(Sender: TObject);
begin
  index:=1;
 // with FActors[index] do
    begin
      FActors[index].Name:=EditName.text;
      FActors[index].Party:=EditParty.text;
      if IsNumeric(EditParty.text)=true then FActors[index].KO:=StrToInt(EditKO.text);
      if IsNumeric(EditKK.text)=true then FActors[index].KK:=StrToInt(EditKK.text);
      FActors[index].TP:=EditTP.text;
      if IsNumeric(EditINI.text)=true then FActors[index].INI:=StrToInt(EditINI.text);
      if IsNumeric(EditAT.text)=true then FActors[index].AT:=StrToInt(EditAT.text);
      If IsNumeric(EditPA.text)=true then FActors[index].PA:=StrToInt(EditPA.text);
      FActors[index].Waffe:=EditWaffe.text;
      if IsNumeric(EditGS.text)=true then FActors[index].GS:=StrToInt(EditGS.text);
      if IsNumeric(EditLeP.text)=true then FActors[index].LeP:=StrToInt(EditLeP.text);
    end;
end;

end.
jetzt schon mal vielen dank,

dillipp

p80286 28. Feb 2012 17:29

AW: Brauche Hilfe bei Zugriffsverletzung
 
Ich geh mal davon aus, daß jede Class ein Create benötigt.
Sicher bin ich mir allerdings, daß
Delphi-Quellcode:
if IsNumeric(EditParty.text)=true then
nicht das Gelbe vom Ei ist.
Delphi-Quellcode:
if IsNumeric(EditParty.text) then
ist schon etwas besser.

Gruß
K-H

dillipp 28. Feb 2012 17:35

AW: Brauche Hilfe bei Zugriffsverletzung
 
Ja, das wars

ich danke dir vielmals.
Das mit dem unschönen hatte ich auch zuerst nicht drinnen, aber ich wusste nicht wo das problem war und hab deswegen einfach mal =true hingeschrieben.
Jetzt funktionier aber soweit alles.

dillipp

haentschman 28. Feb 2012 18:26

AW: Brauche Hilfe bei Zugriffsverletzung
 
Hallo...
schaue dir bitte dringend mal Tutorials über den Aufbau einer Klasse an.
Delphi-Quellcode:
TActor = class
     public
       Name:String;
       Index:Integer;
       Party:String;
       KO:Integer;
       KK:Integer;
       LeP, INI, AT, PA, GS:Integer;
       Waffe, TP:String;
     end;
...mag zwar funktionieren aber im public arbeitet man mit Properties und "Klasseninterne" Sachen gehören in private. Von diesen Sichtbarkeiten gibt es noch welche "for Runaways" :stupid:
Lese dir die Tutorials mal durch: http://www.delphi-treff.de/tutorials...rogrammierung/

Aphton 28. Feb 2012 19:53

AW: Brauche Hilfe bei Zugriffsverletzung
 
Ach, noch am Rande bemerkt:
deine "IsNumeric" Funktion prüft nur, ob das letzte Zeichen eine Zahl ist!

himitsu 28. Feb 2012 20:00

AW: Brauche Hilfe bei Zugriffsverletzung
 
Fast.

Ob mindestens eines der Zeichen eine Ziffer ist.
Und für jedes einzelne ungültige Zeichen wird die Meldung angezeigt.

Delphi-Referenz durchsuchenTryStrToInt

Aphton 28. Feb 2012 21:38

AW: Brauche Hilfe bei Zugriffsverletzung
 
Stimmt...

Verbesserung: einfach Result Wertezuweisung negieren!

dillipp 3. Mär 2012 08:56

AW: Brauche Hilfe bei Zugriffsverletzung
 
Thx, für die hilfe,

meine IsNumeric Funktion meckert jetzt nur noch bei jedem falschen wort, mehr brauche ich hier aber auch nicht.
Mit dem Aufbau von Klassen hab ich mich an dem Abend (fast) zum ersten mal beschäftigt, vergebt mir also bitte all meine Fehler^^

Furtbichler 3. Mär 2012 09:14

AW: Brauche Hilfe bei Zugriffsverletzung
 
Zitat:

Zitat von haentschman (Beitrag 1153508)
Hallo...
schaue dir bitte dringend mal Tutorials über den Aufbau einer Klasse an.
...mag zwar funktionieren aber im public arbeitet man mit Properties und "Klasseninterne" Sachen gehören in private.

Nein, so kann man das nicht verallgemeinern. Hast Du noch nie etwas von DTO (Data transfer object) gehört?

Sir Rufo 3. Mär 2012 09:21

AW: Brauche Hilfe bei Zugriffsverletzung
 
Zitat:

Zitat von Furtbichler (Beitrag 1154252)
Zitat:

Zitat von haentschman (Beitrag 1153508)
Hallo...
schaue dir bitte dringend mal Tutorials über den Aufbau einer Klasse an.
...mag zwar funktionieren aber im public arbeitet man mit Properties und "Klasseninterne" Sachen gehören in private.

Nein, so kann man das nicht verallgemeinern. Hast Du noch nie etwas von DTO (Data transfer object) gehört?

Für den Anfang kann man das schon so verallgemeinern. Dann denkt man auf jeden Fall immer zweimal nach, wenn es erforderlich ist davon abzuweichen ;)


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