Michael Van Canneyt
Wed, 03 Feb 2010 12:00:01 -0800
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
- [fpc-pascal] Assigning events in objects Zitt Zitterkopf
Re: [fpc-pascal] Assigning events in objects Michael Van Canneyt- Re: [fpc-pascal] Assigning events in objects Marco van de Voort