Re: [fpc-pascal] How to get a data module to notify of events?
On Thursday 15 September 2011 16:28:29 Frank Church wrote: I have a form with some threaded objects that notify another form of events by calling one of that forms events. I want to convert to a data module and any interested object to register for those notifications. My idea is for each thread to have some kind of list of procedure types and each interested object registers its routine eg. This is the data module. It is a rough sketch and may have some syntax errors Type TOneArg = Procedure (Var X : integer); type TMonitorObject = class(TThread) private InterestedObjects: TList procedure DispatchOutput; procedure DisplayRawOutput; protected procedure Execute; override; public constructor Create(CreateSuspended: Boolean); RegisterInterest(interestedProc:TOneArg); end; TMonitorObject.RegisterInterest(TOneArg); begin InterestedObjects.Add(interestedProc); end; procedure TMonitorObject.DispatchOutput; begin foreach InterestedObject do InterestedObject.Procedure.Execute; end; constructor TMonitorObject.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); InterestedObjects := TList.Create FCycleComplete := True; end; Do the procedures for the objects which require notification need to be constructed in some way? MSEgui has such a notification mechanism with automatic unlinking by destroying the objects, see tobjectlinker in lib/common/kernel/mseclasses.pas. Another possibility is to use a tobjectevent descendant and application.postevent. Am I on the right track here? I am particularly interested in what happens when the objects passing the routines are destroyed without the data module knowing about it. The program most likely will crash. :-) Martin ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] How to get a data module to notify of events?
On 15 September 2011 15:48, Martin Schreiber mse00...@gmail.com wrote: On Thursday 15 September 2011 16:28:29 Frank Church wrote: I have a form with some threaded objects that notify another form of events by calling one of that forms events. I want to convert to a data module and any interested object to register for those notifications. My idea is for each thread to have some kind of list of procedure types and each interested object registers its routine eg. This is the data module. It is a rough sketch and may have some syntax errors Type TOneArg = Procedure (Var X : integer); type TMonitorObject = class(TThread) private InterestedObjects: TList procedure DispatchOutput; procedure DisplayRawOutput; protected procedure Execute; override; public constructor Create(CreateSuspended: Boolean); RegisterInterest(interestedProc:TOneArg); end; TMonitorObject.RegisterInterest(TOneArg); begin InterestedObjects.Add(interestedProc); end; procedure TMonitorObject.DispatchOutput; begin foreach InterestedObject do InterestedObject.Procedure.Execute; end; constructor TMonitorObject.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); InterestedObjects := TList.Create FCycleComplete := True; end; Do the procedures for the objects which require notification need to be constructed in some way? MSEgui has such a notification mechanism with automatic unlinking by destroying the objects, see tobjectlinker in lib/common/kernel/mseclasses.pas. Another possibility is to use a tobjectevent descendant and application.postevent. Am I on the right track here? I am particularly interested in what happens when the objects passing the routines are destroyed without the data module knowing about it. The program most likely will crash. :-) I want to know if my approach is a workable one and what the right syntax should be, handling the destroyed objects I believe I can deal with by checking for the existence of the object before notifying it. Are there some examples of that somewhere? Martin ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal -- Frank Church === http://devblog.brahmancreations.com ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] How to get a data module to notify of events?
On Thursday 15 September 2011 16:53:35 Frank Church wrote: Are there some examples of that somewhere? http://svn.berlios.de/viewvc/mseide-msegui/trunk/lib/common/kernel/mseclasses.pas?view=markup ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] How to get a data module to notify of events?
On Thursday 15 September 2011 16:53:35 Frank Church wrote: Are there some examples of that somewhere? or http://svn.berlios.de/viewvc/mseide-msegui/trunk/lib/common/kernel/msegui.pas?view=markup tmethodlist. Warning, tmethodlist.remove() must be called before destroying the registered objects. There is no automatic unliking as in tobjectlinker. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] How to get a data module to notify of events?
On 15 September 2011 16:26, Martin Schreiber mse00...@gmail.com wrote: On Thursday 15 September 2011 16:53:35 Frank Church wrote: Are there some examples of that somewhere? or http://svn.berlios.de/viewvc/mseide-msegui/trunk/lib/common/kernel/msegui.pas?view=markup tmethodlist. Warning, tmethodlist.remove() must be called before destroying the registered objects. There is no automatic unliking as in tobjectlinker. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal Where is the tmethodlist itself defined? -- Frank Church === http://devblog.brahmancreations.com ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal