Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Ereignisbehandlungsroutinen "fremdaufrufen" (https://www.delphipraxis.net/199230-ereignisbehandlungsroutinen-fremdaufrufen.html)

Delphi-Laie 7. Jan 2019 21:05

Delphi-Version: 5

Ereignisbehandlungsroutinen "fremdaufrufen"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphifreunde!

Wenn man eine Ereignisbehandlungsroutine von einem "fremden" Steuerelement aus aufrufen möchte, wie macht man das dann richtig?

Angehängtes Delphi-2-Minimalprojekt soll mein Anliegen verdeutlichen. Klickt man auf den obersten Button, wird einfach ein Piepton ausgegeben.

Der zweite und auch der dritte Button rufen die Ereignisbehandlungsroutine des ersten Buttons auf, mit jeweils unterschiedlichen Parametern. Mangels Ahnung (wie so meistens) habe ich einfach herumprobiert und festgestellt, daß als Parameter (ohne geht es nicht) sowohl "self" als auch "sender" funktionieren. Nur, was ist "richtiger"? Oder gibt es noch einen besseren Weg?

Danke im voraus und Gruß

Delphi-Laie

Delphi.Narium 7. Jan 2019 21:35

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Literatur dazu:

https://www.thoughtco.com/understand...ndlers-1058223

http://www.delphibasics.co.uk/RTL.asp?Name=Self

https://www.delphi-treff.de/object-p...ethodenzeiger/

Mehr unter:
https://www.google.com/search?q=delp...utf-8&oe=utf-8

Kurz:

Self ist die Klasse selbst, in der man implementiert, also quasi eine Selbstreferenz.

Sender ist der Auslöser des Ereignisses.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender : TObject);
begin
  Self.Caption := Format('Self.Name = %s, Self.Classname = %s, Sender.Classname = %s',[Self.Name,Self.Classname,Sender.Classname]);
end;

haentschman 8. Jan 2019 05:10

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Moin...:P
Zitat:

Oder gibt es noch einen besseren Weg?
...spendiere den Ereignisbehandlungsroutinen einen Aufruf auf deine eigene private procedure. Da kannst du soviel Parameter angeben wie du willst. :zwinker:
Beispiel:
Delphi-Quellcode:
private
  procedure PrintDocument(Document: TDocument; PageCount, PageHeight: Integer);
...
procedure TfoDocuments.btnPrintClick(Sender: TObject);
begin
  PrintDocument(FLastdocument, 0, 1);
end;

jaenicke 8. Jan 2019 05:18

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Und wenn diese eigene Routine dann noch in einer eigenen Unit und Klasse liegt und diese das Formular nicht kennt, dann ist auch eine gewisse Trennung von GUI und Logik gleich mit umgesetzt.

haentschman 8. Jan 2019 05:32

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Zitat:

dann ist auch eine gewisse Trennung von GUI und Logik gleich mit umgesetzt.
...nicht überfordern. :wink: Das haben selbst gestandene Programmierer noch nicht verinnerlicht...:roll:

freimatz 8. Jan 2019 06:51

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
gestandene? Dann krabbeln die noch! SCNR

hoika 8. Jan 2019 09:25

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Hallo,
Zitat:

und diese das Formular nicht kennt
Wie greife ich denn dann auf Edit1.Text zu ? ;)

Schokohase 8. Jan 2019 09:28

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Zitat:

Zitat von hoika (Beitrag 1422844)
Hallo,
Zitat:

und diese das Formular nicht kennt
Wie greife ich denn dann auf Edit1.Text zu ? ;)

Das ist eben der Trick: Gar nicht, denn die Logik hat nichts, aber auch rein gar nichts mit der Präsentation/Darstellung zu tun.

hoika 8. Jan 2019 09:33

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Hallo,
den Smiley nicht gesehen? ;)

p80286 8. Jan 2019 10:35

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Hat er, aber für die Begriffsstutzigen dann nochmal Klartext.

Gruß
K-H

Delphi-Laie 8. Jan 2019 13:46

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Liebe Leute, vielen Dank für Eure rege Teilnahme!

Mal schauen, was sich daraus machen läßt. Oder ich nehme doch eine zentrale Prozedur, die von allen Ereignisbehandlunsroutinen aus aufrufbar ist.

Delphi-Laie 8. Jan 2019 22:55

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Update: Es geht auch einfacher, wie mir just erst wieder einfiel: Einfach die Ereignisbehandlungsroutine des ersten Buttons ("Button1Click") den OnClick-Ereignissen der anderen Buttons zuweisen. Das ist im Objektinspektor einfach durch Eintragen, sicher aber auch etwas umständlicher im Quelltext möglich.

Das Thema hat sich hiermit erledigt.

Luckie 9. Jan 2019 06:11

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Aber schön ist anders und schlechter Stil zu dem.

hoika 9. Jan 2019 07:10

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Hallo,

Luckie: nicht, wenn man der Button1Click-Methode einen sinnvolleren Namen gibt.

Delphi-Laie: Wenn du ein halbes Jahr später einen Breakpoint auf deine Button1Click-Methode setzt,
und dich dann wunderst, wieso sie auch beim Klick auf den Button4 ausgelöst wird -> Denk an diesen Thread ;)

BTW: Warum heisst der Button eigentlich Button1 und nicht <Ironie>ButtonMaxUndMoritz</Ironie>?

freimatz 9. Jan 2019 11:26

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Zitat:

Zitat von hoika (Beitrag 1422917)
BTW: Warum heisst der Button eigentlich Button1 ...

Die Antwort ist einfach: weil Delphi ihn so genannt hat :P

hoika 9. Jan 2019 11:56

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
Hallo,
das ist nicht wie bei "Mutti wollte, dass ich so heiße" ;)

DeddyH 9. Jan 2019 21:51

AW: Ereignisbehandlungsroutinen "fremdaufrufen"
 
[OT] Der heißt Button1, weil damit dem Label23 der Text aus Edit42 zugewiesen wird. [/OT]


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