OnIdle erzeugt Fehler in Lazarus (FreePascal)

Guten Tag,
Ich versuche gerade ein Programm zu schreiben, was Arbeit verrichtet, wenn „geidled“ wird. Ich hab das auch schonmal vor langer Zeit unter Delphi gemacht, habe jetzt aber leider nur Lazarus zur Verfügung und finde meine alten Projekte nicht mehr. Ich habe bisher folgendes:

in der Klassendeklaration:
procedure IdleHandler(Sender: TObject; var Done: Boolean);

in der Implementation:
procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
var
(ein paar Variablen)
begin
(ein paar Befehle)

Done:= false;
end;

und des weiteren:

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle := IdleHandler;
end;

Das ganze wirft folgenden Fehler aus:
unit1.pas(57,36) Error: Wrong number of parameters specified for call to „IdleHandler“

Ich habe leider keinen wirklichen Ansatz zur Lösung, da ich der Meinung bin, dass das eigentlich alles so funktionieren sollte. Ich hoffe ihr könnt mir weiterhelfen.

Mit freundlichen Grüßen
Kevin Woost

Hallo Kevin
Deine Deklaration lautet:

procedure IdleHandler(Sender: TObject; var Done: Boolean);

also musst Du beim Aufruf auch entsprechend die Parameter (Objekt und einen Wert für Done) übergeben, z.B.:

Application.OnIdle := IdleHandler(self, true);

Manfred

Hallo Manfred,
danke erst einmal für die Hilfe.
Ich habe das leider auch schon versucht und es funktionierte nicht. Hier kommt die Fehlermeldung

Unit1.pas(63,45) Error: Variable identifier expected

Mit freundlichen Grüßen
Kevin

Hallo Manfred,
danke erst einmal für die Hilfe.
Ich habe das leider auch schon versucht und es funktionierte
nicht. Hier kommt die Fehlermeldung

Unit1.pas(63,45) Error: Variable identifier expected

Mit freundlichen Grüßen

Hallo Kevin,

die Fehlermeldung sagt es doch: Variable identifier expected

Hier wird die Variable erwartet:
procedure TForm1.IdleHandler(Sender: TObject; var Done : Boolean);

Du musst diese Variable in der aufrufenden Procedure deklarieren.
Dazu schau mal hier unter Wert- und Variablenparameter :
http://www.delphi-treff.de/sprachen/object-pascal/pr…

Wenn ich das richtig verstehe müsste die aufrufende prozedur dann so aussehen:

procedure TForm1.FormCreate(Sender: TObject);
var test:boolean;
begin
Application.OnIdle := IdleHandler(self, test);
end;

das ganze wirft dann aber das aus:

Unit1.pas(64,23) Error: Incompatible types: got „untyped“ expected „“

Unit1.pas(64,23) Error: Incompatible types: got „untyped“
expected „“

Der Fehler tritt also in Zeile 64 auf. Zeig doch mal, was Du da und drumherum gemacht hast.

procedure TForm1.FormCreate(Sender: TObject);
var test:boolean;
begin
//application.OnIdle:=IdleHandler;
// Application.OnIdle := IdleHandler;
Application.OnIdle := IdleHandler(self, test);
end;

das sind jetzt die zeilen 59 bis 64… da steht halt echt nicht mehr als die eine zeile…

Hallo Kevin,

Asche auf mein Haupt.
Natürlich sollte alles so richtig sein, wie Du im Ursprungsposting geschrieben hast, d.h. Aufruf ohne Parameter.
Warum es nicht funktioniert: keine Ahnung. Ich habe hier im Mexikanischen Busch leider auch kein Pascal zur Verfügung.
Was mir noch einfällt: hast Du die procedure Idlehandler im Interface deklariert?

Manfred

dumme frage… interface? was ist das, wo ist das, wie mach ich das?