hallo zusammen,
nachdem mir in einem anderen Tread empfohlen wurde zur Lösung des dortigen Problems eine callback-funtion zu verwenden, und ich keine Ahnung davon hatte, hab ich zum besseren Verständnis und nach Vorlage aus einem alten dephi2 -Buch
mal versucht so eine Funktion zu erstellen.
Hier soll einfach beim button-klick der übergebene String "hallo Welt" in eine Listbox eingetragen werden.
Leider bekomme ich bem Kompilieren den Fehler:
mainform.pas(35,41) Error: Wrong number of parameters specified for call to "MyCallback"
was mache ich falsch?
hier der quelltext:
Delphi-Quellcode:
unit mainform;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, testklasse;
type
{ TForm1 }
TForm1 =
class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
function MyCallback(s:
String) : integer;
stdcall ;
testklasse: Ttestklasse;
end;
var
Form1: TForm1;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
testklasse:= Ttestklasse.create(self);
testklasse.GetWert(self.MyCallback);
testklasse.free;
end;
function TForm1.MyCallback(s:
String) : integer;
stdcall;
begin
self.listbox1.items.add(s);
end;
initialization
{$I mainform.lrs}
end.
die zweite
unit:
Delphi-Quellcode:
unit testklasse;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
Type
TTestCallback =
function(s:
string): integer;
Type
Ttestklasse =
class(TPersistent)
public
constructor Create(AOwner:TPersistent);
published
Destructor Destroy;
override;
procedure GetWert(TestCallback:TTestCallback);
end;
implementation
{@********************************************************}
{ constructor Ttestklasse }
{ }
{ }
{********************************************************@}
constructor Ttestklasse.Create(AOwner:TPersistent);
begin
inherited Create;
// extra wichtig, denn sonst kein Event;
// do noch nix
end;
{@********************************************************}
{ destructor Ttestklasse }
{ }
{ }
{********************************************************@}
destructor Ttestklasse.Destroy;
begin
// do noch nix
// Always call the parent destructor after running your own code
inherited;
end;
procedure Ttestklasse.GetWert(TestCallback:TTestCallback);
begin
TestCallback('
hallo Welt');
end;
end.