On Wed, 3 Feb 2010, Zitt Zitterkopf wrote:

All,
I'm writing a TurboVision App to cross compile to Linux - but debugging on my 
main Win32 box.
 
In this app; I'm attempting to use the TFPTimer component to trigger an event 
every 1000ms. I can't get the bugger to compile; despite google searches and a 
lot of
experience in Delphi.

You are mixing a Delphi Class (TFPTimer) and a TV object (Tapplication). You 
can never mix them.
You can use them independent of each other in the same application, but not assign a tp-style method to a delphi-style event handler.

You need to use a Delphi class TApplication object. If that is not possible, what you can do is create a go-between class:

TMyEvent = Class(TObject)
  Procedure MyEventHandler( Sender : TObject );
  MyApplication : TApplication
end;

Procedure TMyEvent.MyEventHandler(Sender : TObject );

begin
 MyApplication.TimerTimer(Sender);
end;

And assign this to the timer event:

 constructor TBootApp.Init;
 BEGIN
  FmyHandler:=TMyEvent.create;
  FMyhandler.MyApplication:=Self;
  aTimer := TFPTimer.Create(nil);
  aTimer.Interval := 500; //ms
  aTimer.Enabled := False;
  aTimer.OnTimer := @FMyHandler.MyEventHandler;
 END;

Michael.

 
The compiler always seems to throw an error simular to:
 
TVBOOT.PAS(52,20) Error: Incompatible types: got "<procedure variable type of   
procedure(TObject) of object;Register>" expected "CLASSES.<procedure variable type of
procedure(TObject) of object;Register>"

I began by using the advice of Graeme in the post:
http://readlist.com/lists/lists.freepascal.org/fpc-pascal/0/3897.html
 
I know this is simple compiler gymnastics; but I just can't seem to figure it 
out. 
John
 
uses
CRT,App,Objects,Menus,Drivers,Views,Dialogs,
fpTimer;
 
type
 TBootApp = object(TApplication)
 private
  aTimer : TfpTimer;
 protected
  constructor Init;
  destructor Done; virtual;
  procedure InitStatusLine; virtual;
  procedure HandleEvent(var Event: TEvent); virtual;
  procedure Idle; virtual;
  function NewDialog : word;
 public
  procedure TimerTimer( Sender : TObject );
 end;
 PDemoDialog = ^TDemoDialog;
 TDemoDialog = object(TDialog)
 end;
 
var
 BootApp : TBootApp;
 Dialog  : PDemoDialog;
 DoDialog : Boolean;

constructor TBootApp.Init;
BEGIN
 aTimer := TFPTimer.Create(nil);
 aTimer.Interval := 500; //ms
 aTimer.Enabled := False;
 aTimer.OnTimer := @TimerTimer;   //compiler barfs <<<---- here!
END;

destructor TBootApp.Done;
BEGIN
 ATimer.Free;
END;
 
procedure TBootApp.TimerTimer( Sender : TObject );
BEGIN
END;

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to