Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 Uhr.
Seite 1 von 2  1 2      

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