Autor |
Beitrag |
DerNetteNachbar
      
Beiträge: 224
|
Verfasst: Mi 19.08.09 14:32
Hallo Leute,
mein derzeitiges Problem ist:
Ich erstelle eine ganz normale Klasse mit dem Vorfahren TPersistent.
Etwa so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| ttest= class(TPersistent) public protected private end; |
Was mir mit der Assign Methode ermöglich Objekte zu kopieren.
Leider klappt es nicht wenn ich die Assign Methode aufrufe.
Quellcode dazu:
Delphi-Quelltext 1: 2: 3: 4:
| var test1, test2: TTest;
test1:= ttest.create(self); test1.Assign(test2); |
Gemeldet wird:
ttest kann nicht zu ttest zugewiesen werden.
Wie kann man dies umgehen?
|
|
Georg08
      
Beiträge: 155
Erhaltene Danke: 6
Win XP
Delphi 7.0 Personal
|
Verfasst: Mi 19.08.09 14:37
wird test2 überhaupt initialisiert?
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Mi 19.08.09 14:40
Ja test2 ist mit Werten gefüllt das heisst man kann darauf zugreifen.
|
|
Georg08
      
Beiträge: 155
Erhaltene Danke: 6
Win XP
Delphi 7.0 Personal
|
Verfasst: Mi 19.08.09 14:45
wenn ich deinen code übernehmen will meckert er bei self herum...
kannst du mir mal mehr geben?
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Mi 19.08.09 14:52
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type ttest = class(TPersistent) public
protected
private test: Integer; constructor Create(Sender: TObject); end;
TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} constructor ttest.Create(Sender: TObject); begin end;
procedure TForm1.Button1Click(Sender: TObject); var test, test1: ttest; begin test := ttest.create(self); test.test := 1; test1 := ttest.create(self);
ShowMessage(IntToStr(test.test));
test1.Assign(test); ShowMessage(IntToStr(test1.test)); end;
end. |
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 19.08.09 15:26
Moin!
Du musst die Methode .Assign() (oder .AssignTo(), je nach dem) überschreiben und für selbst eingeführte Properties auch selbst das Kopieren organisieren. Ich empfehle dazu mal drigend die DOH.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Mi 19.08.09 15:52
Ich denk dafür gibt es diese Methode....
Übrigens was ist die/der/das DOH.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 19.08.09 16:13
Moin!
DerNetteNachbar hat folgendes geschrieben : | Ich denk dafür gibt es diese Methode.... |
Ja, diese Methode ist für solche Aktivitäten vorgesehen. Da du von/zu beliebigen Klassen zuweisen kannst: woher soll die Basisklasse wissen, wie man sowas machen sollte?
DerNetteNachbar hat folgendes geschrieben : | Übrigens was ist die/der/das DOH. |
(D)elphi (O)nline (H)ilfe
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Mi 19.08.09 17:11
@Narses.
Kannst du mir vielleicht ein Beispiel dafür geben.
Ist mir noch nicht alles so sehr geheuer. 
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 19.08.09 17:18
Moin!
DerNetteNachbar hat folgendes geschrieben : | Kannst du mir vielleicht ein Beispiel dafür geben. | www.delphi-forum.de/....php?p=554259#554259
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Fr 21.08.09 16:58
Hey Narses:
sorry aber irgentwie ist mir das immer noch nicht so geläufig
Kannst du es bitte anhand meiner Klasse es zeigen. Wäre echt sehr nett.
MfG
Nachbar
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Fr 21.08.09 17:43
Den Link hast du dir angesehen?
Da ist doch ein Beispiel drin, wie das geht - das musst du nur noch auf deine Klasse umschreiben. Da du dafür nur alle Felder kopieren musst, wirst du dies doch wohl hinkriegen.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 21.08.09 19:10
Hier, damit du mal was lauffähiges bekommst. Aber dazu ein paar Anmerkungen:
- Du überschreibst Create damit du Sender hast. Warum leitest du dann nicht gleich von TComponent ab?
- Du hats test private deklariert - so kannst du aber eigentlich nicht darauf zugreifen. Das geht nur hier weil es in der selben Unit ist. Besser wäre es, eine Eigenschaft (property) zu definieren die dann Public oder Puplished ist.
- Einen Konstruktor zu überschreiben und dann inherited weglassen ist glaub ich keine so gute Idee
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| type ttest = class(TPersistent) public
protected
private test: Integer; procedure Assign(Source: TPersistent); override; constructor Create(Sender: TObject); end;
constructor ttest.Create(Sender: TObject); begin inherited Create; end;
procedure ttest.Assign(Source: TPersistent); begin if (source is tTest) then begin self.test := (source as tTest).test; end else inherited; end;
procedure TForm1.Button1Click(Sender: TObject); var test, test1: ttest; begin test := ttest.create(self); test.test := 1; test1 := ttest.create(self);
ShowMessage(IntToStr(test.test));
test1.Assign(test); ShowMessage(IntToStr(test1.test)); end; |
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Do 17.09.09 09:52
Das ist eben das Problem....ich brauche ein Tip wie es am besten anpacken kann.
|
|