Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem TList mit Ober/Unterklassen

  Alt 17. Aug 2004, 16:11
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat