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/)
-   -   Delphi Procedure als Parameter übergeben (https://www.delphipraxis.net/14230-procedure-als-parameter-uebergeben.html)

SleepyMaster 5. Jan 2004 10:49


Procedure als Parameter übergeben
 
Delphi-Quellcode:
function XShow(p:pointer):integer;
begin
ShowMessage('Hallo');
end;

procedure StartThread(Thread:procedure); //<--- Das procedure da mag er ned!
//Hab aber leider keinen Plan was ich sonst da reinschreiben muss!
var
  ThreadID: DWORD;
  ThreadHandle: THandle;
begin
  ThreadHandle:=BeginThread(nil, 0, TFNThreadStartRoutine(@Thread),
    nil, 0, ThreadID);
  if ThreadHandle<>0 then CloseHandle(ThreadHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
StartThread(XShow);
end;
Wie muss es richtig heißen???
Vielen Dank schon mal

MrKnogge 5. Jan 2004 11:07

Re: Procedure als Parameter übergeben
 
also wenn, dann müsstest du auch die parameter der Übergabe-procedure angeben, mir ist aber nicht bekannt, dass man eine procedure als parameter einer anderen Procedure übergeben kann.

Ich weiss auch ehrlich gesagt nicht, was das bringen soll :gruebel:

[Edit]Aber vielleicht kann man das Problem auch anders lösen[/Edit]

mirage228 5. Jan 2004 11:11

Re: Procedure als Parameter übergeben
 
Delphi-Quellcode:
type
  TMyProc = procedure;
end;

{ ... }

procedure Wuppdi(Proc: TMyProc);
begin
 // ...
end;
mfG
mirage228

MrKnogge 5. Jan 2004 11:13

Re: Procedure als Parameter übergeben
 
ui :shock:
geht das ? Wow, aber wenn dann nur mit Parameterangabe !

mirage228 5. Jan 2004 11:14

Re: Procedure als Parameter übergeben
 
Joa, das geht^^

Auf diese Weise kann man z.B. ein sog. "Callback" realisieren.

Die Events der VCL (TNotifyEvent = procedure(Sender: TObject);) benutzen auch procedures als Paramater.

mfG
mirage2328

Jens Schumann 5. Jan 2004 11:15

Re: Procedure als Parameter übergeben
 
Hallo,
Du kannst eine Methode (bzw einen Methodenzeiger) oder eine reguläre Prozedure übergeben.
Hier ist das Beispiel für den Methodenzeiger
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type

  TMyProc = function (p:pointer):integer of object;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure Test(AProc : TMyProc);
    function AFunction(p:pointer):integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.AFunction(p: pointer): integer;
begin
  Result:=5;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Test(AFunction);
end;

procedure TForm1.Test(AProc: TMyProc);
var
  a : Integer;
begin
  a:=AProc(Nil);
  ShowMessage(IntToStr(a));
end;

end.
Und hier das Beispiel für die reguläre Procedure
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type

  TMyProc = function (p:pointer):integer ;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure Test(AProc : TMyProc);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function AFunction(p: pointer): integer;
begin
  Result:=5;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Test(AFunction);
end;

procedure TForm1.Test(AProc: TMyProc);
var
  a : Integer;
begin
  a:=AProc(Nil);
  ShowMessage(IntToStr(a));
end;

end.

MrKnogge 5. Jan 2004 11:18

Re: Procedure als Parameter übergeben
 
Zitat:

Zitat von mirage228
Joa, das geht^^

Auf diese Weise kann man z.B. ein sog. "Callback" realisieren.

Die Events der VCL (TNotifyEvent = procedure(Sender: TObject);) benutzen auch procedures als Paramater.

mfG
mirage2328

Das die Events (die ja ebenfallsso deklariert werden müssen)
auch proceduren sind, wusst ich aber ich dachte das sie dann
nur ausgeführt werden können, das man dann noch allerlei
anderes Zeugs machen kann, weiss ich erst seit grad eben :mrgreen:

SleepyMaster 5. Jan 2004 11:33

Re: Procedure als Parameter übergeben
 
Vielen Dank!
Es geht!

Micha88 10. Nov 2011 18:18

AW: Procedure als Parameter übergeben
 
Zitat:

Delphi-Quellcode:
ThreadHandle:=BeginThread(nil, 0, TFNThreadStartRoutine(@[B][I]test[/I][/B]),
    nil, 0, ThreadID);
  if ThreadHandle<>0 then CloseHandle(ThreadHandle);

Ist es auch möglich, eine vollständig deklarierte Procedur als Parameter zu übergeben?

also nicht diese
Delphi-Quellcode:
procedure test;
sondern diese
Delphi-Quellcode:
procedure TForm1.test;

s.h.a.r.k 10. Nov 2011 18:23

AW: Procedure als Parameter übergeben
 
Müsste dann halte eine
Delphi-Quellcode:
procedure of object;
sein. Wobei ich dir an der Stelle dann eher raten würde, auf die TThread-Klasse zu setzen und die Referenz auf die Methode via Property zu setzen.


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