Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie übergebe ich eine Prozedur als Parameter? (https://www.delphipraxis.net/121186-wie-uebergebe-ich-eine-prozedur-als-parameter.html)

Gonzo2 23. Sep 2008 19:18


Wie übergebe ich eine Prozedur als Parameter?
 
Also ich will in etwas das machen

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure ButtonClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonClick(Sender: TObject);
begin
  ShowMessage('Test');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Button1.OnClick := ButtonClick; // <=====
end;
Ich weise dem OnClick Ereignis des Button1 eine Prozedur zu. Soweit kein Problem. Allerdings möchte ich das nicht direkt machen sondern über eine zweite Prozedur

Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  ShowMessage('Test');
end;

procedure machwas(???);
begin
  Button1.OnClick := ???;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  machwas(?ButtonClick?);
end;
Wie kann man das machen? Ich möchte die Prozedur als Parameter übergeben.

jbg 23. Sep 2008 19:22

Re: Wie übergebe ich eine Prozedur als Parameter?
 
Du musst dafür nur den Typen des Methodenzeigers kennen, der in deinem Fall TNotifyEvent ist.
Delphi-Quellcode:
procedure machwas(AEvent: TNotifyEvent);
begin
  Button1.OnClick := AEvent;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  machwas(ButtonClick);
end;

Namenloser 23. Sep 2008 19:34

Re: Wie übergebe ich eine Prozedur als Parameter?
 
Delphi-Quellcode:
procedure Machwas(Proc: TNotifyEvent);
begin
...
end;
TNotifyEvent ist so deklariert:
Delphi-Quellcode:
TNotifyEvent = procedure(TObject) of object;
Auf diese Weise kannst du dir auch Zeigertypen für funktionen und prozeduren mit eigenen Parametern deklarieren. Wenn es keine Prozedur einer Klasse bzw eines Objektes ist, lässt du das of Object eifnach weg.

Zu Risikien und Nebenwirkungen fragen Sie Ihre Delphihilfe :zwinker:

[add]da denkt man, der beitrag wäre abgesendet und wechselt in einen anderen Tab, dabei funkt einem der Kasten dazwischen...[/add]


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