![]() |
Dumme Frage nebenbei: OnClick zur Runtime zuweisen
Ich erstelle zur Runtime ein Label und weise dem ein OnClick-Event zu. Kennt jeder, machen viele.
Gibt es aber eine Möglichkeit unnötigen Code zu vermeiden und sowas wie IN ETWA das hier zu schreiben?
Delphi-Quellcode:
xLabel.OnClick := procedure begin {* Work *} end;
|
AW: Dumme Frage nebenbei: OnClick zur Runtime zuweisen
Ein Event gehört zu einer Klasse, was Du aber möchtest, ist eine anonyme Methode. Das wird so nicht gehen, fürchte ich. Du kannst aber unnötigen Code vermeiden, indem Du für gleiche Logik einen einheitlichen Handler schreibst und in diesem dann den Sender auswertest, wenn Du wissen musst, wer das Event denn ausgelöst hat.
|
AW: Dumme Frage nebenbei: OnClick zur Runtime zuweisen
Dann noch ergänzend die Frage, inwiefern der Code
Delphi-Quellcode:
nötiger ist als
procedure begin {* Work *} end;
Delphi-Quellcode:
. Das sind wenige Zeichen Overhead, machen den Code insgesamt aber lesbarer und leichter wiederzuverwerten. ;)
procedure TMyClass.OnClickHandler(Sender:TObject); begin {* Work *} end;
Sherlock |
AW: Dumme Frage nebenbei: OnClick zur Runtime zuweisen
Was ich sagen wollte:
ich habe Code immer gebündelt an einer Stelle und nicht an 100 Stellen verteilt. Daher käme so eine anonyme Methode ganz recht. Da es das aber nicht gibt in diesem Fall, hat sich das ja erledigt. |
AW: Dumme Frage nebenbei: OnClick zur Runtime zuweisen
Es gibt Prozeduren/Funktionen, Methoden, Klassen-Methoden, anonyme Methoden und
![]() TNotifyEvent ist als
Delphi-Quellcode:
deklariert und kann somit ausschließlich Verlinkungen zu Methoden oder Klassenmethoden aufnehmen.
procedure of object
Der OI kann auch nur mit dieser Art umgehen. (liegt vorallem daran, dass er auch die zu verlinkenden Methoden "irgendwie" fuinden muß und suchen tut er einfach in der Rootkomponente, was meistens die TForm ist) procedure() = nur Prozeduren procedure() of object = nur Methoden reference to procedure() = alles |
AW: Dumme Frage nebenbei: OnClick zur Runtime zuweisen
Die tiefe Compiler-Magic ist nicht so mein Ding, aber man sollte vielleicht erwähnen dass im Fall von z.B.
Delphi-Quellcode:
die Zeile
uses
System.SysUtils; type TMyObject = class procedure handleStuff(); end; procedure TMyObject.handleStuff(); begin // end; var myObject: TMyObject; someEvent: TProc; // TProc = "reference to procedure()" begin myObject := TMyObject.Create(); someEvent := myObject.handleStuff; end.
Delphi-Quellcode:
vom Compiler übersetzt wird in
someEvent := myObject.handleStuff;
Delphi-Quellcode:
Das kann wichtig werden wenn man z.B. Variablen vom Typ "reference to procedure()" oder ähnlich miteinander vergleichen will - So "inline" geschrieben ist zwar komfortabel, aber eine Gleichheitsprüfung würde immer fehlschlagen.
someEvent :=
procedure() begin myObject.handleStuff(); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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