Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Fehlermeldung (https://www.delphipraxis.net/110072-problem-mit-fehlermeldung.html)

Landfloh 12. Mär 2008 15:29


Problem mit Fehlermeldung
 
Hallo

Ich habe ein Problem mit einer Fehlermeldung die immer kommt wenn ich in meinem Programm diesen Formular öffne.

Hir die Fehlermeldung:
Zugriffsverletzung bei Adresse 00466A67 in Modul 'LPT_PORT_EIN_AUS_P_2.exe'. Lesen von Adresse 00000000.

Hier ist der Quelltext von der "Ausdangsunit":
Delphi-Quellcode:
unit LPT_PORT_NEU;

interface

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

type
  TForm1 = class(TForm)
    GroupBox2: TGroupBox;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    MainMenu1: TMainMenu;
    Extras1: TMenuItem;
    Datenanzeigen1: TMenuItem;
    Direckteingabe1: TMenuItem;
    Aus1: TMenuItem;
    N2MRechts1: TMenuItem;
    Aus01: TMenuItem;
    Navigatioon1: TMenuItem;
    procedure Button2Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Alle1Click(Sender: TObject);
    procedure Keine1Click(Sender: TObject);
    procedure Datenanzeigen1Click(Sender: TObject);
    procedure Direckteingabe1Click(Sender: TObject);
    procedure Aus1Click(Sender: TObject);
    procedure N2MRechts1Click(Sender: TObject);
    procedure Aus01Click(Sender: TObject);
    procedure Navigatioon1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  BasAdr: Integer = $378;
//  ComHandle: THandle;
  gelesen: Integer;
implementation

uses LPT_PORT_NEU_3, LPT_PORT_NEU_P, TEST; // Test ist die Unit die herforgerufen werden soll

{$R *.dfm}

procedure Out32 ( Addresse: Integer; Wert: byte ); stdcall; export; external 'INPOUT32.DLL';
function Inp32 ( Addresse: Integer ): Byte; stdcall; export; external 'INPOUT32.DLL';


procedure TForm1.Button2Click(Sender: TObject);
begin
  Out32 ( BasAdr, 1 + 4);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  Out32 ( BasAdr, 2 + 8);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Out32 ( BasAdr, 1);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  Out32 ( BasAdr, 4);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Out32 ( BasAdr, 0);
end;

procedure TForm1.Alle1Click(Sender: TObject);
begin
  Out32 ( BasAdr, 255);
end;

procedure TForm1.Keine1Click(Sender: TObject);
begin
  Out32 ( BasAdr, 0);
end;

procedure TForm1.Datenanzeigen1Click(Sender: TObject);
begin
  Form2.ShowModal;
end;

procedure TForm1.Direckteingabe1Click(Sender: TObject);
begin
  Form3.ShowModal;
end;

procedure TForm1.Aus1Click(Sender: TObject);
begin
  Out32 ( BasAdr, 1 + 8);
end;

procedure TForm1.N2MRechts1Click(Sender: TObject);
begin
  Out32 ( BasAdr, 2 + 4);
end;

procedure TForm1.Aus01Click(Sender: TObject);
begin
  Out32 (BasAdr, 0);
end;

procedure TForm1.Navigatioon1Click(Sender: TObject);
begin
  Form4.ShowModal; // Hier ist der Befehl der die Unit hervorrufen soll
end;

end.
und hier der von dem Formular was herforgerufen werden soll:
Delphi-Quellcode:
unit TEST;

interface

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

type
  TForm4 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Label1: TLabel;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form4: TForm4;
  BasAdr: Integer = $378;
implementation

{$R *.dfm}
procedure Out32 ( Addresse: Integer; Wert: byte ); stdcall; export; external 'INPOUT32.DLL';
function Inp32 ( Addresse: Integer ): Byte; stdcall; export; external 'INPOUT32.DLL';




procedure TForm4.Button3Click(Sender: TObject);
begin
  Out32 ( BasAdr, 1 + 4);
  sleep (1700);
  Out32 ( BasAdr, 2 + 4);
  sleep (480);
  Out32 ( BasAdr, 1 + 4);
  sleep (4000);
  Out32 (BasAdr, 0);
end;

procedure TForm4.Button1Click(Sender: TObject);
begin
  Out32 ( BasAdr, 0);
end;

procedure TForm4.Button5Click(Sender: TObject);
begin
  Out32 ( BasAdr, 1 + 4);
  sleep (5000);
  Out32 ( BasAdr, 0);
end;

procedure TForm4.Button4Click(Sender: TObject);
begin
  Out32 ( BasAdr, 1 + 4);
  sleep (5000);
  Out32 ( BasAdr, 2 + 4);
  sleep (500);
  Out32 ( BasAdr, 1 + 4);
  sleep (3000);
  Out32 (BasAdr, 0);
end;

end.
Kann mir jemand helfen? :?: :?: :?:
Ich hatte diesen Problem schon mal aber diesens Mal kann ich den Fehler vom letzten Mal nicht finden. :wall:

Gruß Landfloh :pale:

SirThornberry 12. Mär 2008 15:33

Re: Problem mit Fehlermeldung
 
Form4 wird schlicht und ergreifend nil sein weil es noch nicht erzeugt wurde. Am besten kommst du wenn du Form4 im FormCreate von Form1 erzeugst und Form4 eine membervariable von Form1 ist. Somit bekommst du keine Probleme wenn irgendwann mal die globale Variable umbenannt wurde (was ja automatisch beim benennen der Formularklasse passiert)

Könntest du dem Beitrag bitte einen aussagekräftigen Titel geben? :-) "Fehlermeldung" sagt so gut wie nichts aus und das es sich um ein problem handelt besagt bereits die Sparte in der du gepostet hast.

