![]() |
Klasse komplett dublizieren
Hallo,
ich weis, ich weis. Das Thema hatten wir schon sehr oft. Ich habe allerdings keine Lösung gefunden die ganz allgemein und für jede Klasse gilt. Es habe nämlich folgendes Problem: In meinem Programm ![]() Deshalb wäre eine imho elegante Lösung die Klasse temporär zu kopieren und im gegebenen Fall einfach zurück zu kopieren. Doch leider funktioniert ![]() ![]() Deshalb habe ich mir mal ein TestProjekt schnell mal angelegt und irgendwie passiert gar nix. Also Eine Form mit einem Edit was Temporär kopiert und wiederhergestellt werden soll.
Delphi-Quellcode:
Was mache ich falsch?
var
Form1: TForm1; ed:Tedit; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Move(Pointer(self.Edit1)^, Pointer(ed)^, sizeof(self.Edit1)); end; procedure TForm1.Button2Click(Sender: TObject); begin Move(Pointer(ed)^, Pointer(self.Edit1)^, sizeof(ed)); end; procedure TForm1.FormCreate(Sender: TObject); begin ed:=Tedit.Create(self); end; procedure TForm1.FormDestroy(Sender: TObject); begin ed.Free; end; Wieso muss man eigentlich das so schriben: Pointer(ed)^ Was bewirkt das? Gibt es vielleicht einen einacheren Weg? Kann man vielleicht die Felder und Propertys einer Klasse ganz allgemein durchlaufen? Also so was für Felder anstadt Objekten:
Delphi-Quellcode:
Danke im Voraus
for i:=0 to form1.ComponentCount -1 do
begin if form1.Components[i] is TEdit then // do something end; Gruß Alexander |
Re: Klasse komplett dublizieren
1.) wenn du versuchst, ein Objekt mit Move() zu kopieren, wirst du in der :twisted: Hölle :twisted: braten, denn das geht garantiert schief! Objekte werden mehrfach freigeben und es hagelt AVs.
2.) wenn du den Sourcode hast, dann solltest du die Assign-Methode verbessern 3.) wenn du keinen Sourcecode hast, dann schreibst du dir eine Kopierfunktion:
Delphi-Quellcode:
procedure CopyChart(source, dest : TChart);
begin // fiktives Beispiel dest.zoomfactor := source.zoomfactor; dest.height : source.height; dest.Font.Assign(source.Font); // so wird ein enthaltenes Objekt kopiert .... // es ist mühsam jedes Property runterzuschreiben, aber auf jeden Fall sicher // du willst vielleicht nicht alle properties kopieren, // deshalb würde ein automatisches Kopieren alle Props nicht sinnvoll sein end |
Re: Klasse komplett dublizieren
Zitat:
Ich komme dann wohl nicht um die Kopierfunktion herum. Das ist zwar alles andere als: Zitat:
Wieso hat Borland denn eigentlich so eine wichtige Sache nicht eingebaut? Wieso geht das nicht?! |
Re: Klasse komplett dublizieren
Nenn mir mal eine Sprache, in der du jede beliebige Klasse kopieren kannst.
|
Re: Klasse komplett dublizieren
imho alle .net sprachen
|
Re: Klasse komplett dublizieren
Du kannst ein Objekt in .net auch nur dann clonen, wenn es IClonable implementiert oder serialisierbar ([Serializable]) ist. Das is auch nicht überall...
|
Re: Klasse komplett dublizieren
Der Fehler liegt IMHO hier:
Zitat:
Zitat:
Zitat:
Zitat:
mfg Christian |
Re: Klasse komplett dublizieren
Hi,
Sprachen die Reflections unterstützen machen es einem zumindest um einiges leichter. An sich kann man hier natürlich irgendeine Sprache wählen, die man gerade selbst entwickelt, die das kann oder halt etwas wie C (zeig mir das C-Objekt, dass sich nicht clonen lässt). Ob man Klassen clonen kann oder nicht wäre jetzt wohl Ansichtssache, bei den Objekten geht es auf jeden Fall in den weitverbreiteten Sprachen nicht. Dürfte aber schon daran liegen, dass sonst die Schutzklassen sinnlos wären... Gruß Der Unwissende |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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