AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verknüpfung von 2 Procedures

Ein Thema von Royal Ranger · begonnen am 28. Apr 2020 · letzter Beitrag vom 28. Apr 2020
Antwort Antwort
Royal Ranger

Registriert seit: 2. Apr 2020
12 Beiträge
 
Delphi 10.3 Rio
 
#1

Verknüpfung von 2 Procedures

  Alt 28. Apr 2020, 11:49
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;
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Verknüpfung von 2 Procedures

  Alt 28. Apr 2020, 11:50
Die Glaskugel sagt:

Delphi-Quellcode:
procedure TForm2.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if
  key=VK_Space
 then
  OnTimer(nil);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.799 Beiträge
 
Delphi 12 Athens
 
#3

AW: Verknüpfung von 2 Procedures

  Alt 28. Apr 2020, 12:02
  1. Du rufst eine Prozedur aus einer anderen heraus auf. Das ist Alltag. Lerne die Nomenklatur. Da wurde nix verknüpft.
  2. Delphi ist eine der Sprachen die mit halbwegs passablen Englischkenntnissen sehr gut lesbar ist... wenn man nicht die eigentlich einzeiligen Sätze zu mehreren irrationalen Absätzen verhackstückt.
  3. Ohne konkrete Fehlermeldung wirst Du nur garstige Posts wie diesen zur Antwort bekommen.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Verknüpfung von 2 Procedures

  Alt 28. Apr 2020, 12:49
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.122 Beiträge
 
Delphi 12 Athens
 
#5

AW: Verknüpfung von 2 Procedures

  Alt 28. Apr 2020, 13:12
verschiedene Varianten, um Button1Click auszuführen
Delphi-Quellcode:
{ 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;
Bei einem anderen Sender kann man in Button1Click über if Sender = ... entscheiden von wem das aufgerufen wurde.
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 Button1Click(Sender); bzw. 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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Apr 2020 um 13:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Verknüpfung von 2 Procedures

  Alt 28. Apr 2020, 13:21
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 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