Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Timer.onTimer kann nicht zugewiesen werden (https://www.delphipraxis.net/108231-timer-ontimer-kann-nicht-zugewiesen-werden.html)

Kaktus621 9. Feb 2008 11:07


Timer.onTimer kann nicht zugewiesen werden
 
Hallo !

Ich habe ein kleines Problem mit Timern. Ich habe eine Unit erstellt, die die Klasse "TConroller" beinhaltet. In ihr soll ein Timer gestartet werden, der zuerst 'inTime' Millisekunden wartet und anschließend alle 100 ms eine Variable hochzählt.
Mein Problem ist hierbei allerdings, dass ich beim Aufruf 'timer.OnTimer := startDiff;' eine Fehlermeldung erhalte :

Zitat:

control.pas(30,31) Error: Wrong number of parameters specified for call to "startDiff"
control.pas(18,15) Hint: Found declaration: TController.startDiff(TObject)
control.pas(53) Fatal: There were 1 errors compiling module, stopping
Hier der komplette Quelltext der Unit :

Delphi-Quellcode:
unit control;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, ExtCtrls;

type
  { TControl }

  TController = class(TObject)
  private
    timer : TTimer;
    diff : integer;
    firstEvent : boolean;
    procedure startDiff(Sender : TObject);
  public
    constructor Create(inTime : integer);
    procedure stopDiff();
  end;


implementation
  constructor TController.Create(inTime : integer);
  begin
    timer := TTimer.Create(nil);
    timer.Interval := inTime;
    timer.OnTimer := startDiff;
    timer.Enabled := true;
    firstEvent := true;
  end;
 
  procedure TController.startDiff(Sender : TObject);
  begin
    if firstEvent then begin
      timer.Enabled := false;
      timer.Interval := 100;
      timer.Enabled := true;
      firstEvent := false;
    end else begin
      inc(diff);
    end;
  end;

   procedure TController.stopDiff();
   begin
     timer.Enabled := false;
   end;
end.
Ich kann den Timer nicht per Objekt Inspector einfügen und die Methode so zuweisen, da kein Frame in der Unit/Klasse exsistiert ;)

Ich wäre über Hilfe sehr dankbar :)

lbccaleb 9. Feb 2008 11:30

Re: Timer.onTimer kann nicht zugewiesen werden
 
wenn mich nicht alles täuscht musst du ihm doch nur noch ein nil zuweisen also so:

Delphi-Quellcode:
  constructor TController.Create(inTime : integer);
  begin
    timer := TTimer.Create(nil);
    timer.Interval := inTime;
    timer.OnTimer := startDiff(nil);
    timer.Enabled := true;
    firstEvent := true;
  end;

Apollonius 9. Feb 2008 11:32

Re: Timer.onTimer kann nicht zugewiesen werden
 
Hast du es schon mit einem @ vor dem Methodennamen versucht? Und es ist sicher falsch, einen Parameter anzugeben (nil).

SirThornberry 9. Feb 2008 11:35

Re: Timer.onTimer kann nicht zugewiesen werden
 
Zitat:

Zitat von lbccaleb
wenn mich nicht alles täuscht musst du ihm doch nur noch ein nil zuweisen also so:

Delphi-Quellcode:
  constructor TController.Create(inTime : integer);
  begin
    timer := TTimer.Create(nil);
    timer.Interval := inTime;
    timer.OnTimer := startDiff(nil);
    timer.Enabled := true;
    firstEvent := true;
  end;

so auf keinen fall.

Ist das der vollständige Quelltext den du da gepostet hast mit genau den gleichen leerzeilen etc. oder verschweigst du uns einen gewissen Teil?
Grund für meine Frage: Bei mir compiliert es ohne Probleme sobald ich "{$mode objfpc}" entferne. Grund für das entfernen ist das der Mode bei meinem Delphi nicht bekannt ist. Wofür verwendest du diesen mode?

DeddyH 9. Feb 2008 11:46

Re: Timer.onTimer kann nicht zugewiesen werden
 
Das dürfte Lazarus sein ;)

Kaktus621 9. Feb 2008 12:23

Re: Timer.onTimer kann nicht zugewiesen werden
 
Ja, es ist gezwungener maßen Lazarus... Borland Delphi gibts in der Schule nicht :-/ Wobei ich zuhause damit lieber Arbeite...

Also das was da oben steht ist die Komplette Unit. Und das @ vor dem Methodennamen hat anscheinend funktioniert! Es gibt keine Fehlermeldung mehr und das Programm wird ausgeführt. Vielen Dank :)

SirThornberry 9. Feb 2008 12:52

Re: Timer.onTimer kann nicht zugewiesen werden
 
ok, dann erwähne nächstes mal bitte gleich du lazarus verwendest :) Denn das vorranstellen des @ ist wohl eine Eigenart von Lazarus und in Delphi wird es ohne @ gemacht


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz