wenn du init aufrufst hast du zwar einen constructor, trotzdem solltest du in dem INIT das "Inherited Create" aufrufen. Zu dem finde ich es schrecklich das du nicht CREATE und DESTROY als Constructor und Destructor nimmst sondern irgendwelche anderen Namen, da braucht man viel länger um sich reinzufinden. Außerdem solltest du mal die einrückungen beachten. Außerdem solltest du auch mal Private, Public etc. nutzen!!!!!!!!!!! Außerdem gruselig ist dsa du deine Variable "TNeueFolie" nennst. Das T wird für Typdeclarationen verwendet und sollte nicht am Anfang von Namen stehen! Am besten du schaust dir mal die Richtlinien für Sourceformatierung etc. an.
Dein source mal bissl übersichtlicher (mit den sch*** Bezeichnungen)
Delphi-Quellcode:
type
TFolie =
class
private
Art: SmallInt;
Titel:
String;
ZeichenF: TImage;
public
constructor INIT;
virtual;
abstract;
procedure ZeichneDich;
virtual;
abstract;
destructor GIBFREI;
virtual;
abstract;
end;
TSchwarzFolie =
class(TFolie)
public
constructor INIT;
override;
procedure ZeichneDich;
override;
destructor GIBFREI;
override;
end;
constructor TSchwarzFolie.INIT;
begin
// hier sollte doch wenigstens "inherited Create;" hinn
end;
procedure TSchwarzFolie.ZeichneDich;
var Recta: TRect;
begin
ZeichenF.Canvas.brush.Color := clblack;
Recta.Left := 0;
Recta.top := 0;
Recta.Bottom := Zeichenf.Height;
Recta.Right := Zeichenf.Width;
ZeichenF.Canvas.FillRect(Recta);
end;
destructor TSchwarzFolie.GIBFREI;
begin
inherited Destroy;
end;
{********************************************}
procedure TPresentation.Foliedazu(ArtdF: Integer; Beschr:
String);
var TNeueFolie: TFolie;
//Der Name "NeueFolie" wäre besser geeignet!
begin
case ArtdF
of
1:
begin
TNeueFolie := TSchwarzFolie.INIT;
end;
{...}
end;
TNeueFolie.Art := ArtdF;
TNeueFolie.Titel := Beschr;
TNeueFolie.ZeichenF := mZF;
Liste.Add(TNeueFolie);
// <-Hier gehts in die Liste
AnzahlFolien := Liste.Count;
end;
procedure TPresentation.ZeichneFolie;
var Folie: TFolie;
begin
if Index <> - 1
then
begin
Folie := Liste.Items[
Index];
Folie.ZeichneDich;
// <- Hier ist der AV-Fehler...
end;
end;