Primož Gabrijelcic wrote: > if assigned(OnMessage) then //Gp > OnMessage(Self, MsgRec); //Gp > if Result = 0 then //Gp > Result := DefWindowProc(Handle, Msg, wParam, lParam);
In order to allow zero-results the new event required another boolean var parameter, also note the slightly different name (ICS coding style): TIcsMessageEvent = procedure(Sender : TObject; var MsgRec : TMessage; var Handled : Boolean) of object; -- Arno Garrels [TeamICS] http://www.overbyte.be/eng/overbyte/teamics.html > > Primoz > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:twsocket- > [EMAIL PROTECTED] On > Behalf Of Arno Garrels > Sent: Saturday, June 02, 2007 8:08 PM > To: ICS support mailing > Subject: Re: [twsocket] ICS v5 compatibility / WndProc handling > > Looks usefull, though not tested yet. Francois, what do you think? > > Primož Gabrijelcic wrote: >> Hello everybody (and especially Francois). >> >> I have this legacy code that was written using ICS v5. Deep inside >> some >> message processing (specifically RAS handling) is done in overridden >> WndProc >> methods. >> >> When I switched to ICS v6, this code broke. This was mainly expected >> - ICS >> v6 cannot know which socket's WndProc it should call when it receives >> some >> non-internal (not registered via AllocateMsgHandler) message after >> all. >> Still, I had to make old code work with the new message dispatch >> system and >> that's what I did: >> >> I defined new event handler in the TIcsWndHandler: >> >> TIcsOnMessageEvent = procedure(Sender: TObject; var MsgRec: >> TMessage) of >> object; //Gp >> >> TIcsWndHandler = class(TObject) >> FOnMessage : TIcsOnMessageEvent; >> ... >> property OnMessage: TIcsOnMessageEvent read FOnMessage write >> FOnMessage; >> //Gp >> >> In the TIcsWndHandler.WndProc, I call OnMessage if specified: >> >> procedure TIcsWndHandler.WndProc(var MsgRec: TMessage); >> var >> Dummy : Boolean; >> begin >> try >> with MsgRec do begin >> if (Msg >= FMsgLow) and >> (Msg < (FMsgLow + WH_MAX_MSG)) and >> Assigned(FMsgMap[Msg - FMsgLow]) then >> FMsgMap[Msg - FMsgLow].WndProc(MsgRec) >> else begin >> if assigned(OnMessage) then //Gp >> OnMessage(Self, MsgRec); //Gp >> if Result = 0 then //Gp >> Result := DefWindowProc(Handle, Msg, wParam, >> lParam); >> end; >> end; >> except >> // Les exceptions doivent etre gérées, sinon l'application >> sera >> // liquidée dcs qu'une exception se produit ! >> on E:Exception do >> TriggerBgException(E, Dummy); >> end; >> end; >> >> This way, I can catch all messages received by the TIcsWndHandler and >> call >> appropriate legacy code inside my OnMessage handler. >> >> I think this is a simple extension that adds much flexibility and >> that I >> should be included in the base code. >> >> What do others think? >> >> Best regards, >> Primoz > -- > To unsubscribe or change your settings for TWSocket mailing list > please goto http://www.elists.org/mailman/listinfo/twsocket > Visit our website at http://www.overbyte.be -- To unsubscribe or change your settings for TWSocket mailing list please goto http://www.elists.org/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be