Thema: Delphi Fehler nach Schließen

Einzelnen Beitrag anzeigen

Theo1994

Registriert seit: 16. Apr 2011
5 Beiträge
 
#7

AW: Fehler nach Schließen

  Alt 16. Apr 2011, 11:43
Ok:
Die Programmdatei:
Delphi-Quellcode:
program bewegen;

uses
  Forms,
  Eingabe in 'eingabe.pas{FormE},
  ubewegen in 'ubewegen.pas{Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TFormE, FormE);
  Application.Run;
  Application.Destroy; //mit Application.free kommt der gleiche Fehler
                         {ohne einem der beiden kommt zwar die Meldung nicht, aber das Programm erscheint auch nicht wieder in Delphi ohne Strg+F2 zu drücken (passiert nach den Meldungen auch nicht)}
end.
Die Unit vom ersten Form:
Delphi-Quellcode:
unit Eingabe;

interface

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

type
  TFormE = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    ScrollBar1: TScrollBar;
    Button1: TButton;
    Label5: TLabel;
    procedure ScrollBar1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FormE: TFormE;

implementation

{$R *.dfm}

procedure TFormE.ScrollBar1Change(Sender: TObject);
//...

procedure TFormE.Button1Click(Sender: TObject);
begin
  Application.CreateForm(TForm1,Form1); //Formular mit Spiel aufbauen

  Form1.Label1.Caption:=FormE.Edit1.Text; //Eingegebenen Name für Spieler 1 übergeben
  Form1.Label2.Caption:=FormE.Edit2.Text; //Eingegebenen Namen für Spieler 2 übergeben
  Form1.Label5.Caption:=IntToStr(FormE.ScrollBar1.Position); //Übergabe der Gewinnpunktzahl

  FormE.Destroy; //Eingabe-Formular schließen
  Form1.Show; //Spiel-Formular anzeigen

end;

end.
Und das Form1:
Delphi-Quellcode:
unit ubewegen;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Feld: TShape;
    Ball: TShape;
    Button2: TButton;
    EditTastenEingabe: TEdit;
    Schl2: TShape;
    Button1: TButton;
    Schl1: TShape;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button4: TButton;
    Button3: TButton;

    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);
    procedure EditTastenEingabeKeyPress(Sender: TObject; var Key: Char);
    procedure Aus (Seite: Byte);
    procedure Button4Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Angabe (Seite: Byte);
    procedure BallPos (x,y: Integer);


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

var
  Form1: TForm1;
      x1, y1: Integer; //Position des Balles zum Rechnen
      Durchmesser: Byte; //Durchmesser des Balles um ggf. einzustellen
      Hoch: Integer; //Bewegung des Balles nach oben (in Pixeln je Timer)
                                      //wenn negativ -> nach unten
      Rechts: Integer; //Bewegung des Balles nach rechts (in Pixeln je Timer)
                                      //wenn negativ -> nach links
      Sp1Name, Sp2Name: Shortstring; //Spielernammen
      Gewinnpkt: Word; //Spielstand, bei dem ein Spieler gewonnen hat
      Seite: Word; //Seitenangabe
      Speed: Byte; //Geschwindigkeit des Balles (in Pixeln je Timer)

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
  //Variable Durchmesser mit Durchmesser des Balles belegen
  Durchmesser:=Ball.Width;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
 //...
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 //noch leer, das wird der Neustart des Spiels
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 //noch leer, das wird Neues Spiel -> Aufruf FormE
end;


//----------------------------------------------------------------------
procedure TForm1.Timer1Timer(Sender: TObject); //zeitliche Schrittbestimmung des Balles
begin
 //... Verschiebung des Balles mit verschiedenen Prüfungen
end;

procedure TForm1.EditTastenEingabeKeyPress(Sender: TObject; var Key: Char);
begin
 //... Steuerung der Schläger
end;

procedure TForm1.Aus(Seite: Byte); //wenn der Ball hinter die Seitenlinie kommt
begin
  //... Einsetzen des Balls
end;



procedure TForm1.Button4Click(Sender: TObject); (Beenden-Button)
begin
  Application.Terminate;
end;

procedure TForm1.Angabe (Seite: Byte);
begin
  //... neue Angabe des Balles
end;

procedure TForm1.BallPos(x,y: Integer);
begin
  Ball.Left:=x;
  Ball.Top:=y;
end;

end.

Ich hoffe, ich habe alles unwichtige rausgestrichen und alles wichtige drin gelassen...

@DeddyH: Diese beiden Dinge habe ich noch nie gehört... Also unwahrscheinlich...

Ich habe auch nichts gegen das rausschmeißen des Beenden-Buttons, aber mein Lehrer will den immer mit haben...

Danke auch schonmal für die schnellen Kommentare.
Theo1994

Geändert von Theo1994 (16. Apr 2011 um 11:45 Uhr)
  Mit Zitat antworten Zitat