Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi EAccess Violation Fehler (https://www.delphipraxis.net/111520-eaccess-violation-fehler.html)

Bx3 4. Apr 2008 16:58


EAccess Violation Fehler
 
Liste der Anhänge anzeigen (Anzahl: 2)
hab schon wieder nen prob und es nich in der suche verständlich erklärt gefunden,
nen bild von dem fehler und der anzeige bei welcher stelle es sein soll hab ich mit
rangehangen, und noch ein bissl quelltext - ich raff den fehlker einfach nich

Code:
unit Unit3;

interface

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

type
  TStrassenInfo = class(TForm)
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    procedure FormActivate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  StrassenInfo: TStrassenInfo;
  k,m:byte;

implementation

uses Unit1;

{$R *.DFM}

procedure TStrassenInfo.FormActivate(Sender: TObject);
 var x:byte;
begin
 For x:=1 to 4 do
  (Findcomponent('Image'+intToStr(x))as TImage).visible:=false;
 k:=Unit1.k;
 (Findcomponent('Image'+intToStr(k+1))as TImage).visible:=true;
 For x:=1 to 28 do
  If Unit1.Strasse[x].nr = Unit1.Spiela[k].stand then
   m:=x;
 Panel1.Caption:=(Unit1.Strasse[m].Name);
 If Unit1.Strasse[m].verkauft = 0 then
  BitBtn1.enabled:=true;
end;

procedure TStrassenInfo.BitBtn1Click(Sender: TObject);
begin
 (Form1.Findcomponent('combobox'+intToStr(Unit1.k))as Tcombobox).items.add(Unit1.Strasse[m].Name);
 Unit1.Spiela[k].Guthaben:=(Unit1.Spiela[k].Guthaben)-(Unit1.Strasse[m].Wert);
 (Form1.Findcomponent('panel'+intToStr(6+k))as TPanel).caption:=floattostr(Spiela[k].Guthaben);
 BitBtn1.enabled:=false;
 Unit1.Strasse[m].verkauft:=1;
end;

procedure TStrassenInfo.BitBtn2Click(Sender: TObject);
begin
 Strasseninfo.close;
end;

end.
und von der stelle wo die unit3 aufgerufen wird
Code:
procedure stehen(var p,q,k:byte);
 var x:byte;
begin
.
.
.
 For x:=1 to 4 do
  begin
   If k <> x then
    If Spiela[k].stand = Spiela[x].stand then
     begin
      p:=p+5;
      q:=q+5;
     end;
  end;
 For x:=1 to 28 do
  If Strasse[x].nr = Spiela[k].stand then
   StrassenInfo.show;
end;
Form3 hab ich Strasseninfo genannt

STS301 4. Apr 2008 17:01

Re: EAccess Violation Fehler
 
unit3 in die Uses List aufnehmen

Bx3 4. Apr 2008 17:09

Re: EAccess Violation Fehler
 
is sie schon

DeddyH 4. Apr 2008 17:19

Re: EAccess Violation Fehler
 
Wie ist Spiela definiert?

shmia 4. Apr 2008 17:23

Re: EAccess Violation Fehler
 
Hier ist gefährlicher Code:
Delphi-Quellcode:
For x:=1 to 4 do
  (Findcomponent('Image'+intToStr(x))as TImage).visible:=false;
Es könnte ja sein, dass es Image4 nicht gibt; dann Zugriffsverletzung.
so wird die Sache entschärft:
Delphi-Quellcode:
var
  c : TComponent;
...
For x:=1 to 4 do
begin
  c := Findcomponent('Image'+intToStr(x));
  Assert(Assigned(c));
  (c as TImage).visible:=false;
end;

Bx3 4. Apr 2008 17:35

Re: EAccess Violation Fehler
 
gute idee, habe jetze die stelle entschärft und der fehler kommt nich mehr so zeitig,
allerdings is jetze einer 100%ig hier an der stelle:

Delphi-Quellcode:
procedure TStrassenInfo.BitBtn1Click(Sender: TObject);
begin
 (Form1.Findcomponent('combobox'+intToStr(Unit1.k))as Tcombobox).items.add(Unit1.Strasse[m].Name);
 Unit1.Spiela[k].Guthaben:=(Unit1.Spiela[k].Guthaben)-(Unit1.Strasse[m].Wert);
 (Form1.Findcomponent('panel'+intToStr(6+k))as TPanel).caption:=floattostr(Spiela[k].Guthaben);
 BitBtn1.enabled:=false;
 Unit1.Strasse[m].verkauft:=1;
end;
sobald ich diesen button drücke verabschiedet sich delphi^^

Bx3 4. Apr 2008 17:39

Re: EAccess Violation Fehler
 
hab die zeile, is die hier:
Delphi-Quellcode:
 (Form1.Findcomponent('combobox'+intToStr(Unit1.k))as Tcombobox).items.add(Unit1.Strasse[m].Name);
aber warum??

DeddyH 4. Apr 2008 17:39

Re: EAccess Violation Fehler
 
Das ist doch dasselbe in grün.

Bx3 4. Apr 2008 17:47

Re: EAccess Violation Fehler
 
was is mit grün??

DeddyH 4. Apr 2008 17:48

Re: EAccess Violation Fehler
 
Ich meinte damit, Du kannst den Code von shmia doch hierher übertragen.

Bx3 4. Apr 2008 17:51

Re: EAccess Violation Fehler
 
das is aber ne komplett andere stelle (häh???)

DeddyH 4. Apr 2008 17:54

Re: EAccess Violation Fehler
 
Das hat doch mit der Stelle nichts zu tun. Wenn es z.B. die ComboBox4 nicht gibt, knallt es. Also wieder prüfen, wie shmia demonstriert hat.

wido 4. Apr 2008 17:58

Re: EAccess Violation Fehler
 
Ja, aber das Prinzip ist das Selbe.

Was war Dein Problem am Anfang?
Das Du versucht hast auf ein Image zuzugreifen, daß nicht existiert.

Wie wurde es entschärft?
Indem man nicht einfach blind versucht zuzugreifen, sondern erstmal via Assigned schaut ob das Objekt überhaupt existiert.

Jetzt übertrag dieses Vorgehen, auf deinen jetzigen Fehler. Und ja, das solltest Du selbst machen. Sonst werden immer Leute in Foren für Dich programmieren und niemals Du selbst.

DeddyH 4. Apr 2008 17:59

Re: EAccess Violation Fehler
 
@wido: :thumb: , das war auch mein Gedanke.

Bx3 4. Apr 2008 18:12

Re: EAccess Violation Fehler
 
ich hatte es nich so entschärft wie er es vorgegeben hatte^^,
ich wusste zwar was er meinte aber war damit für mein prog nich zufrieden,
habs jetze anders gemacht und läuft auch stabil bis auf ein paar kleinigkeiten
aber das lässt sich auch beheben

trotzdem danke

lg Bx3


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.

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