Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Klasse im Array speichern -> Fehlermeldung

  Alt 6. Feb 2012, 10:17
Und generell bringt dir das mit dem Array auch nicht viel, ausser, dass du die Instanzen dort speichern kannst.

Doch bei jedem Zugriff musst du immer erst den Typ ermitteln, um mit der Instanz etwas anstellen zu können.
Das ist nicht so wirklich OOP

Aber darauf haben wir ja schon mehrmals hingewiesen, allerdings sehe ich in deinen Klassendefinitionen niemals eine Veränderung.

Hier nochmal ein letzter Versuch:
Delphi-Quellcode:
type
  //
  Tgeo_objects = class
    // Jede Ableitung muss diese procedure überschreiben (override)
    procedure Zeichne( aCanvas : TCanvas ); virtual; abstract;
  end;

  Tgeo_objects_array = array of Tgeo_objects;

  TPunkt = class( Tgeo_objects )
    x, y : integer;
    // Zeichnen eines Punkts
    procedure Zeichne( aCanvas : TCanvas ); override;
  end;

  TLinie = class( Tgeo_objects )
    p1, p2 : TPunkt;
    // Zeichnen einer Linie
    procedure Zeichne( aCanvas : TCanvas ); override;
  end;

  TRechteck = class( Tgeo_objects )
    p1, p2 : TPunkt;
    // Zeichnen eines Rechtecks
    procedure Zeichne( aCanvas : TCanvas ); override;
  end;

implementation

procedure TPunkt.Zeichne( aCanvas : TCanvas );
begin
  // Hier jetzt auf den übergebenen Canvas (aCanvas) malen
end;

procedure TLinie.Zeichne( aCanvas : TCanvas );
begin
  // Hier jetzt auf den übergebenen Canvas (aCanvas) malen
end;

procedure TRechteck.Zeichne( aCanvas : TCanvas );
begin
  // Hier jetzt auf den übergebenen Canvas (aCanvas) malen
end;
Der Gewinn hierbei ist:
Delphi-Quellcode:
procedure TForm1.BtnZeichneArray( Sender : TObject );
var
  idx : integer;
begin
  // Jedes Element im Array wird nun gezeichnet und zwar auf
  // dem Canvas der aktuellen Form-Instanz (Self.Canvas oder einfach Canvas)
  for idx := Low( GeoArray ) to High( GeoArray ) do
    GeoArray[ idx ].Zeichne( {Self.}Canvas );
end;
Abhängig von der Instanz im Array, wird so automatisch immer die zugehörige Methode Zeichne aufgerufen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 6. Feb 2012 um 10:20 Uhr)
  Mit Zitat antworten Zitat