AGB  ·  Datenschutz  ·  Impressum  







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

Assign auf Vorfahr-Komponente

Ein Thema von berens · begonnen am 15. Jun 2009 · letzter Beitrag vom 18. Jun 2009
 
berens

Registriert seit: 3. Sep 2004
441 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Assign auf Vorfahr-Komponente

  Alt 15. Jun 2009, 22:44
Das Problem liegt nicht in TMeineKlasse3.Assign, sondern bei TMeineKlasse1.Assign

Beispiel:
Delphi-Quellcode:
procedure TMeineKlasse1.Assign(Source: TPersistent);
var
begin
  if Source.inheritsfrom(TComponent) then begin
    inherited; // <-- klappt nicht, weil Source von der Klasse TMeineKlasse 3 ist *
// inherited Assign(TComponent(Source)); // klappt auch nicht
  end;

  if Source.inheritsfrom(TMeineKlasse1) then begin
    Self.X := TMeineKlasse1(Source).X;
    Self.Y := TMeineKlasse1(Source).Y;
  end;
end;
* dessen Unit wiederum NICHT in USES der Unit von TMeineKlasse1 stehen soll.

Fehlermeldung: "TMeineKlasse3 kann nicht zu TMeineKlasse1 zugewiesen werden."



Konkretes Beispiel:
Delphi-Quellcode:
var
  Klasse1: TMeineKlasse1;
  Klasse3: TMeineKlasse3;
begin
  Klasse1 := TMeineKlasse1.Create;

  Klasse3 := TMeineKlasse3.Create;
  Klasse3.X := 10;
  Klasse3.Y := 20;
  Klasse3.Z := 30;
  Klasse3.Text := 'Hallo!';

  // Klasse1.X und Y sind nach wie vor 0

  Klasse1.Assign(Klasse3);
  ^-- Exception

  ShowMessage(IntToStr(Klasse1.X));
  // Meine Erwartung als korrekte Ausgabe: "10"


Als einzigen Lösungsansatz sehe ich im Moment, die Eigenschaften der TComponent Klasse zu ignorieren. Also kein Inherited aufrufen sondern nur eine leere TMeineKlasse1 neu zu erstellen und die Variablen einfach rüberzukopieren. Da ich keine Werte von TComponent benutze (hoffe/denke ich mal) ist das hier jetzt nicht so tragisch, aber mir geht's hier erstmal um's Prinzip wie es geht, einer Vorfahrenklasse eine Varible seines eigenen Nachfolgers zuzuweisen.

Danke schonmal.
  Mit Zitat antworten Zitat
 


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 18:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz