Hi,
ich habe folgendes Problem: Ich beherrsche C++ relativ gut und arbeite damit seit mehreren Jahren, nun muss ich allerdings ein Programm in Delphi schreiben (ich verwende Delphi 7 personal).
Als kleine Tests hat mir ein Freund eine Aufgabe aus dem Informatik-Unterricht gegeben, welche ich nun versuche zu erfüllen. Ich soll einen Zug (bestehend aus mehreren Waggons) erzeugen, der sich praktisch hin- und herbewegt.
Mein Gedanke: Eine Klasse waggon erstellen, welche jeweils einen Zeiger auf den Waggon hinter sich selbst enthält.
Das Hauptfenster enthält also nur den ersten Waggon. Soweit, so gut. Ich habe jetzt den folgenden Code:
main.pas
Delphi-Quellcode:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, waggon;
type
TForm1 =
class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
GroupBox1: TGroupBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
MainWaggon: TWaggon;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
MainWaggon.Create(GroupBox1, '
lok.png', 20);
end;
end.
waggon.pas
Delphi-Quellcode:
unit waggon;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TWaggon =
class
constructor Create(main_form: TGroupBox; filename:
string; position_x: Integer);
private
{ Private declarations }
Image: TImage;
NextWaggon: TWaggon;
ParentWidget: TGroupBox;
public
{ Public declarations }
end;
implementation
constructor TWaggon.Create(main_form: TGroupBox; filename:
string; position_x: Integer);
begin
NextWaggon :=
nil;
ParentWidget := main_form;
Image.Create(ParentWidget);
Image.Picture.LoadFromFile(filename);
Image.Top := 20;
Image.Top := position_x;
end;
end.
Das funktioniert allerdings nicht. Wenn der Konstruktor der waggon-Klasse aufgerufen wird, erhalte ich bei "NextWaggon := nil;" immer eine
exception. Kommentiere ich die Zeile aus, erhalte ich eine
exception in der nächsten Zeile etc.
Was mache ich falsch? Ich durchblicke auch noch nicht ganz, wann man einen Zeiger und wann man ein richtiges Objekt benutzt (in C++ wären die Komponenten in der Klasse TForm1 ja alles Zeiger, hier sind sie es scheinbar nicht... warum?)
Später soll es auch möglich sein, einem Waggon einen Anhänger-Waggon zuzuteilen, dazu will ich dann der Membervariable NextWaggon einfach ein anderes Objekt der Klasse TWaggon zuweisen, muss dazu NextWaggon ein Zeiger sein?
Kann vlt. jemand den obigen Code mal "korrigieren"? Das hilft mir nämlich wahrscheinlich, meine Fragen zu klären...
Vielen Dank
D.
[edit=mkinzler]Code-Tags durch Delphi-Tags ersetzt Mfg, mkinzler[/edit]