![]() |
Objekt incl. untergeordnete objecte
Huhu,
ich frage mal anders. Ich möchte zur laufzeit ein Objekt mit all seinen untergeordneten kopieren. Wie geht das??? Und wie greife ich danach auf diese kopierten objekte zu? Danke im voraus..... |
Re: Objekt incl. untergeordnete objecte
Kurz und knapp: von TPersistent ableiten und Assign/AssignTo überschreiben.
|
Re: Objekt incl. untergeordnete objecte
Zitat:
sowas habe ich auch schon gelesen. Aber nirgends ein brauchbare beispiel gefunden. So ein 3zeiler mit einem unterobjekt würde mir waaahnsinnig helfen, wenn einer so nett wäre. Danke |
Re: Objekt incl. untergeordnete objecte
Mal eben heruntergetippt, keine Garantie auf Fehlerfreiheit ;)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type //simuliertes Unterobjekt TDummyData = class private FString: string; FInteger: integer; public property StringVal: string read FString write FString; property IntVal: integer read FInteger write FInteger; end; //Klasse mit Kopierfunktion TBaseDummy = class(TPersistent) private FDummy: TDummyData; public constructor Create; destructor Destroy; override; //Überschreiben von AssignTo procedure AssignTo(Dest: TPersistent); override; property Dummy: TDummyData read FDummy; end; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Image1: TImage; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } FTest1, FTest2: TBaseDummy; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TBaseDummy } procedure TBaseDummy.AssignTo(Dest: TPersistent); begin //wenn Dest ein TBaseDummy ist, Werte kopieren if Assigned(Dest) and (Dest is TBaseDummy) then begin TBaseDummy(Dest).Dummy.StringVal := FDummy.StringVal; TBaseDummy(Dest).Dummy.IntVal := FDummy.IntVal; end else inherited AssignTo(Dest); end; constructor TBaseDummy.Create; begin inherited; FDummy := TDummyData.Create; end; destructor TBaseDummy.Destroy; begin FDummy.Free; inherited; end; procedure TForm1.Button1Click(Sender: TObject); begin //aktuelle Werte des 2. Objektes anzeigen ShowMessage(Format('%s: %d',[FTest2.Dummy.StringVal,FTest2.Dummy.IntVal])); end; procedure TForm1.Button2Click(Sender: TObject); begin //Werte kopieren FTest2.Assign(FTest1); end; procedure TForm1.FormCreate(Sender: TObject); begin FTest1 := TBaseDummy.Create; FTest1.Dummy.StringVal := 'Erster String'; FTest1.Dummy.IntVal := 1; FTest2 := TBaseDummy.Create; FTest2.Dummy.StringVal := 'Zweiter String'; FTest2.Dummy.IntVal := 2; end; procedure TForm1.FormDestroy(Sender: TObject); begin FTest1.Free; FTest2.Free; end; end. |
Re: Objekt incl. untergeordnete objecte
Zitat:
Vielen vielen dank für deine hilfe. Ich finde so ein beispiel sagt immer mehr aus, als 20 antworten. Nochmal, danke... ich mach mir mal ein testprg. Rückmeldung kommt.... |
Re: Objekt incl. untergeordnete objecte
Liste der Anhänge anzeigen (Anzahl: 1)
So,
das mit deinem kopieren klappt. Aber was ich im moment nicht verstehe ist, wie ich eine fertige groupbox kopiere. Ich habe es dir mal als project angehängt, um zu veranschaulichen was ich meine. Die GroupBox1 ist nicht Visible. Und die möchte ich incl. inhalt kopieren, und die kopie würde dann einfach Visible gemacht. Wie ich dann auf die inhalte der Edits zugreife, habe ich anhand deines beispiels verstanden. Blos leider nicht wie ich die Objekte die mit der IDE gemacht wurden kopiere. Halt so das alles erhalten bleibt. Positionen, Fontfarbe usw... Danke schomal im voraus.... PS.: Dein beispiel ist fehlerfrei :thumb: |
Re: Objekt incl. untergeordnete objecte
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei ein kleines Beispiel. Je nach Anspruch muss die AssignTo-Methode dann noch ausgebaut werden.
|
Re: Objekt incl. untergeordnete objecte
Danke, damit komm ich nun klar. Nun kann ich es an meine bedürfnisse anpassen, bzw. begreifen.
Vielen vielen dank nochmal...... |
Re: Objekt incl. untergeordnete objecte
Kannst du auch mit RTTI machen, ganz generisch:
Delphi-Quellcode:
procedure assign(Source: TPersistent);
... case Proptype of tkInt: SetIntProp(self, Propname, GetIntProp(source, propname)); tkClass: TPersistent(GetObjectProp(self, Propname)).Assign(GetObjectProp(source, PropName)); .... end; //case .... end; //assign |
Re: Objekt incl. untergeordnete objecte
Hmmm, eine "dumme" frage hätte ich da noch. Wie komme ich bei der kopie an den inhalt der EditObjekte? Ich dachte mit Grp2.Edit1.Text. Aber so geht es leider nicht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 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