![]() |
Verknüpfung von 2 Procedures
Hallo,
ich habe zwei Procedures miteinander verknüpft aber meine IDE zeigt da einen Fehler...Könnte mir jemand helfen? LG und danke im Voraus
Delphi-Quellcode:
procedure TForm2.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if key=VK_Space then OnTimer; end; procedure TForm2.OnTimer(Sender: TObject); begin inc(y); ShpBall.Top:= y; end; |
AW: Verknüpfung von 2 Procedures
Die Glaskugel sagt:
Delphi-Quellcode:
:glaskugel:
procedure TForm2.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if key=VK_Space then OnTimer(nil); end; |
AW: Verknüpfung von 2 Procedures
Sherlock |
AW: Verknüpfung von 2 Procedures
Jeder hat doch mal angefangen.
Der Aufruf einer Prozedur verlangt u.U. die Übergabe von Werten als Parameter. Was diese dann bewirken muss man (z.B. in der Hilfe) nachlesen oder ggf. im Quelltext nachsehen. Bei den Ereignisbehandlungen wird der Parameter "Sender" standardmäßig nicht verwendet. Es ist also egal, was dort übergeben wird. Nil ist also völlig ok. Man kann z.B. in der Methode unterscheiden, ob "Sender = Button1" oder "Sender = Button2" ist, und danach unterschiedliche Ereignisbehandlungen durchführen. Wenn man so etwas nicht durchführt, ist egal, was in Sender steht. |
AW: Verknüpfung von 2 Procedures
verschiedene Varianten, um Button1Click auszuführen
Delphi-Quellcode:
Bei einem anderen Sender kann man in Button1Click über
{ die Kurzfassung für TButton.Click, als Beispiel was es macht.
Viele Events haben so eine Methode, wo sie ausgeführt werden. z.B. für OnXYZ heißen die oft XYZ oder DoXYZ procedure TControl.Click; begin if Assigned(OnClick) then OnClick(Self); end;} type TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Button1Click(nil); Button1Click(Self); // Sender = TForm1 Button1Click(Sender); // Sender = Timer1 Button1Click(Timer1); // es geht auch manuell Button1Click(Button1); Button1Click(Button2); // es geht auch alles Andere (vor allem wenn ein Event für mehrere Komponenten/Eventzeiger) Button1.OnClick(nil); Button1.OnClick(Sender); Button1.OnClick(Button1); ... Button1.Click; // ruft das auf, was an OnClick hängt end;
Delphi-Quellcode:
entscheiden von wem das aufgerufen wurde.
if Sender = ...
nil = aus dem Code, nicht von einer Komponente unserem Sender aka Timer1 = aus dem Event von Timer1 Bei Timer1.OnTimer nicht Timer1Timer sondern direkt Button1Click zugewiesen/angehängt, ist das Gleiche wie wie
Delphi-Quellcode:
bzw.
Button1Click(Sender);
Delphi-Quellcode:
.
Button1Click(Timer1);
Oder wie wäre es mit komplett auftrennen?
Delphi-Quellcode:
procedure TForm2.ShpBallDown; // als private Methode in TForm2
begin inc(y); ShpBall.Top := y; end; procedure TForm2.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key = VK_Space then ShpBallDown; end; procedure TForm2.OnTimer(Sender: TObject); begin ShpBallDown; end; |
AW: Verknüpfung von 2 Procedures
Himis Beispiel ist super, weil man dann direkt sieht, was da eigentlich ausgeführt wird. Direkt in den Ereignisbehandlungen sollte man nach Möglichkeit keine komplexeren Berechnungen bzw. Programmlogik schreiben.
Das verbessert die Lesbarkeit und Wartbarkeit des Codes. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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 by Thomas Breitkreuz