Autor Beitrag
DerNetteNachbar
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mi 19.08.09 14:32 
Hallo Leute,
mein derzeitiges Problem ist:
Ich erstelle eine ganz normale Klasse mit dem Vorfahren TPersistent.
Etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 ttest= class(TPersistent)
  public
//Funktionen und Proceduren
  protected
//Funktionen und Proceduren
  private
//Funktionen und Proceduren
end;

Was mir mit der Assign Methode ermöglich Objekte zu kopieren.
Leider klappt es nicht wenn ich die Assign Methode aufrufe.
Quellcode dazu:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155
Erhaltene Danke: 6

Win XP
Delphi 7.0 Personal
BeitragVerfasst: Mi 19.08.09 14:37 
wird test2 überhaupt initialisiert?
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mi 19.08.09 14:40 
Ja test2 ist mit Werten gefüllt das heisst man kann darauf zugreifen.
Georg08
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155
Erhaltene Danke: 6

Win XP
Delphi 7.0 Personal
BeitragVerfasst: Mi 19.08.09 14:45 
wenn ich deinen code übernehmen will meckert er bei self herum...
kannst du mir mal mehr geben?
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mi 19.08.09 14:52 
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
constructor ttest.Create(Sender: TObject);
begin
//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;

end.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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. :les: :think: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mi 19.08.09 15:52 
Ich denk dafür gibt es diese Methode....
Übrigens was ist die/der/das DOH.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 19.08.09 16:13 
Moin!

user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
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? :nixweiss:

user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
Ü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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 19.08.09 17:18 
Moin!

user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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

ausblenden volle Höhe Delphi-Quelltext
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Do 17.09.09 09:52 
Das ist eben das Problem....ich brauche ein Tip wie es am besten anpacken kann.