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
SolariXX benutze ich die "RiverSoftAVG Charting Component Suite". Wenn ich z.B. nun hineinzoome ist es äußerst schwierig wieder den vorherigen Zustand wiederherzustellen.
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
Assign nicht und MrSpock's Ansatz (
hier) funktioniert irgendwie bei mir auch nicht. Ich glaube jedoch dieser Ansatz ist der erfolgversprechenste.
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:
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;
Was mache ich falsch?
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:
for i:=0 to form1.ComponentCount -1 do
begin
if form1.Components[i] is TEdit then
// do something
end;
Danke im Voraus
Gruß Alexander