AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ereignisbehandlungsroutine auslesen, speichern, zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

Ereignisbehandlungsroutine auslesen, speichern, zuweisen

Ein Thema von changlee · begonnen am 8. Okt 2009 · letzter Beitrag vom 10. Okt 2009
Antwort Antwort
changlee
(Gast)

n/a Beiträge
 
#1

Ereignisbehandlungsroutine auslesen, speichern, zuweisen

  Alt 8. Okt 2009, 18:03
Hallo,

ich habe mal eine ganz grundsätzliche Frage:

Kann man den Methodenzeiger, den man einem Ereignis (z.B. OnClick) zugewiesen hat, auslesen und speichern, bis man ihn später, unter Umständen auch nach Programmneustart, wieder zuweisen kann?

Zum Hintergrund: ich möchte eine vollständige Kopie eines Objekts erstellen. Da sollen auch die Ereignisbehandlungsroutinen mit eingebunden werden. Dieses Kopieren erreiche ich, indem ich jedes einzele Feld des Objekts in einem Stream speichere. Anschließend lade ich jeden einzelnen Wert aus dem Stream und weise ihn der Objektkopie zu.

Das hat eigentlich den Vorteil, dass ich so auch ganz einfach das Objekt auf der Fesplatte speichern kann, wenn ich statt MemoryStream einen FileStream übergebe. Nach einem Neustart kann ich dann - erneut über einen FileStream - alles wieder laden.
Bei den Methodenzeigern funktioniert das allerdings nicht.

Im Folgenden ein kleines Beispiel mit einem integer Wert (hier weiß ich wie es geht) und einem Methodenzeiger (hierbei weiß ich es nicht):

Delphi-Quellcode:

type
  TMyClass = class;

  TMyClassEvent = procedure(Sender: TMyClass) of Object;
 
  TMyClass = class(TObject)
    private
      fEnabled: boolean;
      fOnClick: TMyClassEvent;
    public
    end;

procedure TMyClass.SaveToStream(var stream: TStream);
begin
  Stream.Write(MyClass.fEnabled, sizeOf(MyClass.fEnabled));
  Stream.Write(MyClass.fOnClick, sizeOf(MyClass.fOnClick)); // das geht so nichtmal durch den Compiler
end;

procedure TMyClass.LoadFromStream(Stream:TStream);
begin
  Stream.Read(MyClass.fEnabled, sizeOf(MyClass.fEnabled));
  Stream.Read(MyClass.fOnClick, sizeOf(MyClass.fOnClick)); // das geht so nichtmal durch den Compiler
end;

procedure TMyClass.CopyFrom(MyClassSrc: TMyClass);
var stream : TStream;
begin
  stream := TMemoryStream.Create;
  try
    MyClassSrc.SaveToStream(stream);
    stream.Position:=0;
    self.LoadFromStream(stream);
  finally
    stream.Free;
  end;
end;
Kann mir jemand weiterhelfen?

Viele Grüße,
Stefan.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Ereignisbehandlungsroutine auslesen, speichern, zuweisen

  Alt 8. Okt 2009, 21:07
Also ich weiß ja nicht, was die echten Experten hier im Forum dazu meinen... Aber imho geht so etwas nicht...

Du willst ja quasi speichern, auf welche Methode (einer anderen Klasse) der Methodenzeiger verweist...

Mal angenommen der Methodenzeiger ist tatsächlich nur eine Speicheradresse (ka, obs stimmt ), dann müsste diese Adresse ja nach einem Programmneustart wieder die gleiche sein, damit der Methodenzeiger noch richtig steht...

Aber mir erschließt sich auch nicht so wirklich, wofür man so etwas brauchen könnte.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#3

Re: Ereignisbehandlungsroutine auslesen, speichern, zuweisen

  Alt 10. Okt 2009, 13:50
Na gut. Es scheint wohl wirklich nicht möglich zu sein.
Ich werde es jetzt bei meiner manuellen Zuweisung belassen müssen.

Viele Grüße,
Stefan.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz