Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dumme Frage nebenbei: OnClick zur Runtime zuweisen (https://www.delphipraxis.net/193638-dumme-frage-nebenbei-onclick-zur-runtime-zuweisen.html)

Glados 23. Aug 2017 23:57

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;

DeddyH 24. Aug 2017 06:36

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.

Sherlock 24. Aug 2017 07:31

AW: Dumme Frage nebenbei: OnClick zur Runtime zuweisen
 
Dann noch ergänzend die Frage, inwiefern der Code
Delphi-Quellcode:
procedure begin {* Work *} end;
nötiger ist als
Delphi-Quellcode:
procedure TMyClass.OnClickHandler(Sender:TObject); begin {* Work *} end;
. Das sind wenige Zeichen Overhead, machen den Code insgesamt aber lesbarer und leichter wiederzuverwerten. ;)

Sherlock

Glados 24. Aug 2017 08:34

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.

himitsu 24. Aug 2017 09:46

AW: Dumme Frage nebenbei: OnClick zur Runtime zuweisen
 
Es gibt Prozeduren/Funktionen, Methoden, Klassen-Methoden, anonyme Methoden und verschachtelte/eingebettete Proceduren (Nested).

TNotifyEvent ist als
Delphi-Quellcode:
procedure of object
deklariert und kann somit ausschließlich Verlinkungen zu Methoden oder Klassenmethoden aufnehmen.
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

Der schöne Günther 24. Aug 2017 10:56

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:
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.
die Zeile
Delphi-Quellcode:
someEvent := myObject.handleStuff;
vom Compiler übersetzt wird in
Delphi-Quellcode:
   someEvent :=
      procedure()
      begin
         myObject.handleStuff();
      end;
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 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