Landfloh 12. Mär 2008 15:38

Re: Problem mit Fehlermeldung
 
Das versteh ich noch nicht mit dem membervariable und mit dem Form1. :wiejetzt:
Kannst du es villeicht noch etwas genauer erklären?

SirThornberry 12. Mär 2008 15:40

Re: Problem mit Fehlermeldung
 
Du hast mehrere Forms. Form1 bis FormX. Innerhalb von Form1 versuchst du Form4 anzuezeigen. Form4 wird aber nach Form1 erzeugt. Und anhand der Fehlermeldung vermute ich einfach mal das Form4 noch nicht erzeugt wurde zu dem Zeitpuntk wo du es anzeigen lassen willst.

Landfloh 12. Mär 2008 15:43

Re: Problem mit Fehlermeldung
 
Zitat:

Zitat von SirThornberry
Du hast mehrere Forms. Form1 bis FormX. Innerhalb von Form1 versuchst du Form4 anzuezeigen. Form4 wird aber nach Form1 erzeugt. Und anhand der Fehlermeldung vermute ich einfach mal das Form4 noch nicht erzeugt wurde zu dem Zeitpuntk wo du es anzeigen lassen willst.

Aso so?

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form4.Show;
end;
Dann zeigt er noch befor das Programm überhaupt läuft die Fehlermeldung an.

taaktaak 12. Mär 2008 15:52

Re: Problem mit Fehlermeldung
 
Moin, Moin,
denke auch, dass Form4 noch nicht existiert.
Da die Formulare aber offenbar alle erst nach Betätigunmg eines Buttons geöffnet werden (?!) ist m.E. die Reihenfolge der Erzeugung wohl nicht relevant - schau mal in den Projektoptionen nach, ob die Formulare auch alle automatisch erzeugt werden. Wenn dieses sicher gestellt ist, dürfte der Fehler eigentlich nicht mehr auftreten.

Landfloh 12. Mär 2008 15:54

Re: Problem mit Fehlermeldung
 
Ich habs jetzt schon geschafft ich hab einfach alles noch mal neu gemacht und jetzt fungtionirt es. :?: :?:

Ich finds super :lol: :witch: :dancer: :dancer2: :cheer:

mkinzler 12. Mär 2008 16:00

Re: Problem mit Fehlermeldung
 
Du solltest dich trotzdem mal an die Grundlagen machen

bluesbear 12. Mär 2008 20:18

Re: Problem mit Fehlermeldung
 
Zitat:

Zitat von Landfloh
Ich habs jetzt schon geschafft ich hab einfach alles noch mal neu gemacht und jetzt fungtionirt es.

"Fungitioniert". :mrgreen: Ja, manchmal schießen Geistesblitze wie Pilze aus dem Boden.

DeddyH 12. Mär 2008 20:30

Re: Problem mit Fehlermeldung
 
[OT] Geile Wortschöpfung, fast so schön wie "Partionieren, Formieren und Defragmieren" :mrgreen: [/OT]


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