![]() |
Re: Suchen einer Methode
Zitat:
Delphi-Quellcode:
dann klappts auch ;)
x.Data=Form1
Gruß Frank |
Re: Suchen einer Methode
Hallo,
ich bekomme das irgendwie nicht hin. Kann mir jemad mal die Komplette Unit posten? MFG Christian18 |
Re: Suchen einer Methode
bei mir funktioniert es so:
Delphi-Quellcode:
Gruß Frank
type
TMeine = procedure (Sender: TObject) of object; ... procedure TForm1.Sieben(Sender: TObject); begin Panel1.Visible:=False; Panel2.Visible:=False; end; procedure TForm1.Button1Click(Sender: TObject); var x: TMethod; y: TMeine; begin x.Data:=Form1; x.Code:=TForm1.MethodAddress('Sieben'); y:=TMeine(x); y(Sender); end; |
Re: Suchen einer Methode
Delphi-Quellcode:
x.Data := TForm1; // Falsch
x.Data := Form1; // Schlecht: wer sagt denn dass die aktuelle Instanz in der Variablen "Form1" gespeichert ist x.Data := self; // Richtig !! |
Re: Suchen einer Methode
wenn man das so betrachtet müsste es auch
Delphi-Quellcode:
heisen...wer sagt denn, dass die aktuelle Formular-Klasse TForm1 heist :D
x.Code:=self.MethodAddress('Sieben');
Gruß Frank |
Re: Suchen einer Methode
Zitat:
Also in .Data wird der versteckte self-Pointer (32 Bit) transportiert. Also ist es wichtig, dass dieser auf das richtige Objekt zeigt. In .Code wird die (32 Bit) Adresse des Programmcodes übermittelt. MethodAddress() ist eine Klassenmethode; d.h. es gibt 2 mögliche Aufrufarten: A.) objekt.KlassenMethode() oder B.) Klasse.KlassenMethode(). Die Variante B.) ist schneller und auch sicherer. Variante A.) ist indirekt und ergibt eine Zugriffsverletzung, falls "objekt" = nil sein sollte. Deshalb ist es empfehlenswert, Klassenmethoden über die Variante B.) aufzurufen. Als Programmierer zeigt man dem Leser, dass eine Klassenmethode aufgerufen wird und verbessert so die Klarheit des Sourcecode. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 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