Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 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;
$2B or not $2B

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