Einzelnen Beitrag anzeigen

Donner

Registriert seit: 21. Aug 2009
1 Beiträge
 
#1

Umstieg von C++ zu Delphi - Blicke nicht mehr durch

  Alt 21. Aug 2009, 17:57
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]
  Mit Zitat antworten Zitat