Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletzung bei Adresse 0045976B ... (https://www.delphipraxis.net/169885-zugriffsverletzung-bei-adresse-0045976b.html)

anoymouserver 19. Aug 2012 01:44

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von Sir Rufo (Beitrag 1178735)
Zitat:

Zitat von anoymouserver (Beitrag 1178731)
naja das problem ist ich habe den Debugger laufen lassen aber er sag nirgenwo 'Fehler'

Na logo sagt er das, denn
Zitat:

Zitat von anoymouserver (Beitrag 1178730)
Zitat:

Zitat von Sir Rufo (Beitrag 1178728)
Und in welcher Zeile taucht der Fehler auf?

nach der Meldung ist immer diese Zeile markiert:

Delphi-Quellcode:
Form2.ShowModal; {Infobox öffnen}


ja schon aber das sagt er erst wenn ich das Prog. starte und versuche die Infobox zu öffnen nicht wenn ich mich mit F7 durcharbeite ...

und dann markiert er sie Zeile auch blau und nicht wie sonst bei fehlern rot

Sir Rufo 19. Aug 2012 01:46

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Upps, jo, das muss
Delphi-Quellcode:
TForm2.Create( nil )
heißen, da muss ja ein Owner angegeben werden (bzw. keiner -> nil, weil wir das Freigeben selber übernehmen)

Sir Rufo 19. Aug 2012 01:49

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von anoymouserver (Beitrag 1178737)
Zitat:

Zitat von Sir Rufo (Beitrag 1178735)
Zitat:

Zitat von anoymouserver (Beitrag 1178731)
naja das problem ist ich habe den Debugger laufen lassen aber er sag nirgenwo 'Fehler'

Na logo sagt er das, denn
Zitat:

Zitat von anoymouserver (Beitrag 1178730)
Zitat:

Zitat von Sir Rufo (Beitrag 1178728)
Und in welcher Zeile taucht der Fehler auf?

nach der Meldung ist immer diese Zeile markiert:

Delphi-Quellcode:
Form2.ShowModal; {Infobox öffnen}


ja schon aber das sagt er erst wenn ich das Prog. starte und versuche die Infobox zu öffnen nicht wenn ich mich mit F7 durcharbeite ...

und dann markiert er sie Zeile auch blau und nicht wie sonst bei fehlern rot

Debugger <> Compiler
Der Compiler sagt dir beim Erzeugen, ob es syntaktische Fehler gibt, weil die eben nicht zu übersetzen sind.
Der Debugger schlägt erst dann an, wenn das Programm an eine Stelle kommt, wo z.B. so ein Zugriff nicht funktioniert.

anoymouserver 19. Aug 2012 01:51

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
ich hab das jetzt hier eingefügt:
Delphi-Quellcode:
procedure TForm1.Info1Click(Sender: TObject);
begin
with TForm2.Create( nil ) do
  try
    ShowModal;
  finally
    Free;
  end; {Infobox öffnen}
end;
aber jetzt bekomm ich eine ähnliche fehlermeldung

Sir Rufo 19. Aug 2012 01:53

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von anoymouserver (Beitrag 1178740)
ich hab das jetzt hier eingefügt:
Delphi-Quellcode:
procedure TForm1.Info1Click(Sender: TObject);
begin
with TForm2.Create( nil ) do
  try
    ShowModal;
  finally
    Free;
  end; {Infobox öffnen}
end;
aber jetzt bekomm ich eine ähnliche fehlermeldung

Die da lautet und an welcher Stelle?

anoymouserver 19. Aug 2012 02:00

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
jetzt lautet die Meldung: 'Zugriffsverletzung bei Adresse 004379B8 in Modul 'ProjektBerechnen.exe'. Lesen von Adresse 00000048'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

aber nach wiederholtem OK drücken tauch immerhin schonmal die Infobox auf

Medium 19. Aug 2012 03:00

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Dann passiert etwas beim Erzeugen oder OnShow des TForm2 ein Zugriff ins Nichts. Haltepunkt auf die Zeile mit dem Create(), und mit F7 durchsteppen. Wenn das so weit geht, Haltepunkt auf die Zeile mit OnShow, mit F7 durchsteppen. Spätestens dort sollte die genaue Methode/Zeile klar werden, an der du ins Leere greifst.
Hier in der DP gibt's übrigens ein Tutorial zur Benutzung des Debuggers!

Bummi 19. Aug 2012 06:22

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Du erzeugst so:
Delphi-Quellcode:
with TForm2.Create( nil ) do
  try
    ShowModal;
  finally
    Free;
  end;
und greifst dann so zu ...
Delphi-Quellcode:
  Form2.Left := Form1.Left +145;
  Form2.Top := Form1.Top +45;
Form1 zeigt hier ins Nirvana, entweder Du verwendest
Delphi-Quellcode:
Form2 := TForm2.Create( nil );

with Form2 do
  try
    ShowModal;
  finally
    Free;
  end;
oder besser, lass den Bezug auf die Instanz weg
Delphi-Quellcode:
  Left := Application.Mainform.Left +145;
  Top := Application.Mainform.Top +45;

mkinzler 19. Aug 2012 09:45

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von Sir Rufo (Beitrag 1178733)
Ok, das bedeutet, dass es noch keine Instanz für die Form gibt ;)

Die Form2 hast du aus der Liste der automatisch zu erstellenden Formulare entfernt.
Das ist schon soweit ok, aber dann musst du dich auch um die Erzeugug einer Instanz kümmern.

Für so eine billige Form-ShowModal Instanz kann man folgendes benutzen:
Delphi-Quellcode:
with TForm2.Create do
  try
    ShowModal;
  finally
    Free;
  end;

Am Besten aber ohne with. Sonst handelt man sich u.U. weitere Ungereimtheiten im Verhalten ein.

anoymouserver 19. Aug 2012 11:03

AW: Zugriffsverletzung bei Adresse 0045976B ...
 
Zitat:

Zitat von Bummi (Beitrag 1178746)
oder besser, lass den Bezug auf die Instanz weg
Delphi-Quellcode:
  Left := Application.Mainform.Left +145;
  Top := Application.Mainform.Top +45;

damit funktoniert es bestens, vielen Dank

P.S.: wenn aber noch jemand verraten kann wie ich wie geschrieben quelltext spare währe ich sehr erfreut ... denn langsam mach mir die Länge ein wenig zu schaffen :D
Zitat:

Was er damit meint ist, daß sich Methoden wie aDEdLaengecChange, locker in nur kurzen 3 Zeilen Quellcode schreiben lassen, falls man sich nicht so viel Arbeit machen will. :angle2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 Uhr.
Seite 2 von 3     12 3      

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