AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse im Array speichern -> Fehlermeldung

Ein Thema von hotkey · begonnen am 6. Feb 2012 · letzter Beitrag vom 8. Feb 2012
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

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

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz